环境:VS2022+EasyX
使用show()函数(XOR叠加)的方式绘制背景透明的图片,第一个putimage输入原码图,第二个putimage输入掩码图,运行一开始图片是正常显示的,为什么移动后图片变得很亮,应该如何修改实现游戏画面的刷新?
void Player::show()
{
putimage(x, y, &img_Player[direction], NOTSRCERASE);
putimage(x, y, &img_Player[direction + 4], SRCINVERT);
}
void Player::Move()
{
int step = 5;
outtextxy(win_width/2, win_height/2, "YES");
if ((GetAsyncKeyState('A') & 0x8000)) {//a
x -= step;
}
if ((GetAsyncKeyState('D') & 0x8000)) {//d
x += step;
}
}
//int main
Player P;
P.show();
P.initStatus();
while (true) {
P.Move();
BeginBatchDraw();
P.DrawStatus();
P.show();
FlushBatchDraw(); // 刷新画面
Sleep(100);
}
EndBatchDraw();
正常显示:
移动后显示:
原码图和掩码图: