gpt4 book ai didi

c - 如何在物体移动时改变图片

转载 作者:行者123 更新时间:2023-11-30 14:27:26 26 4
gpt4 key购买 nike

例如吃 bean 人。嘴要么闭合,要么张开。当它移动时,这些图片会互相改变。我试图这样做

 case WM_PAINT:         
......
if (ChoosePictureInt==0)
{
MaskBlt(mdc,my_pos.x,my_pos.y,my_size.cx,my_size.cy,my_dc,0,0,my_closemask,0,0,MAKEROP4(SRCCOPY,SRCPAINT));
MaskBlt(mdc, my_pos.x, my_pos.y, my_size.cx, my_size.cy, my_dc, 0, 0, my_mask, 0, 0, MAKEROP4(SRCCOPY, SRCPAINT));

}

但结果我在窗口中只看到了最后一张图片。当我想这样做时(如果是 WM_TIMER)

 case WM_TIMER: 
if(LOWORD(wParam) == 777u) {
if(GetAsyncKeyState(VK_LEFT))
{
if (GreatFuncLeftRight(my_pos.x,my_pos.y))
{
ChoosePictureInt = 1;
if (ChooseMouseInt == 0)
ChooseMouseInt = 0;
else ChooseMouseInt = 0;
my_pos.x -= 2; // влево
MaskBlt(mdc, my_pos.x, my_pos.y, my_size.cx, my_size.cy, my_dc, 0, 0, my_mask, 0, 0, MAKEROP4(SRCCOPY, SRCPAINT));
}
else my_pos.x-=0;
}

什么也没发生

我的回答

这就是我解决这个问题的方法(我认为这不是最好的方法)

//for examp. for -> direction 
if(GetAsyncKeyState(VK_RIGHT))
{
if (GreatFuncLeftRightReverse(my_pos.x,my_pos.y))
{
ChoosePictureInt = 0; //variable for picture with direction
ChooseMouseInt *=-1; //variable for closed or opened mouth
my_pos.x += 5; // вправо
}
else my_pos.x+=0;
}

这是 WM_PAINT 中的事件

......
if (ChoosePictureInt==0)
{
if(ChooseMouseInt<0)
{
Sleep(85);
MaskBlt(mdc,my_pos.x,my_pos.y,my_size.cx,my_size.cy,my_dc,0,0,my_mask,0,0,MAKEROP4(SRCCOPY,SRCPAINT));
}
else
{
Sleep(85);
MaskBlt(mdc, my_pos.x, my_pos.y, my_size.cx, my_size.cy, my_dc4, 0, 0, my_closemask, 0, 0, MAKEROP4(SRCCOPY, SRCPAINT));
}
}
.....

最佳答案

更改 WM_TIMER 消息处理程序中的状态变量(如对象坐标、事件位图等),并使窗口无效。在 WM_PAINT 消息处理程序中进行所有绘图。

使用InvalidateRect函数http://msdn.microsoft.com/en-us/library/dd145002(v=vs.85).aspx使窗口客户区无效。这导致 WM_PAINT 消息被发送到窗口,并且 WM_PAINT 消息处理程序根据新的对象状态重绘窗口。

关于c - 如何在物体移动时改变图片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7940624/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com