小球碰撞设计课件.ppt

小球碰撞设计课件.ppt

ID:56987327

大小:278.00 KB

页数:33页

时间:2020-07-25

小球碰撞设计课件.ppt_第1页
小球碰撞设计课件.ppt_第2页
小球碰撞设计课件.ppt_第3页
小球碰撞设计课件.ppt_第4页
小球碰撞设计课件.ppt_第5页
资源描述:

《小球碰撞设计课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、需求分析功能在一个矩形区域内,模拟多个小球的移动和碰撞(小球和边框、小球之间)。能够以不同的角度、速度发射小球设计模型设计功能和模块设计类设计1、碰撞模型简单的碰撞模型:完全弹性碰撞小球与墙壁碰撞,仅仅改变球的角度;小球之间碰撞,互换速度和角度(小球大小相等,质量相等);可以考虑更复杂的模型。碰撞检测的时机:按一定的时间间隔,计算小球的新位置,判断是否发生碰撞,并进行碰撞处理。2、功能设计切分视图左侧视图,指定参数后,发射小球右侧窗口,模拟小球的移动和碰撞存储结构应使用集合类存储“小球”数据,允许发射任意多个小球。如CArray关键技术定时器的使用SetTimer启动定时器,同时

2、设置游戏速度,注意与小球速度为不同的概念;在WTIMER消息处理函数中进行碰撞检测碰撞检测和处理小球类封装3、小球类设计数据成员设计CPointcenter;//小球中心doubleradius;//小球半径doublespeed;//小球移动速度doubleangle;//小球移动角度COLORREFcolor;//小球颜色小球类设计函数成员设计voidShow(CDC*pDC,inti);voidClear(CDC*pDC);//显示和擦除小球voidStep(CRectsize);//按既定角度和方向前进一步,包括是否与边框碰撞BOOLIsCollision(constCB

3、all&ball);//是否和其它小球产生碰撞voidCollide(CBall&ball);//碰撞处理实现小球类实现功能模块实现测试及完善1、小球类实现classCBall:publicCObject//可序列化的{DECLARE_SERIAL(CBall)public:CBall();virtual~CBall();virtualvoidSerialize(CArchive&ar);CPointcenter;intradius;intspeed;intangle;COLORREFcolor;voidShow(CDC*pDC);voidClear(CDC*pDC);voidS

4、tep(CRectsize);BOOLIsCollision(constCBall&ball);voidCollide(CBall&ball);};小球类实现-构造函数CBall::CBall(){angle=0;center=CPoint(0,0);radius=10;speed=0;}小球类实现-显示小球voidCBall::Show(CDC*pDC){CBrushbrush(color),*oldBrush;CPenpen(PS_SOLID,1,color),*oldPen;oldBrush=pDC->SelectObject(&brush);oldPen=pDC->Sel

5、ectObject(&pen);pDC->Ellipse(center.x-radius,center.y-radius,center.x+radius,center.y+radius);pDC->SelectObject(oldBrush);pDC->SelectObject(oldPen);}小球类实现-清除小球voidCBall::Clear(CDC*pDC){pDC->SelectStockObject(WHITE_BRUSH);pDC->SelectStockObject(WHITE_PEN);pDC->Ellipse(center.x-radius,center.y-

6、radius,center.x+radius,center.y+radius);}小球类实现-两球是否碰撞BOOLCBall::IsCollision(constCBall&ball){doubledx,dy,length;dx=center.x-ball.center.x;dy=center.y-ball.center.y;length=sqrt(dx*dx+dy*dy)+1;if(length<=radius+ball.radius)returntrue;returnfalse;}小球类实现-前进一步voidCBall::Step(CRectrect){doubledx,dy

7、;dx=speed*sin(*PI/180);dy=speed*cos(angle*PI/180);center.x+=dx;center.y+=dy;小球类实现-前进一步voidCBall::Step(CRectrect){……if(center.y+radius>rect.bottom){angle=180-angle;center.y=rect.bottom-radius;}if(center.y-radius<0){angle=180-angle;center.y=rad

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。