1 回答

TA貢獻1845條經驗 獲得超8個贊
根據代碼,可以看出 rotateimage() 函數調用后,car_r + 1 圖片的指針已經被修改,如果直接傳入 drawImg() 函數中,可能會導致指針的位置出錯,因此導致無法正確打印圖片。而 putimage() 函數是直接將圖像輸出到屏幕上,不需要傳入指針,因此不會受到指針位置的影響。
解決這個問題可以有以下兩種方法:
1.重新將旋轉后的圖片指針賦值給一個新的指針變量,然后將這個新的指針變量作為參數傳遞給 drawImg() 函數。例如:
IMAGE* rotated_cars = new IMAGE;
rotateimage(rotated_cars, cars + 2, -0.54, false, true);
drawImg(player.x, player.y, rotated_cars);
2.在 drawImg() 函數內部,先將原始的圖片指針保存下來,然后再對指針進行操作。例如:
void drawImg(int x, int y, IMAGE* src)
{
// 變量初始化
DWORD* pwin = GetImageBuffer(); //窗口緩沖區指針
DWORD* psrc = GetImageBuffer(src); //圖片緩沖區指針
DWORD* psrc_original = psrc; // 保存原始的圖片指針
// ...
// 實現透明貼圖
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;
}
// 恢復原始的圖片指針
psrc = psrc_original;
}
- 1 回答
- 0 關注
- 445 瀏覽
添加回答
舉報