Sprite kit 使用精灵套件,如何让对象跳跃?
我正在用精灵工具包做一个游戏,现在我想知道什么是让物体“跳跃”的最好方法。因此,它将以几个像素垂直发射。 这是我要跳转的对象的代码:Sprite kit 使用精灵套件,如何让对象跳跃?,sprite-kit,skphysicsbody,Sprite Kit,Skphysicsbody,我正在用精灵工具包做一个游戏,现在我想知道什么是让物体“跳跃”的最好方法。因此,它将以几个像素垂直发射。 这是我要跳转的对象的代码: SKSpriteNode *sprite = [SKSpriteNode spriteNodeWithImageNamed:@"bal.png"]; sprite.position = CGPointMake(self.frame.size.width/4 + arc4random() % ((int)self.frame.size.width/2), (self
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);
通过更改与精灵关联的
physicsBody
的velocity
属性,为身体提供速度
具体来说,您需要添加
sprite.physicsBody.velocity = CGVectorMake(vx,vy);
编辑:如果您想通过操作完成此操作,请使用SKAction
+ (SKAction *)followPath:(CGPathRef)path duration:(NSTimeInterval)sec;
+ (SKAction *)moveByX:(CGFloat)deltaX y:(CGFloat)deltaY duration:(NSTimeInterval)sec;
然而,使用其中任何一种方法都需要你根据你的速度向量来计算物体,并自己照顾重力(为了给出合适的
deltaX
和deltaY
或正确的路径),这是非常不必要的。为什么不直接提到速度,让SpriteKit为您解决呢?我会尽量避免直接设置对象的速度。相反,我会对物体施加力和脉冲。在大多数情况下,这种方法效果更好,因为它不会破坏物理模拟。例如,这是我如何使对象跳跃的:
- (void) jump:(SKSpriteNode*)obj
{
if (obj.isTouchingGround)
{
CGFloat impulseX = 0.0f;
CGFloat impulseY = 25.0f;
[object.physicsBody applyImpulse:CGVectorMake(impulseX, impulseY) atPoint:obj.position];
}
}