1 回答

TA貢獻(xiàn)1845條經(jīng)驗(yàn) 獲得超8個(gè)贊
根據(jù)代碼,可以看出 rotateimage() 函數(shù)調(diào)用后,car_r + 1 圖片的指針已經(jīng)被修改,如果直接傳入 drawImg() 函數(shù)中,可能會(huì)導(dǎo)致指針的位置出錯(cuò),因此導(dǎo)致無(wú)法正確打印圖片。而 putimage() 函數(shù)是直接將圖像輸出到屏幕上,不需要傳入指針,因此不會(huì)受到指針位置的影響。
解決這個(gè)問(wèn)題可以有以下兩種方法:
1.重新將旋轉(zhuǎn)后的圖片指針賦值給一個(gè)新的指針變量,然后將這個(gè)新的指針變量作為參數(shù)傳遞給 drawImg() 函數(shù)。例如:
IMAGE* rotated_cars = new IMAGE;
rotateimage(rotated_cars, cars + 2, -0.54, false, true);
drawImg(player.x, player.y, rotated_cars);
2.在 drawImg() 函數(shù)內(nèi)部,先將原始的圖片指針保存下來(lái),然后再對(duì)指針進(jìn)行操作。例如:
void drawImg(int x, int y, IMAGE* src)
{
// 變量初始化
DWORD* pwin = GetImageBuffer(); //窗口緩沖區(qū)指針
DWORD* psrc = GetImageBuffer(src); //圖片緩沖區(qū)指針
DWORD* psrc_original = psrc; // 保存原始的圖片指針
// ...
// 實(shí)現(xiàn)透明貼圖
for (int iy = 0; iy < real_h; iy++)
{
for (int ix = 0; ix < real_w; ix++)
{
byte a = (byte)(psrc[ix] >> 24);
if (a > 100)
{
pwin[ix] = psrc[ix];
}
}
// 換到下一行
pwin += win_w;
psrc += src_w;
}
// 恢復(fù)原始的圖片指針
psrc = psrc_original;
}
- 1 回答
- 0 關(guān)注
- 432 瀏覽
添加回答
舉報(bào)