【问题标题】:Spritekit top down turning character movementSpritekit 自上而下转动角色移动
【发布时间】:2015-04-21 10:48:40
【问题描述】:

如果您愿意,我正在 Spritekit 中创建一个自上而下的“赛车”游戏。但是,我已经陷入了创建游戏玩法的困境。您可以从自上而下的视角控制一辆始终以恒定速度行驶的汽车。玩家可以按两个按钮来让汽车左转或右转。速度必须保持不变,但汽车的 zRotation 必须改变。改变 zRotation 不是问题,但定义汽车的新速度才是问题。

我目前正在使用 Vectors,因此假设每次玩家按下“turnLeft”按钮时,汽车的 zRotation 都会以 45 度和 20 的恒定速度变化,新的速度将是:

    player.physicsBody.velocity = CGVectorMake(14.14, 14.14);

通过使用 45 度的 sin 和 cos 以及向量和给出恒定速度 20(具有两个 45 度角和一侧为 20 的三角形)。

但是,我不知道每次玩家按住 turnLeft 按钮时应该如何设置此变量,以及是否应该使用操作或更新功能。如果玩家选择永远按住左转按钮,他应该可以驾驶一个圆圈。任何帮助表示赞赏!谢谢。

【问题讨论】:

    标签: objective-c vector sprite-kit top-down


    【解决方案1】:

    要计算速度的组成部分,您基本上需要按照您所说的进行,除了使用您的精灵的zRotation 代替 45 度。例如:

    let speed: CGFloat = 20 // The constant speed.
    
    // Work out the components of velocity:
    let dx = speed * cos(sprite.zRotation)
    let dy = speed * sin(sprite.zRotation)
    
    sprite.physicsBody!.velocity = CGVector(dx: dx, dy: dy)
    

    作为改进,最好将此代码添加为CGVector的初始化器,以实现可重用性:

    extension CGVector {
        init(length: CGFloat, angle: CGFloat) {
            self.dx = length * cos(angle)
            self.dy = length * sin(angle)
        }
    }
    

    然后你可以像这样使用它:

    sprite.physicsBody!.velocity = CGVector(length: speed, angle: sprite.zRotation)
    

    希望能回答你的问题。

    【讨论】:

    • 这很完美!它仍然只能通过点击按钮来工作。只要触摸按钮,有没有办法让它保持一致?
    • 您是否为每个按钮使用SKSpriteNode?还是UIButton
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多