Техника вождения SpriteKit - PullRequest
0 голосов
/ 20 апреля 2019

Я разработчик для iOS, который хочет сделать игру в SpriteKit. У меня нулевой опыт разработки игр:)

Это будет 2D-игра, в которой автомобиль проезжает по горизонтальной оси экрана от А до В. Будут неровности и другие препятствия. Я хотел бы применить много физики, взрывов и т. Д. Они будут воздействовать на автомобиль, замедляясь, бросаясь и т. Д. Кроме того, автомобиль может потерять колесо.

Мой вопрос может показаться тривиальным: как заставить машину «водить».

Было бы возможно / реалистично структурировать мой класс автомобилей таким образом, чтобы на самом деле имелись колеса, которые вращались и действительно двигали автомобиль вперед? Автомобиль должен обладать определенными свойствами, чтобы набирать обороты на земле.

Это позволило бы действительно совершать приятные вещи, такие как движение по разным поверхностям с разными свойствами и т. Д. (Лед, грязь, асфальт)

Я ищу лучшие практики и приемы, как это сделать.

1 Ответ

0 голосов
/ 20 апреля 2019

Вы можете добавить автомобиль и колеса как 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)

Имейте в виду, положение дочернего узла относительно его родителя

...