【发布时间】:2017-11-08 01:10:10
【问题描述】:
我正在使用 SpriteKit 构建游戏,并且正在使用 Xcode 的场景编辑器来设置我的 GameScene。
场景包含一个Player,我将它作为颜色精灵拖到场景中,并在Custom Class 字段中填写为mygame.Player。
我有一个名为 Player 的 SKSpriteNode 自定义子类,在这个类中,我在应用调用的初始化程序中设置了物理属性。
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)
}
}
在我的GameScene.swift 文件中,我可以引用播放器,所以这个链接有效。
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])
但是,即使我已将场景设置为具有重力,玩家也永远不会在场景中移动!为了让玩家真正移动,我需要在 GameScene 中的 didMove(to:) 函数中添加另一行代码,再次设置 PhysicsBody:
player.physicsBody = SKPhysicsBody(rectangleOf: player.size)
这里发生了什么?为什么在初始化程序中设置我的 Player 的物理主体不起作用?
【问题讨论】:
标签: ios sprite-kit