我是noob,所以,原谅我,如果这是一个非常基本的问题。我正在创建我的第一个应用程序,它是一个游戏。对于一个文件来说,代码变得太大了(总是上下移动很烦人)。所以我把我的函数放在另一个文件里。问题是addChild不能从其他文件工作。在我的游戏中,当玩家停在一个特定的地方时,必须调用一个节点。如果该函数在“GameScene.swift”文件中,那么它工作得很好,但是如果该函数在任何其他swift文件中,那么该节点被调用,但是不显示。我知道这个物体被调用是因为如果玩家第二次击中同一个地方,游戏会崩溃,并显示一条消息说我正在试图施放一个已经施放的物体。
我要调用的节点放置在结构中,因此可以从我代码的任何部分访问。
有一种从其他文件强制转换节点的正确方法吗?
一个说明清楚的例子。波纹管代码运行良好。我触摸正方形和其他正方形出现
// GameScene.swift // teste1 import SpriteKit struct myStruct { static let myNode : SKShapeNode = SKShapeNode(rectOfSize: (CGSizeMake(100,100)), cornerRadius: 5) static let myGameScene = GameScene() } class GameScene: SKScene { override func didMoveToView(view: SKView) { /* Setup your scene here */ myStruct.myNode.position = CGPoint(x:(CGRectGetMidX(self.frame)), y:(CGRectGetMidY(self.frame)) + 150) myStruct.myNode.fillColor = SKColor.redColor() let button : SKShapeNode = SKShapeNode(rectOfSize: (CGSizeMake(100,100)), cornerRadius: 5) button.position = CGPoint(x:(CGRectGetMidX(self.frame)), y:(CGRectGetMidY(self.frame))) button.fillColor = SKColor.greenColor() button.name = "button" addChild(button) } // end DidMoveToView func addNode () { addChild(myStruct.myNode) } override func touchesBegan(touches: Set, withEvent event: UIEvent?) { let touch = touches //as! Set let location = touch.first!.locationInNode(self) let node = self.nodeAtPoint(location) // +++ BUTTON: DICE +++ if (node.name == "button") { addNode() } } } //end GameScene
但是不可能从其他文件中进行同样的操作。假设我将函数addNode()转移到其他swift文件,如下所示:
// otherFile.swift // teste1 import SpriteKit func addNode () { myStruct.myGameScene.addChild(myStruct.myNode) }
当我触摸“按钮”时,注意会发生,但是如果我第二次触摸:
2016-01-17 09:54:54.641 teste1[954:24089] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Attemped to add a SKNode which already has a parent: name:'(null)' accumulatedFrame:{{460.64999, 482.64999}, {102.7, 102.7}}' *** First throw call stack:
对结构中的元素使用static关键字。这意味着在整个应用程序中只有一个元素实例(它总是同一个对象)。这导致您再次将同一节点添加到同一场景。
问题内容: 我有下表,其中的表是空的,我正在尝试填充: 要填充的源数据是我从外部CSV文件填充的临时表: 我想做的是用中的值填充。该字段可以直接复制,但是我不太确定如何获取正确的内容(可以使用tmp_table.langname确定language.id)和(tmp_table.tplname,tmp_table.source,tmp_table.domain一起使用)确定template.id)
问题内容: 如果文件中有一组方法,是否可以将这些文件包含在另一个文件中,但不带任何前缀(即文件前缀)调用它们? 所以,如果我有: 我怎么这样称呼它: 问题答案: 您将需要将其他文件作为模块导入,如下所示: 如果您不想在函数名称前加上模块名称,请执行以下操作: 如果要导入模块的所有成员,请执行以下操作: 编辑: 这是Dive Into Python 的精彩一章,在该主题上有更深入的介绍。
问题内容: 我有一个包含多个Maven模块的项目 MockIFSClient 访问为 因此 IFSClientTest 运行鳍,因为它们在同一包中。 问题? 尝试访问相同代码的 调用,但现在失败,因为 services / pom.xml 具有以下依赖性 题 我要做出什么改变 这样也可以从不同的模块访问它 问题答案: 这个答案帮助我正确了 如何从Java中的类路径真正读取文本文件 我将代码更改为
问题内容: 我将一个序列化为一个文件,并将该文件传输到另一台计算机上的另一个系统。 而且由于接收文件的系统是不同的,所以我没有相同的类,而是具有完全相同的结构但使用不同的包的类。 当我使用 从文件中读出我有一个。 如何避免这种异常?是否仅在接收列表时需要在其他系统中创建相同的包结构? 问题答案: 是的,您可以做三件事之一。 用相同的包名称创建相同的类 创建一个接口(当然,在两台计算机上都使用相同的
问题内容: 如何在Python中导入其他文件? 我到底该如何导入特定的文件呢? 如何导入文件夹而不是特定文件? 我想根据用户输入在运行时动态加载Python文件。 我想知道如何从文件中仅加载一个特定部分。 例如,在我有: 尽管这给了我中的所有定义,但也许我只想要一个定义: 我要从import语句中添加些什么? 问题答案: 是Python中的新增功能,用于以编程方式导入模块。它只是一个包装器,请参见
我不能运行Nginx,因为端口80已经在监听docker代理服务。 我想在端口8800而不是默认端口80上运行Nginx。 因此,我编辑了默认文件,如下所示; 但是,即使在重新启动后,我仍然无法使其按预期工作。 我做错了什么,如何解决? 下面是我得到的错误; ● nginx。服务-高性能web服务器和反向代理服务器已加载:已加载(/lib/systemd/system/nginx.service;