多个精灵节点,只出现一个
multiple sprite nodes, only one appears
1 输出图像位于此处
我对 swift 和代码 'works' 的编码还很陌生,因为在这种情况下,其中一个精灵会出现 "play button",但是我无法理解出现在所有。
我不知道这是否仅仅是因为我采用了错误的方法或使用了错误的方法,但经过一番研究后我仍然卡住了,所以我求助于你们。
我已经包含了下面的代码(我已经包含了整个文档,但是关键区域将是 didMove to view 部分,我包含了其余部分,因为它可能是相关的)。正如我所说,其中一个精灵确实出现但另一个没有出现(无论我如何改变值)。
如有任何帮助,我们将不胜感激。
public class GameScene: SKScene {
let background = UIImage(named: "Sky")
let playButton = SKSpriteNode(imageNamed: "Play Button")
let ground = SKSpriteNode(imageNamed: "Ground")
let groundPoint = CGPoint(x: 0, y:2)
override public func didMove(to view: SKView) {
self.playButton.position = CGPoint(x: 1, y: 2)
self.ground.position = CGPoint(x: self.frame.width / 2, y: self.frame.height / 3)
self.addChild(playButton)
self.addChild(ground)
self.backgroundColor = UIColor.white
}
override public func touchesBegan(_ touches: Set<UITouch>, with event:
UIEvent?) {
for touch: AnyObject in touches{
let location = touch.location(in: self)
if (self.atPoint(location) == self.playButton) {
let skView = self.view as! SKView
skView.ignoresSiblingOrder = true
let scene = PlayScene(size: self.size)
scene.scaleMode = .resizeFill
scene.size = skView.bounds.size
skView.presentScene(scene)
}
}
}
}
我假设您不了解 Spritekit 中默认锚点系统的工作原理。
默认情况下,场景和所有对象都是使用 anchorPoint 0.5, 0,5 创建的。这会将所有新对象放在屏幕的正中央。
所以您在 CGPoint(x: 1, y: 2)
的播放按钮上设置的位置是将播放按钮设置为距中心 3 个像素(不是很多)。
假设你想要地面在场景底部,你的播放按钮在屏幕中央,你会像这样布置它
playButton.position = CGPoint(x: 0, y: 0) //or CGPoint.zero or nothing at all since by default it will get placed in the center
playButton.zPosition = 1
self.addChild(playButton)
ground.position = CGPoint(x: 0, y: 0 - self.size.height / 2 + ground.size.height / 2)
ground.zPosition = 1
self.addChild(ground)
我知道您已指定忽略同级顺序,但我认为指定 zPositions 是更好的做法。
值得注意的是,您也可以使用
将场景锚点更改为左下角
self.anchorPoint = CGPoint.zero
可能是你的zPositions没有设置好,positions也关闭了
1 输出图像位于此处
我对 swift 和代码 'works' 的编码还很陌生,因为在这种情况下,其中一个精灵会出现 "play button",但是我无法理解出现在所有。
我不知道这是否仅仅是因为我采用了错误的方法或使用了错误的方法,但经过一番研究后我仍然卡住了,所以我求助于你们。
我已经包含了下面的代码(我已经包含了整个文档,但是关键区域将是 didMove to view 部分,我包含了其余部分,因为它可能是相关的)。正如我所说,其中一个精灵确实出现但另一个没有出现(无论我如何改变值)。
如有任何帮助,我们将不胜感激。
public class GameScene: SKScene {
let background = UIImage(named: "Sky")
let playButton = SKSpriteNode(imageNamed: "Play Button")
let ground = SKSpriteNode(imageNamed: "Ground")
let groundPoint = CGPoint(x: 0, y:2)
override public func didMove(to view: SKView) {
self.playButton.position = CGPoint(x: 1, y: 2)
self.ground.position = CGPoint(x: self.frame.width / 2, y: self.frame.height / 3)
self.addChild(playButton)
self.addChild(ground)
self.backgroundColor = UIColor.white
}
override public func touchesBegan(_ touches: Set<UITouch>, with event:
UIEvent?) {
for touch: AnyObject in touches{
let location = touch.location(in: self)
if (self.atPoint(location) == self.playButton) {
let skView = self.view as! SKView
skView.ignoresSiblingOrder = true
let scene = PlayScene(size: self.size)
scene.scaleMode = .resizeFill
scene.size = skView.bounds.size
skView.presentScene(scene)
}
}
}
}
我假设您不了解 Spritekit 中默认锚点系统的工作原理。
默认情况下,场景和所有对象都是使用 anchorPoint 0.5, 0,5 创建的。这会将所有新对象放在屏幕的正中央。
所以您在 CGPoint(x: 1, y: 2)
的播放按钮上设置的位置是将播放按钮设置为距中心 3 个像素(不是很多)。
假设你想要地面在场景底部,你的播放按钮在屏幕中央,你会像这样布置它
playButton.position = CGPoint(x: 0, y: 0) //or CGPoint.zero or nothing at all since by default it will get placed in the center
playButton.zPosition = 1
self.addChild(playButton)
ground.position = CGPoint(x: 0, y: 0 - self.size.height / 2 + ground.size.height / 2)
ground.zPosition = 1
self.addChild(ground)
我知道您已指定忽略同级顺序,但我认为指定 zPositions 是更好的做法。
值得注意的是,您也可以使用
将场景锚点更改为左下角self.anchorPoint = CGPoint.zero
可能是你的zPositions没有设置好,positions也关闭了