2014-02-28 47 views
0

这是运行我的精灵的代码,它应该顺利跳转并从屏幕中心开始。它偶尔会这样做,但大多数时候它会崩溃在地板上。它仍然跳跃,但不平稳。雪碧速度Cocos2d 3.0

浮点值

@interface HelloWorldScene() <CCPhysicsCollisionDelegate> 
{ 
float   _yVel; 
} 

@end 

数学

- (void) jump 
{ 
// adjust jump speed here 
if (_player.position.y > kFLOOR_HEIGHT) _yVel -= 0.14; 
else { 
    if (_yVel != 5) _yVel = 0; 
} 

_player.position = ccp(_player.position.x, _player.position.y + _yVel); 
} 

有人能帮助这一点?

回答

1

我无法理解一切你的代码,则应该分享更多的信息(例如,当它被发送跳跃消息?是当用户触摸屏幕有些按钮?)

不过,我可以给你有一些提示来改善它:

  • 避免创建像_yVel这样的属性,请改用physicsBody.velocity。正如我看到你正在使用物理学(因为CCPhysicsCollisionDelegate),所以你不需要重新发明轮子来模拟身体的速度。
  • 实现“跳跃”的最好方法是对物理体施加一些脉冲/力量,而不是直接改变速度。如果你也使用重力,它会给你通常在平台类型游戏中找到的“平滑”下降效果。
  • 您不应该将像_yVel这样的浮动数字与另一个确切数字进行比较,就像您在if (_yVel != 5) _yVel = 0;中所做的那样。这是非常直接的理解,因为非常接近5的数字,如5.00001将返回YES的条件。如果你真的需要做这样的事情,你应该使用的时间间隔,而不是像if (_yVel >= 4.5 && _yVel <= 5.5) ...

编辑:这个伟大的教程将帮助您https://www.makegameswith.us/gamernews/369/build-your-own-flappy-bird-with-spritebuilder-and