Дисплей upperLimit SKRange - PullRequest
       81

Дисплей upperLimit SKRange

0 голосов
/ 19 апреля 2020

Так вот мой код:

import SpriteKit
import GameplayKit

class GameScene: SKScene {

    var ship1 = [2,1]
    var ship2 = [1,2]

    let jonahSpriteNode = SKSpriteNode(imageNamed: "jonah_spaceship")
    let georgeSpriteNode = SKSpriteNode(imageNamed: "george_spaceship")

    override func didMove(to view: SKView) {
        //var jonahFrames = [SKTexture]()
        jonahSpriteNode.position = CGPoint(x: 30, y: frame.midY)
        jonahSpriteNode.size = CGSize(width: 100.0, height: 100.0)
        addChild(jonahSpriteNode)

        georgeSpriteNode.position = CGPoint(x: 628, y: frame.midY)
        georgeSpriteNode.size = CGSize(width: 100.0, height: 100.0)
        addChild(georgeSpriteNode)
    }

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        for touch in touches{
            var touchLocation = touch.location(in: self)
            var angle1 = atan2(jonahSpriteNode.position.y - touchLocation.y , jonahSpriteNode.position.x - touchLocation.x)
            var angle = angle1 - CGFloat(Double.pi / 1)

            makeCircularRange(to: jonahSpriteNode)

            let rotate = SKAction.rotate(toAngle: angle, duration: 1.0)
            let move = SKAction.move(to: CGPoint(x: touchLocation.x, y: touchLocation.y), duration: 2.5)
            let sequence = SKAction.sequence([rotate, move])
            jonahSpriteNode.run(sequence)
        }
    }

    func makeCircularRange(to node: SKNode) {
        let range = SKRange(lowerLimit: 0, upperLimit: 400)
        let constraint = SKConstraint.distance(range, to: .zero)
        node.constraints = [constraint]
    }

}

Я хотел отобразить SKRange, показывая upperLimit определенным цветом. Я попытался сделать узлы вокруг предела и затем раскрасить узлы, но это только показало кучу ошибок. Если у вас есть идеи, пожалуйста, ответьте.

Примерно так: With the sprite node in the middle to show where you can move

Узел спрайта будет в центре, и круг покажет, куда он может двигаться.

1 Ответ

0 голосов
/ 19 апреля 2020

Вы можете сделать круглую форму, используя range.upperLimit в качестве радиуса для добавления в сцену.

func drawCircularRangeBy(range: SKRange) {
    let radius = range.upperLimit
    let node = SKShapeNode(circleOfRadius: radius)
    node.strokeColor = .white
    addChild(node)
}

Взгляните на этот пример: https://github.com/Maetschl/SpriteKitExamples/blob/master/CircularRange/CircularRange/GameScene.swift

Если вам действительно нужны точки вместо линии, посмотрите этот ответ: Рисование пунктирной линии в наборе спрайтов с использованием SKShapeNode

enter image description here

...