首页 > 解决方案 > SpriteKit 驾驶技巧

问题描述

我是一名想要在 SpriteKit 中制作游戏的 iOS 开发人员。我的游戏开发经验为零:)

这将是一个 2D 游戏,汽车在屏幕的水平轴上从 A 行驶到 B。会有颠簸和其他障碍物。我想应用很多物理,爆炸等。汽车会受到它们的影响,减速,翻滚等。另外,汽车可能会失去一个轮子。

我的问题可能听起来微不足道:如何让汽车“开车”。

是否有可能/现实地构造我的汽车类,使其实际上有轮子,可以旋转并实际向前移动汽车?汽车需要某些特性才能在地面上获得牵引力。

这将允许真正的美好事物,例如在具有不同特性的不同表面上驾驶等(冰,污垢,停机坪)

我正在寻找如何做到这一点的最佳实践和技术。

标签: iosswiftsprite-kitgame-enginegame-physics

解决方案


您可以将汽车和车轮作为 SKSpritekits 全部添加到一个 SKNode,在该节点中给它们位置,然后水平移动父节点。有多种方法可以水平移动节点,您可以通过创建 SKAction - moveTo、moveBy、move 或仅通过施加力、脉冲、速度 parentNode.physicsBody.applyImpulse 来实现。当您移动父节点时-它将全部移动。如果您使用适当的 SKAction,您当然可以让轮子旋转,这样它们就会旋转——它们将永远旋转。

    let parentNode = SKShapeNode(rectOf: CGSize(width: 200, height: 100))
    parentNode.position = CGPoint(x: 300, y: 100)
    addChild(parentNode)
    let car = SKSpriteNode(imageNamed: "car")
    let wheel1 = SKSpriteNode(imageNamed: "wheel")
    let wheel2 = SKSpriteNode(imageNamed: "wheel")
    wheel1.position = CGPoint(x: -110, y: -20)
    wheel2.position = CGPoint(x: 135, y: -20)
    car.position = CGPoint(x:40, y: 50)
    let spin = SKAction.rotate(byAngle: -.pi*2, duration: 10)
    let spinForever = SKAction.repeatForever(spin)
    wheel1.run(spinForever)
    wheel2.run(spinForever)
    parentNode.addChild(wheel1)
    parentNode.addChild(wheel2)
    parentNode.addChild(car)
    let move = SKAction.move(to: CGPoint(x: 1000, y: 100), duration: 50)
    parentNode.run(move)

请记住,子节点的位置是相对于其父节点的


推荐阅读