【问题标题】:iOS: Setting velocity does not working sprite kitiOS:设置速度不起作用精灵套件
【发布时间】: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:&lt;#(SEL)#&gt; onThread:&lt;#(NSThread *)#&gt; withObject:&lt;#(id)#&gt; waitUntilDone:&lt;#(BOOL)#&gt;]。但是,我需要传递一个不是 'id' 类型的 CGVector,所以我不能使用该代码。

【问题讨论】:

  • 为什么要在每一帧上创建一个新播放器?每次更新:被称为您正在创建 _player 并将其放置在场景中。这永远行不通
  • 我这样做是为了改变_player的形象。
  • 身体应该是动态的,然后只有物理学会应用速度。

标签: ios sprite-kit game-physics


【解决方案1】:

身体应该是动态的,然后只有物理世界允许应用速度。

Swift3.0

_player.physicsBody.isDynamic = true

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多