【发布时间】:2014-04-19 16:23:39
【问题描述】:
我目前正在使用 sprite kit 制作应用程序。当用户向上滑动时,我正在尝试更改对象的速度。但是,即使调用该函数,速度也不会改变。 这是我的代码:
- (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;
}
在当前版本中,我删除了
_player.physicsBody.velocity = CGVectorMake(0.0f, 10.0f); ligne 在 updatePlayer 函数中,但它仍然不会改变速度。
我还尝试使用布尔值从 swipedUp 函数中调用 updatePlayer 函数,以确保我应该更改速度。同样,读取线但不应用速度变化。
我以前在另一个应用程序中遇到过类似的问题来更改 UILabel 的文本。我用[_player performSelector:<#(SEL)#> onThread:<#(NSThread *)#> withObject:<#(id)#> waitUntilDone:<#(BOOL)#>]。但是,我需要传递一个不是 'id' 类型的 CGVector,所以我不能使用该代码。
【问题讨论】:
-
为什么要在每一帧上创建一个新播放器?每次更新:被称为您正在创建 _player 并将其放置在场景中。这永远行不通
-
我这样做是为了改变_player的形象。
-
身体应该是动态的,然后只有物理学会应用速度。
标签: ios sprite-kit game-physics