2014-11-06 36 views
0

我有一个对象,我试图在距离屏幕底部一定距离的水平地面上反弹。我如何才能让物体在这个地方上下稳定地跳动?我有:SpriteKit弹跳对象

self.physicsWorld.gravity = CGVectorMake(0.0, -5.0); 
object.physicsBody.restitution = 1.0; 
object.physicsBody.linearDamping = 0.0; 

,然后联系方法,每当我的弹跳对象落在由于重力和我的地面碰撞中,我运用一种冲动:

[object.physicsBody applyImpulse:CGVectorMake(0.0, 10.0)]; 

我的问题是这种做法是零星的。重力的影响需要时间来增加每个时间间隔内的加速度。物体开始弹跳超高,随着时间的推移,它甚至不再弹跳。有没有人有更好的方法来流畅地反射我的物体而不会损失能量?

+0

由于摩擦引起的能量损失默认值为0.2将其更改为0.0解决您的问题 – dragoneye 2014-11-06 08:29:51

+0

还检查allowrotation属性,它需要为false – dragoneye 2014-11-06 08:52:57

回答

0
-(void)floor 
{ 
    SKSpriteNode *floor = [SKSpriteNode spriteNodeWithImageNamed:@"floor"]; 
    floor.position = yourPosition; 
    floor.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:floor.frame]; 
    floor.physicsBody.dynamic = NO; 
} 

-(void)ball 
{ 
    SKSpriteNode *ball = [SKSpriteNode spriteNodeWithImageNamed:@"ball"]; 
    ball.position = yourPosition; 
    ball.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:ball.size.width/2]; 
    ball.physicsBody.dynamic = YES; 
    ball.physicsBody.restitution = 0.5; 
}