使用Sprite Kit,我如何让一个对象跳跃?

4

我正在使用Sprite Kit制作一款游戏,现在我想知道让物体“跳跃”的最佳方法是什么。所以它将以垂直方向上升几个像素。

以下是我想要跳跃的对象的代码:

SKSpriteNode *sprite = [SKSpriteNode spriteNodeWithImageNamed:@"bal.png"];
sprite.position = CGPointMake(self.frame.size.width/4 + arc4random() % ((int)self.frame.size.width/2), (self.frame.size.height/2 + arc4random() % ((int)self.frame.size.height/2)));
sprite.color = [self randomColor];
sprite.colorBlendFactor = 1.0;
sprite.xScale = 0.2;
sprite.yScale = 0.2;
[self addChild:sprite];
sprite.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:sprite.size.width/2];
self.physicsWorld.gravity = CGVectorMake(0.0f, -4.0f);
2个回答

7

我建议避免直接设置物体的速度,而是应该对物体施加力和冲量。大多数情况下,这种方法效果更好,因为它不会破坏物理模拟。例如,这就是我让我的物体跳跃的方法:

- (void) jump:(SKSpriteNode*)obj
{
    if (obj.isTouchingGround)
    {
        CGFloat impulseX = 0.0f;
        CGFloat impulseY = 25.0f;           
        [object.physicsBody applyImpulse:CGVectorMake(impulseX, impulseY) atPoint:obj.position];   
    }
}

4

通过更改与精灵相关的physicsBodyvelocity属性,为物体赋予速度。

具体来说,您需要添加以下代码:

sprite.physicsBody.velocity = CGVectorMake(vx,vy);

编辑:如果您想通过操作来完成此操作,请使用SKAction的这两种类方法之一。
+ (SKAction *)followPath:(CGPathRef)path duration:(NSTimeInterval)sec;
+ (SKAction *)moveByX:(CGFloat)deltaX y:(CGFloat)deltaY duration:(NSTimeInterval)sec;

然而,使用这些方式需要你根据速度向量计算并自己处理重力(为了提供适当的deltaXdeltaY或正确的path),这是相当不必要的。为什么不直接提到速度,让SpriteKit为你计算呢?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接