Например Пакман. Рот либо закрыт, либо открыт. И пока он движется, эти картинки меняют друг друга.
Я пытался сделать так
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));
}
}
.....