Я пытаюсь разработать игру как полноценный новичок. Я настраиваю игровую сцену, которая корректно ссылается на объект, называемый таксоном и BlockNode.Невозможно обратиться к объекту за пределами моего класса
Теперь я хочу сделать что-то интерактивным и хочу добавить импульс на таксиNode при нажатии BlockNode. Для этого я настроил func interactive() в моем классе BlockNode, но я не могу получить доступ к моему TaxiNode.
Вот мой код для BlockNode класса
import SpriteKit
class BlockNode: SKSpriteNode, CustomNodeEvents, InteractiveNode {
func didMoveToScene() {
print("block added")
userInteractionEnabled = true
}
func interact() {
taxiNode.physicsBody!.applyForce(CGVectorMake(0, 400))
}
override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
super.touchesEnded(touches, withEvent: event)
print("destroy block")
//interact()
}
}
Мой GameScene класса выглядит следующим образом
import SpriteKit
struct PhysicsCategory {
static let None: UInt32 = 0
static let Taxi: UInt32 = 0b1 // 1
static let Block: UInt32 = 0b10 // 2
static let Edge: UInt32 = 0b100 // 4
/* static let Edge: UInt32 = 0b1000 // 8
static let Label: UInt32 = 0b10000 // 16
static let Spring:UInt32 = 0b100000 // 32
static let Hook: UInt32 = 0b1000000 // 64 */
}
protocol CustomNodeEvents {
func didMoveToScene()
}
protocol InteractiveNode {
func interact()
}
class GameScene: SKScene, SKPhysicsContactDelegate {
var taxiNode: TaxiNode!
override func didMoveToView(view: SKView) {
/* Setup your scene here */
// Calculate playable margin
let maxAspectRatio: CGFloat = 16.0/9.0 // iPhone 5
let maxAspectRatioHeight = size.width/maxAspectRatio
let playableMargin: CGFloat = (size.height - maxAspectRatioHeight)/2
let playableRect = CGRect(x: 0, y: playableMargin,
width: size.width, height: size.height-playableMargin*2)
physicsBody = SKPhysicsBody(edgeLoopFromRect: playableRect)
physicsWorld.contactDelegate = self
physicsBody!.categoryBitMask = PhysicsCategory.Edge
enumerateChildNodesWithName("//*", usingBlock: {node, _ in
if let customNode = node as? CustomNodeEvents {
customNode.didMoveToScene()
}
})
taxiNode = childNodeWithName("taxi") as! TaxiNode
}
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
}
override func update(currentTime: CFTimeInterval) {
/* Called before each frame is rendered */
}
}
И я получаю следующее сообщение об ошибке в моем BlockNode Class
«Использование неразрешенной идентификатор «taxiNode»
Кто-нибудь знает, что мне нужно исправить, чтобы обратиться к таксиНод и заставить принять мой импульс?
Нужно ли ему создавать протокол в этом случае? – Akaino
уверен, почему бы и нет, интерактивные узлы могут взаимодействовать по-разному – Knight0fDragon
Да, правильно. Я был просто curiuos, если он является обязательным в этом конкретном случае, который я предполагаю ist нет. Спасибо хоть! – Akaino