jjzjj

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

ios - 遍历 SKNode 的所有子节点?

我有一个带有许多子SKSpriteNode的SKNode。一个简化的例子:varparentNode=SKNode()varchildNode1=SKSpriteNode()varchildNode2=SKSpriteNode()self.addChild(parentNode)parentNode.addChild(childNode1)parentNode.addChild(childNode2)我想对所有这些child运行一个colorizeWithColorAction。当我在parentNode上运行操作时,没有任何效果。我不能在父级上使用enumerateChildNode

ios - 当我在层次结构中添加额外的 SKNode 子级时,SKCropNode 失败

更新:iOS10似乎已经解决了这个问题。我升级到Swift3和Xcode8,一切都按预期工作。我现在已经遇到过几次这个问题,我不知道这是SKCropNode中的错误还是我只是误用了它。也许我缺少一些文档来解释为什么会这样?我有一个100x100矩形形状的裁剪节点作为mask。如果我在其中放置一个蓝色圆圈,它就会被正确裁剪。//Createacropenodewithasmallsquare.letcropNode=SKCropNode()letcropNodeMask=SKShapeNode(rect:CGRect(x:0,y:0,width:100,height:100))cropN

xcode - 在 spritekit 场景编辑器中使用自定义 SKNodes

我想使用我自定义的SKNode子类创建一个关卡。我尝试将SKNode添加到场景编辑器,并使用“自定义类”选项卡提供我想要的类,但这绝对没有任何作用。该节点仍然是空的,当我运行模拟器时什么也不会显示。此外,为了确保该类确实有效,我以编程方式将它的一个实例添加到场景中,以查看它是否显示并且确实显示了。如何通过场景编辑器将我的自定义节点添加到场景中?这是我的自定义类代码:classPlayer:SKSpriteNode{requiredinit?(coderaDecoder:NSCoder){super.init(coder:aDecoder)print("Test")self.addChi

swift - 使用 SKNode 绕点恒速运行

我的目标是让secondBody以恒定速度(在本例中为500)“绕”firstBody。基于ConstantmovementinSpriteKit我已经实现了以下内容:overridefuncdidMoveToView(view:SKView){physicsWorld.gravity=CGVector(dx:0,dy:0)letfirstNode=SKShapeNode(circleOfRadius:10)addChild(firstNode)firstNode.position=CGPointMake(CGRectGetWidth(frame)/2.0,CGRectGetHeigh

swift - SKNode 子类生成错误 : cannot invoke initializer for type "X" with no arguments

SKNodes可以用一个空的初始化器来初始化,例如,letnode=SKNode()。但是,子类化SKNode会破坏此功能。在子类化SKNode之后,Xcode在尝试在子类上使用空初始化程序时生成此错误:Cannotinvokeinitializerfortype"X"withnoarguments假设SKNodeSubclass是SKNode的子类,行letnode=SKNodeSubclass()会生成此错误。IsitpossibletosubclassfromSKNodeandalsouseanemptyinitializerlikewithSKNode?classStatusS