我目前正在使用精灵套件制作应用。我试图在用户滑动时改变对象的速度。但是,即使调用该函数,速度也不会改变。 这是我的代码:
- (void)swipedUp {
NSLog(@"swiped up!");
_player.physicsBody.velocity = CGVectorMake(_player.physicsBody.velocity.dx, 200.0f);
}
我可以在更新功能中调用的另一个函数中更改速度:
-(void)update:(CFTimeInterval)currentTime {
/* Called before each frame is rendered */
_player = [self updatePlayer];
[self moveBackgound];
}
- (SKNode *)updatePlayer {
/* Create the node */
SKNode *playerNode = [SKNode node];
SKSpriteNode *sprite = [SKSpriteNode spriteNodeWithImageNamed:@"Car_normal.png"];
// dx > 0 => right ; dy > 0 => up
_player.physicsBody.velocity = CGVectorMake(0.0f, 10.0f);
if (_player.physicsBody.velocity.dy < 0.0f) {
sprite = [SKSpriteNode spriteNodeWithImageNamed:@"Car_brake.png"];
}
[playerNode addChild:sprite];
return playerNode;
}
在当前版本中,我删除了
在updatePlayer函数中_player.physicsBody.velocity = CGVectorMake(0.0f, 10.0f);
ligne,但它仍然不会改变速度。
我还尝试使用boolean从swipedUp函数调用updatePlayer函数以确保我应该更改速度。再次,读取ligne但不应用速度变化。
我以前在另一个应用程序中有类似的问题来更改UILabel的文本。我用了[_player performSelector:<#(SEL)#> onThread:<#(NSThread *)#> withObject:<#(id)#> waitUntilDone:<#(BOOL)#>]
。但是,我需要传递一个不是'id'类型的CGVector,所以我不能使用那段代码。
答案 0 :(得分:0)
身体应该是动态的,然后只有physicsworld才允许施加速度。
<强> Swift3.0 强>
_player.physicsBody.isDynamic = true