2013-10-16 49 views
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); 

回答

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爲你解決?

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]; 
    } 
}