swift - 无法将孩子添加到 GameScene,只能添加到 SKSpriteNode
问题描述
当按下按钮时,我正在尝试从类(行星)到我的 GameScene 创建一个 SKSpriteNode。我的问题是边框没有出现在屏幕上。
class Planets: SKSpriteNode, EventListenerNode, InteractiveNode {
var gameScene: GameScene!
func didMoveToScene(){
isUserInteractionEnabled = true
gameScene = (SKScene(fileNamed: "GameScene") as! GameScene)
}
func interact() {
print("hi \(self.name ?? "Planet X")")
let border = SKSpriteNode(color: SKColor.gray, size: CGSize(width: 200, height: 200))
border.name = "border"
border.zPosition = 100
border.position = CGPoint(x: gameScene.frame.size.width/2, y: gameScene.frame.size.height/2)
gameScene.addChild(border)
}
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
super.touchesEnded(touches, with: event)
interact()
}
}
但是,如果我使用 self.addChild,(self 表示 Planets 类)它可以工作,所以如果我将边框添加到 SKSpriteNode,它就可以工作,但我不希望这样,因为大小不同,位置也不同。我只想将它添加到我的 GameScene 中。先感谢您!
解决方案
我认为这里的问题是该类正在使用此行Planets
创建自己的副本:GameScene
gameScene = (SKScene(fileNamed: "GameScene") as! GameScene)
该副本永远不会出现,因此它永远不可见,添加到它的边框也不可见。
如果Planets
是子节点,GameScene
我会尝试在Planets
添加边框时引用节点的父节点,如下所示:
func interact() {
print("hi \(self.name ?? "Planet X")")
guard let gameScene = self.parent as? GameScene else {
print("Error: could not get the parent scene")
return
}
let border = SKSpriteNode(color: SKColor.gray, size: CGSize(width: 200, height: 200))
border.name = "border"
border.zPosition = 100
border.position = CGPoint(x: gameScene.frame.size.width/2, y: gameScene.frame.size.height/2)
gameScene.addChild(border)
}
推荐阅读
- sql-server-2014 - 使用 T-SQL 通过匹配模式搜索重复项
- apache-spark - 如何在不使用 Sqoop 的情况下自动将 Hive 外部表与 MySQL 表同步?
- python - 如何使用 Beautiful Soup 仅刮取连续的第一项
- android - 使用 Kotlin 像 Redbus 一样安排和预订船位
- or-tools - 为什么改变起始位置的顺序会导致不同的解决方案?
- c# - C# Linq to SQL Query 2 Dates nos getting results
- segmentation-fault - 英特尔 TBB 文件访问
- python-3.x - 从 Dataframe 到 Datestamp python3
- c++ - 绘制 R-Package 中函数的依赖关系
- r - Windows 上 r 中 unicode 中的 Twitter 表情