Как ограничить SKShapeNode для ребер устройства в SpriteKit? - PullRequest
0 голосов
/ 26 февраля 2020

Просто чтобы проверить, я создал синий квадрат и поместил его в центр экрана следующим образом:

let mySquare = SKShapeNode(rectOf: CGSize(width: 50, height: 50))

mySquare.fillColor = SKColor.blue
mySquare.lineWidth = 1
let myPoint = CGPoint(x: UIScreen.main.nativeBounds.midX, y: UIScreen.main.nativeBounds.midY)

mySquare.position.x = 0
mySquare.position.y = 0

self.addChild(mySquare)

Прекрасно работает. Теперь я хотел бы использовать constraints и установить квадрат constraints по краям экрана устройства. Я пробовал это, но синий квадрат не появляется, поэтому я думаю, что у меня неправильное представление о том, как захватить CGPoint краев экрана.

let mySquare = SKShapeNode(rectOf: CGSize(width: 50, height: 50))

        mySquare.fillColor = SKColor.blue
        mySquare.lineWidth = 1
        let myPoint = CGPoint(x: UIScreen.main.nativeBounds.maxX, y: UIScreen.main.nativeBounds.maxY)

        let range = SKRange(lowerLimit: 10.0, upperLimit: 10.0)
        let myConstraints = SKConstraint.distance(range, to: myPoint)

        mySquare.constraints = [myConstraints]
        self.addChild(mySquare)

Как мне сделать снимок экрана края и ограничить квадрат до тех?

1 Ответ

0 голосов
/ 26 февраля 2020

SKConstraint не работает так же, как UIKit Constraints.

Функциональность SKConstraint действительно задана c:

Пожалуйста, посмотрите здесь: https://developer.apple.com/documentation/spritekit/skconstraint

В любом случае, могу дать вам несколько рекомендаций:

  1. Преобразовать положение экрана в положение сцены:
self.view?.convert(myPoint, to: self)
Вы можете начать с этого примера и получить узел в углу
let mySquare = SKShapeNode(rectOf: CGSize(width: 50, height: 50))
mySquare.fillColor = SKColor.blue
mySquare.lineWidth = 1
let myScreenPoint = CGPoint(x: UIScreen.main.bounds.maxX, y: UIScreen.main.bounds.maxY)
if let myScenePoint = self.view?.convert(myScreenPoint, to: self) {
    mySquare.position = myScenePoint
}
self.addChild(mySquare)
С помощью этой логики c вы можете получить каждую сторону экрана и уменьшить или увеличить маржу и сделать каждые 4 стороны; или 1 ограничение для центра.
...