如何在不重置游戏的情况下在场景之间转换,因为didMoveToView()被调用并重新初始化了我的所有实例变量。例如我有一个游戏场景和一个商店场景。当我从我的商店场景过渡到我的游戏时,游戏会重置。有什么方法可以防止这种情况发生,或者如何在场景之间转换时保持游戏的相同状态? 最佳答案 您有很多选项可以在游戏场景中保持持久状态。我列出了我使用过的两种方法。选项A:保持对场景的引用当场景换成新场景时,场景通常会从内存中完全删除。如果您在其他地方持有场景对象的引用,并提供该引用,则不会丢失任何数据。为了随着时间的推移保持引用(并在需要时再次
我正在使用Swift和SpriteKit构建我的第一款游戏,但我在CPU使用和电池生命周期方面遇到了很多问题。我想知道在后台线程中运行某些任务(例如实例化坏人)是否是常见的做法;如果是这样,我将如何实现呢? 最佳答案 如果这是您的第一款游戏,除非您真的知道自己在做什么,否则您可能不想为多线程而疯狂。请注意,操作SKNode必须在运行SKView(Private)_update:的同一线程上完成。这是运行runActionblock的同一个线程。如果你不这样做,你就会崩溃。在我正在开发的SpriteKit游戏中,我是多线程的,没有
如果我创建一个SKSpriteNode,并在该节点上运行一个SKAction,Action会在模拟器上运行,但节点的属性没有改变。例如。在以下示例中,在模拟器中,节点从(50,50)开始并在1秒内移动到(0,0)。但是,末尾的print语句打印的是(50,50)而不是新位置(0,0)lettest=SKSpriteNode()test.position=CGPoint(x:50.0,y:50.0)test.size=CGSize(width:20.0,height:20.0)test.color=UIColor.blackaddChild(test)test.run(SKAction.
我所说的“吃”是指:当SpriteA(马里奥)与SpriteB(一枚硬币)发生碰撞时,会检测到碰撞并将硬币从场景中移除;然而,马里奥的运动并没有因为与硬币的碰撞而改变。目前我正在使用SKPhysicsContactDelegate来记录马里奥和硬币碰撞的时间,但这似乎需要将硬币确认为一个物理实体-因此这意味着马里奥的运动会被它停止.硬币不应该有物理体,而是我应该用不同的方法看它们是否接触? 最佳答案 根据Apple...varcategoryBitMask:UInt32Amaskthatdefineswhichcategoriest
我正在开发一款iOS游戏,但遇到了问题。我需要显示x个Sprite(对于每个Sprite,我都有一个比例SKAction)。我需要能够等到所有SKActionSprite出现,然后再做其他事情。每个SKAction在一个单独的线程中运行。我怎么能等?这是一段代码:fortileintiles{letrandomNum:UInt32=arc4random_uniform(20)//rangeis0to99letrandomTime:TimeInterval=TimeInterval(randomNum/10)letscale=SKAction.scale(by:1,duration:2,
我的SKScene使用以下代码以特定时间间隔将Sprite添加到屏幕,但是如果在添加下一个Sprite时屏幕上已经有一个Sprite,我的应用程序会卡住。有没有办法在应用程序不卡住的情况下将相同的Sprite添加到屏幕?lettimer=SKAction.waitForDuration(1.00)letaddSpriteNode=SKAction.runBlock{self.addSprite()}letsequence=SKAction.sequence([timer,addSpriteNode])self.runAction(SKAction.repeatActionForever
我有一个sprite,如果按下该sprite,我想打印一些文本。我在上面找到的每个教程似乎都已过时。这怎么可能?应该是这样的:ifSpriteistouched{print("SomeText")} 最佳答案 如果您有自定义的Sprite类,只需重写touchesBegan方法例子classPlayer:SKSpriteNode{requiredinit?(coderaDecoder:NSCoder){super.init(coder:aDecoder)userInteractionEnabled=true}overridefunc
我正在为我正在构建的sprite工具包应用程序创建主菜单。在我的整个项目中,我一直使用SKScenes来保存我的关卡和实际游戏玩法。但是,现在我需要一个主菜单,其中包含“播放”、“级别”、“商店”等按钮...但是,我现在添加按钮的方式让我感觉不太舒服,就像这样:letcurrentButton=SKSpriteNode(imageNamed:button)//CreatetheSKSpriteNodethatholdsthebuttonself.addChild(currentButton)//AddthatSKSpriteNodetotheSKScene然后我像这样检查按钮的触摸:o
我有一个名为bombtower的局部变量。代码如下:ifcheckMark.contains(touchLocation){letbombTowerLevel1=SKSpriteNode(imageNamed:"bombtowertrial2")bombTowerLevel1.name="bombtower"//changelatermaybebombTowerLevel1.position=bombTowerGhost.positionbombTowerLevel1.zPosition=1//changelaterforhealthbombTowerLevel1.setScale(f
我不知道这两个函数有什么区别。首先:coin.run(SKAction.moveTo(y:-146.115,duration:0))第二个:coin.position.y=-146.115 最佳答案 SKAction直到下一帧才会被处理——紧接在update之后。如果您在didEvaluateActions之后调用.run,您的位置将不会更新,并且您可能会因此遇到错误。第二行代码将立即执行,无论您在SK循环中的位置如何。例如,如果您正在使用物理学,并在didBegin(contact)中调用.run(.move(,然后期望该Spri