我的俄罗斯方块就这样结束了? - C++ Builder / Windows SDK/API
有一个问题就是窗口的刷新如果用InvalidateRect(hwnd,NULL,TRUE)这个,也就是整个窗口都刷新,我的矩形很正常,但如果我这样的话--for(int i=0;i<4;i++)
{
InvalidateRect(hwnd,Rect+i,TRUE);
}
也就是说只刷新我的那的矩形区域,问题就出现了,矩形下方少了正好一个Y的值,为什么?我是抓破头皮也想不到这是为什么。
由于代码太多只摘取主要部分,如果哪位对我的这个项目感兴趣的话,我们可以合作开发,相互学习。
现在我的俄罗斯方块已经实现了大部分功能,只剩下“叠罗汉功能”,和转动的功能,这几天被这个问题搞得是焦头烂额,毫无进展,还请高人帮我看看,什么原因。
case WM_PAINT :
{
HDC hdc=BeginPaint(hwnd,&ps);
for(int i=0;i<4;i++)
{
Rect[i]=*(ZJ(8)+i);//ZJ返回一个RECT结构体数组起始地址,ZJ的参数是要选择的形状,每个形状有四个矩形组成。
}
caozuo(hdc,hwnd,Rect);//调用这个函数使方块每秒移动一定距离
SetTimer(hwnd,0,1000,Timer);//设定定时器
EndPaint(hwnd,&ps);
}
return 0 ;
case WM_DESTROY :
PostQuitMessage (0) ;
return 0 ;
}
return DefWindowProc (hwnd, iMsg, wParam, lParam) ;
}
VOID CALLBACK Timer(HWND hwnd,UINT message,UINT TimerID,DWORD DW)
{
InvalidateRect(hwnd,NULL,TRUE);//窗口每秒无效整个区域一次,!!!!!问题就在这里
}
void caozuo(HDC hdc,HWND hwnd,RECT *Rect3)
{
for(int i=0;i<4;i++)
{
OffsetRect(Rect3+i,X,Y);//每秒使得Y增加一些
FrameRect(hdc,Rect3+i,*(hbrush+i))//实现移动
}
}
[解决办法]
为啥你每个paint里面都调用这么多函数。。。。
我觉得大while循环里面每隔一段时间调用绘图函数。
[解决办法]
我做过俄罗斯方块。。但只是用来玩玩的,你开发这个干嘛用?