在过去的几天里,我一直在尝试制作类似乒乓球的游戏。我有 2 个桨和一个球。所有动态精灵。除了我遇到的一个问题外,一切都运行良好。球往往会在某个点以相同的角度反弹。所以有时玩家可以简单地在特定部分移动球拍,游戏可以持续一段时间或可能永远,因为无论击中球拍的哪个部分,球都不会改变其角速度. 我正在使用线速度和角速度的组合来保持球像这样移动:
if(_isPaused == FALSE)
{
_world->Step(dt, 10, 10);
for(b2Body *b = _world->GetBodyList(); b; b=b->GetNext()) {
if (b->GetUserData() != NULL) {
CCSprite *sprite = (CCSprite *)b->GetUserData();
if(sprite.tag == 2)
{
b2Vec2 dir = b->GetLinearVelocity();
dir.Normalize();
float currentSpeed = dir.Length();
int maxSpeed = 60;
float accelerate = vel;
if(currentSpeed <= maxSpeed)
{
b->SetLinearVelocity(accelerate * dir);
}
sprite.position = ccp(b->GetPosition().x * PTM_RATIO,
b->GetPosition().y * PTM_RATIO);
sprite.rotation = -1 * CC_RADIANS_TO_DEGREES(b->GetAngle());
//Keep sprite from bouncing in a straight angle
b->SetAngularVelocity(_body->GetAngle());
}}}
所以我的问题是,我如何操纵角速度以使球在每次与我的桨碰撞时以不同的角度弹跳?我正在考虑获取当前角速度然后将其乘以某个值,但我不确定这是否是解决我遇到的问题的正确方法。任何建议或想法将不胜感激。提前致谢。