C++多小球非对心弹性碰撞(HGE引擎)

发表于:2014-5-08 10:03

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:SeeMore    来源:51Testing软件测试网采编

  开篇
  开始上代码之前我先说下我为啥写的这个程序,大三的时候学习C#接触过GDI+而发现原来做图形界面的程序也可以这么简单。之后便开始用GDI+做起动画、游戏等,其中便有一个模拟多小球碰撞的,在CSDN上有分享过(  http://pan.baidu.com/s/1qWjTkmS  ),不过现在回头想想那个程序还是存在很多问题的,比如:没考虑非对心碰撞问题,或者说是球体斜碰问题,帧率低问题,碰撞检测精度不够导致小球粘连问题(使用的是球体像素整型)。说到这里想必使用过GDI+的同学都会有一个想法就是GDI+用来做游戏效率确实不行。于是呢转战C++,正好自己的毕设要写一个C++ 2D游戏,所以在写游戏项目之余,便花费一天时间写了这个模拟球体“弹性斜碰”程序。至于为什么要花这么长时间,是因为大多数时间我都花在了这个“斜碰”问题上,这也是我要写这篇博客的主要原因,网上关于小球弹性 斜碰 的程序确实很少。不信可以百度下。
  上代码
  模拟小球碰撞嘛,所以小球的实体类是必须的(Ball.h)
#pragma once
#include <math.h>
#include "hge.h"
class CBall
{
public:
CBall();
CBall(float _x,float _y,float _speedX ,float _speedY,float _radius ,DWORD _color,float _density = 1.0f);
~CBall(){};
public:
bool IsCollision(CBall *ball,float dt);  //碰撞检测
void CollisionWith(CBall *ball); //弹性正碰
void CollisionWith2(CBall *ball);//弹性斜碰
void SwapColor(CBall *ball); //好玩点,加个交换颜色
void MoveNext(float dt,float _width,float _height);
//由于程序不大,方便起见所有就都public了
public:
float x;//x轴坐标
float y;//y轴坐标
float speed_x;  //x轴方向速度
float speed_y;  //x轴方向速度
float radius;   //球体半径
float density;  //密度
float weight;   //质量
DWORD color;//混合颜色
};
  从Ball的类成员定义中可以看出来,球体的大概属性基本包括全面了,不过多了个Color这个属性是用来设置球体颜色的,因为图片素材是纯白实心圆,在使用color颜色进行顶点着色时候可直接设置获得该颜色的圆。
31/3123>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号