Остановить спрайт с экрана, используя физические тела - PullRequest
0 голосов
/ 07 мая 2018

У меня есть спрайт, который пользователь может перемещать из стороны в сторону, нажимая на левую или правую часть экрана. Если вы удерживаете любую сторону, спрайт игрока покинет экран. Я хочу, чтобы это не происходило с использованием физических тел, но я не могу заставить это работать.

Для начала, вот мои категории.

//Categories for physics bodies
let sceneCategory:UInt32   = 0x1 << 0 // Equal to 1
let playerCategory:UInt32 = 0x1 << 1 // Equal to 2

Здесь я устанавливаю физическое тело самой сцены.

self.physicsWorld.contactDelegate = self
self.physicsBody = SKPhysicsBody(edgeLoopFrom: self.frame)
self.physicsBody?.categoryBitMask = sceneCategory
self.physicsBody?.contactTestBitMask = playerCategory
self.physicsBody?.collisionBitMask = 0
self.physicsBody?.isDynamic = false

Вот так я установил физику для самого игрока. Я пытаюсь установить физическое тело вокруг самой машины. Является ли способ настройки таким же, как настройка физического тела для альфа-маски?

let texture = SKTexture(imageNamed: "PorscheBlue")
player.physicsBody = SKPhysicsBody(texture: texture, size: player.size)
player.physicsBody?.isDynamic = false
player.physicsBody?.categoryBitMask = playerCategory
player.physicsBody?.contactTestBitMask = sceneCategory
player.physicsBody?.collisionBitMask = 0

Затем в методе didBegin я просто хотел, чтобы он печатал, показывая, что метод был вызван. Это не происходит, хотя по какой-то причине.

func didBegin(_ contact: SKPhysicsContact)
{
    print("called")
}

Почему не вызывается метод didBegin? Я правильно настроил физику? Как сделать так, чтобы игроку не разрешалось покидать экран во время движения?

Спасибо

РЕДАКТИРОВАТЬ: Таким образом, когда видимые границы физики, похоже, что границы сцены нарисованы только сверху и снизу. Я не вижу никаких линий на сторонах. Это может быть проблемой, но я не могу показать это по сторонам.

1 Ответ

0 голосов
/ 09 мая 2018

Я решил свою проблему, изменив динамическое значение. У меня обоих было установлено значение false, что приводит к тому, что функция didBegin не вызывается. По крайней мере один из узлов должен быть динамическим.

...