У меня есть физический контакт SpriteKit, стреляющий в didBegin(contact:)
. Я беру физическое тело для экземпляра объекта Dot, который хочу переместить за пределы экрана, но когда я пытаюсь изменить его положение таким образом, ничего не происходит:
Первый подход
/* In GameScene.swift */
func didBegin(_ contact: SKPhysicsContact) {
let dotBody: SKPhysicsBody
if contact.bodyA.categoryBitMask == 0b1 {
dotBody = contact.bodyB
} else {
dotBody = contact.bodyA
}
if let dot = dotBody.node as? Dot {
dot.position.x = 10000
}
}
Однако, если я вместо этого вызываю метод в своем классе Dot, передавая это тело, позиция устанавливается правильно:
Второй подход
/* In GameScene.swift */
func didBegin(_ contact: SKPhysicsContact) {
let dotBody: SKPhysicsBody
if contact.bodyA.categoryBitMask == 0b1 {
dotBody = contact.bodyB
} else {
dotBody = contact.bodyA
}
if let dot = dotBody.node as? Dot {
dot.move()
}
}
Вот класс Dot:
import SpriteKit
class Dot : SKSpriteNode {
let dotTex = SKTexture(imageNamed: "dot")
init() {
super.init(texture: dotTex, color: .clear, size: dotTex.size())
self.physicsBody = SKPhysicsBody(circleOfRadius: size.width / 2)
self.physicsBody?.categoryBitMask = 0b1 << 1
self.physicsBody?.contactTestBitMask = 0b1
}
func move() {
let reset = SKAction.run {
self.position.x = 10000
}
self.run(reset)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
}
Может ли кто-нибудь объяснить, почему изменение позиции во втором подходе работает, но не работает в моем первом подходе?
dot.position.x = 1000
. Я не участвую в каких-либо SKA с таким подходом. Второй подход в основном такой же, как и первый, только я использую SKAction для запуска строкиdot.position.x = 1000
и делаю это внутри отдельного класса Dot, а не в классе игровой сцены. - person peacetype   schedule 26.05.2017touchesBegan
. Таким образом, игрок касается узла точки на экране, и его узел спрайта игрока появляется прямо поверх узла точки. Это момент, когда два тела соприкасаются. - person peacetype   schedule 26.05.2017didBegin(contact:)
я беру SKPhysicsBody и преобразую его как объект Dot, а затем пытаюсь напрямую установить его положение. Поскольку я создаю много точечных объектов в сцене, я подозреваю, что попытка создать физическое тело не дает мне ссылки на точечный объект, который мне нужен. Но вроде должно работать, и компилятор ошибок не выдает. - person peacetype   schedule 26.05.2017contact.body
какdotBody
, а затемdotBody.node
как точку. Если вы нажмете опцию на переменную в Xcode, она сообщит вам, что это такое. (dotBody
будет SKPhysicsBody, аdot
будет точкой). - person Steve Ives   schedule 26.05.2017didBegin(contact:)
не работает. - person peacetype   schedule 26.05.2017