SpriteKit으로 게임을 만들고 Xcode의 장면 편집기를 사용하여 GameScene
을 설정하고 있습니다.SKSpriteNode 사용자 정의 하위 클래스의 이니셜 라이저에 물리 물리 체를 설정하면 작동하지 않습니다.
씬에 Player
이 포함되어 있는데,이 장면을 Color Sprite로 드래그하여 Custom Class
필드에 mygame.Player
으로 채 웁니다.
Player
이라는 SKSpriteNode의 사용자 지정 하위 클래스가 있는데이 클래스에서 응용 프로그램이 호출하는 이니셜 라이저에 물리 속성을 설정합니다. 내 GameScene.swift
파일에서
class Player: SKSpriteNode {
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
print(self)
self.physicsBody = SKPhysicsBody(rectangleOf: self.size)
self.physicsBody?.restitution = 0
self.physicsBody?.isDynamic = true
self.physicsBody?.affectedByGravity = true
self.physicsBody?.velocity = CGVector(dx: 50, dy: 0)
print(self.physicsBody)
}
}
, 나는 플레이어를 참조 할 수, 그래서이 연결 작동합니다.
override func didMove(to view: SKView) {
player = childNode(withName: "player") as! Player
print(player)
print(player.physicsBody)
}
실제로 플레이어와 물리학 자 본문을 완벽하게 인쇄합니다.
<SKSpriteNode> name:'player' texture:['nil'] position:{0, 0} scale:{1.00, 1.00} size:{100, 100} anchor:{0.5, 0.5} rotation:0.00
Optional(<SKPhysicsBody> type:<Rectangle> representedObject:[<SKSpriteNode> name:'player' texture:['nil'] position:{0, 0} scale:{1.00, 1.00} size:{100, 100} anchor:{0.5, 0.5} rotation:0.00])
그러나 플레이어는 중력을 갖도록 장면을 설정했지만 장면 위로 이동하지 않습니다! 실제로 이동하는 플레이어를 얻기 위하여, 나는 다시 PhysicsBody을 설정 GameScene의 : 함수에 didMove (에 코드의 또 다른 라인을 추가해야합니다
player.physicsBody = SKPhysicsBody(rectangleOf: player.size)
여기 무슨 일이야? 왜 이니셜 라이저에서 내 플레이어의 물리 구조체를 설정하지 않습니까?
맞습니다. SpriteKit에는이 버그가 있습니다. 네가 나에 대해 말해 줘서 고마워! – thecanteen