jjzjj

swift - 在不再次运行的情况下更改 touch 内部的 node.name?

我想点击某个spritenode,改变那个spritenode的值。这就是问题所在。当我这样做并设置一个if语句时,它知道转到该if语句。但是,我不希望它在下次单击按钮之前运行。示例:apple.name="apple"overridefunctouchesBegan(_touches:Set,withevent:UIEvent?){fortouchintouches{letlocation=touch.location(in:self)letnode:SKNode=self.atPoint(location)ifnode.name=="apple"{appple.name="oran

ios - SpriteKit : find all descendants of SKNode of certain class?

Thisquestion显示了如何找到属于某个类的SKNode的所有子节点,但是如果我们想要属于某个类的所有后代(例如,孙子)怎么办?在SpriteKit中是否有一种本地方法可以做到这一点,或者是根据上述问题创建解决方案的递归形式的唯一选择?SKNode文档突出显示了一个搜索功能,可以让您找到具有特定名称的后代,但是有没有办法按类而不是名称过滤后代?如果可以避免,我们不想为节点分配名称。我们正在使用Swift3。 最佳答案 只需将此扩展添加到您的项目importSpriteKitextensionSKNode{funcallDesc

swift - 尝试调整 sknode 的大小会产生错误 "Cannot assign to the result of this expression"?

我创建了一个名为level的SKNode子类,我试图更改它的大小,但是我收到错误“无法分配给该表达式的结果”。我做错了什么?classLevel:SKNode{overrideinit(){super.init()self.frame.size=CGSizeMake(width:100,height:100)//Cannotassigntotheresultofthisexpression 最佳答案 frame属性是只读的,如您在SKNode.h中所见@property(SK_NONATOMIC_IOSONLY,readonly)C

swift - 检测 SKNode 和粒子之间的碰撞?

我有这个函数可以创建一些熔岩:funcsetupLava(){letemitter=SKEmitterNode(fileNamed:"Lava.sks")!emitter.particlePositionRange=CGVector(dx:200,dy:0.0)emitter.advanceSimulationTime(3.0)emitter.zPosition=4emitter.position=CGPoint(x:self.frame.width/2,y:300)lava.addChild(emitter)}我想检测玩家何时与其发生碰撞。我该怎么做? 最

ios - 以随机时间间隔定期将节点添加到场景中

简单来说,我正在尝试弄清楚如何在一段时间内向我的场景添加10个节点,每个节点由一些随机时间间隔分隔。例如:Loop10times:A.CreateandaddnodetosceneB.Waitsomerandomamountoftime,1-5secondsC.BacktoA最好也知道它何时完成运行,当最后一个节点添加到场景时有一个bool值只是翻转,但这需要知道最后一个节点何时完成添加。我不太确定如何完成此操作。我阅读了一些关于dispatch_after的内容,但这并不能解决我在添加节点之间的随机时间问题。 最佳答案 在Spri

ios - 我如何获取并删除 SKNode 的父节点?

SKSpriteNode有一个父节点,它是随机分配的,并且不知道它是谁。那个SKSpriteNode如何找到它的父节点,然后从场景中移除父节点,从而移除它自己和父节点? 最佳答案 如果您仔细阅读文档,您会发现一个名为removeFromParent的方法在SKNode类中。只需调用它:yourSpriteNode.removeFromParent()或者,如果您想在一系列SKAction之后从其父节点中删除节点,您可以使用SKAction.removeFromParent().letremoveFromParentAction=SK

swift - 'SKNode !' is not a subtype of ' SKNode'

我不明白为什么我在最后一行收到这个错误:'SKNode!'不是'SKNode'的子类型funcmove_background(){letenumerationBlock:(SKNode,CMutablePointer)->Void={bg,stopinvarbg_velocity=CGPointMake(0,CGFloat(-self.bg_velocity))vardistance_to_move=self.point_multiply_scalar(bg_velocity,b:self.dt!)bg.position=self.point_add(bg.position,b:dis

ios - 从 SKNode 中删除特定的 SKAction 列表

在开发不同节点之间的一些交互过程中,我意识到我需要从节点中删除特定的操作列表。当前版本的Sprite-Kit框架提供了一些实例方法:removeAllActions()action(forKeykey:String)hasActions()显然,在我的节点中运行的每个操作都有一个String键用于标识。所以我想到了一个和removeAllAction很相似的东西,然后我做了一个SKNode扩展:publicextensionSKNode{funcremoveAllAction(inlist:[String]){list.forEach{ifself.action(forKey:$0)!

ios - 为什么创建大量 SKNode 需要这么长时间

我正在使用SpriteKit在Swift中为我的iOS应用程序创建一个随机项目微调器,但目前我的方法不是很有效,而且我几乎可以肯定它不是实现我的目标的最佳方式。我目前遵循的过程本质上是。-在场景加载时,循环遍历13个不同项目的列表(存储在JSON中)-创建一组显示相关数据的节点-将每组节点添加到第二组节点,沿x轴稍微移动每个节点,创建一长行SKNode(旋转器的项目)-沿x轴移动该组,给人一种它在项目中旋转的印象但这种方法甚至需要大约6秒来加载场景(延迟是将节点添加到更大的节点:group.addChild(spinnerItem)因为我只是Swift的新手我确信我有更好的方法来做这件

swift - 为什么同一 SKNode 层中的对象不相互交互?

我使用SpriteKit还不到1年,所以直到最近我才使用SKNode作为图层。我有一个SKNode层,它包含所有的鱼和用户的位置,例如:varlayerMainGame=SKNode()layerMainGame.zPosition=50layerMainGame.addChild(userPosition)layerMainGame.addChild(pipFish)addChild(layerMainGame)用户是否触摸鱼的交互是用这个函数处理的,它基本上是检查它们的框架是否交叉:ifCGRectIntersectsRect(CGRectInset(node.frame,delt