19,468
社区成员
发帖
与我相关
我的任务
分享
typedef struct
{
POINT Center_Pos;
bool IsShow;
int Radius;
float speed;
//当前球体的角度, 相对于x轴正方向的;
float theta;
COLORREF color;
}BALL;
BALL ball[BALL_NUM];
//台球桌的尺寸;
int m_DeskX, m_DeskY;
//桌面起始坐标:
CPoint m_DeskOrig;
void CHitView::Collision(int ballx, int bally, int ballr, int index)
{
//right, 没有除去画笔的宽度; 有个边缘问题;
if(ball[index].Center_Pos.x >= (m_DeskOrig.x+m_DeskX-ballr) )
{
ball[index].Center_Pos.x = m_DeskOrig.x+m_DeskX-ballr;
ball[index].theta = PI - ball[index].theta;
}
//bottom
if (ball[index].Center_Pos.y >= (m_DeskOrig.y+m_DeskY-ballr) )
{
ball[index].Center_Pos.y = m_DeskOrig.y+m_DeskY-ballr;
ball[index].theta = -ball[index].theta;
}
//left
if ( ball[index].Center_Pos.x <= m_DeskOrig.x+ballr )
{
ball[index].Center_Pos.x = m_DeskOrig.x+ballr;
ball[index].theta = PI - ball[index].theta;
}
//top
if (ball[index].Center_Pos.y <= m_DeskOrig.y+ballr)
{
ball[index].Center_Pos.y = m_DeskOrig.y+ballr;
ball[index].theta = -ball[index].theta;
}
}
球的数据结构,还有就是与窗口碰撞的函数,