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

本文探讨了如何使用C++编程语言,在HGE引擎环境下处理小球之间的非对心弹性碰撞。详细解释了计算碰撞后速度的方法,包括考虑碰撞角度和碰撞偏心率的影响,为游戏开发中的物理模拟提供了实用的解决方案。
摘要由CSDN通过智能技术生成
程序是一个月前完成的,之前一直没正儿八经的来整理下这个程序,感觉比较简单,不过即使简单的东西也要跟大家分享下。


开篇
    开始上代码之前我先说下我为啥写的这个程序,大三的时候学习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颜色进行顶点着色时候可直接设置获得该颜色的圆。
下面依次说下各个成员方法的作用,部分有代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值