我正在使用Swift和SpriteKit构建我的第一款游戏,但我在CPU使用和电池生命周期方面遇到了很多问题。我想知道在后台线程中运行某些任务(例如实例化坏人)是否是常见的做法;如果是这样,我将如何实现呢? 最佳答案 如果这是您的第一款游戏,除非您真的知道自己在做什么,否则您可能不想为多线程而疯狂。请注意,操作SKNode必须在运行SKView(Private)_update:的同一线程上完成。这是运行runActionblock的同一个线程。如果你不这样做,你就会崩溃。在我正在开发的SpriteKit游戏中,我是多线程的,没有
说到UIKit和ViewControllers,我是个菜鸟。我正在尝试从SplashScreenViewController切换到GameViewController,这是一个SKView。GameViewController加载正常,因为我可以听到游戏音乐开始播放,但SplashScreenController从未从屏幕上消失。所以基本上我有SplashScreenController留在屏幕上,我可以听到GameViewController在后台启动。我做错了什么?这是SplashScreenViewController的代码:classSplashScreenViewContro
如果我创建一个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.
所以我正在制作游戏并淡出一个节点,但我不知道它是从场景中移除还是只是隐藏了。我想在完全相同的位置添加另一个节点,但我不想让节点相互重叠。letfadeOutAction=SKAction.fadeOut(withDuration:2.0)nodeToFadeOut.run(fadeOutAction)这很完美,但我不知道节点是否已从场景中移除。 最佳答案 这里有一些你可能会觉得有用的东西:)funcfadeAndRemove(node:SKNode){letfadeOutAction=SKAction.fadeOut(withDur
我所说的“吃”是指:当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,
我有一个名为“Floor”的单独类,如下所示。classFloor:SKNode{overrideinit(){super.init()//letedgeFrame=CGRect(origin:CGPoint(x:1,y:1),size:CGSize(width:1078,height:1950))//self.physicsBody=SKPhysicsBody(edgeLoopFrom:edgeFrame)letborderBody=SKPhysicsBody(edgeLoopFrom:self.frame)borderBody.friction=0self.physicsBody=
我的SKScene使用以下代码以特定时间间隔将Sprite添加到屏幕,但是如果在添加下一个Sprite时屏幕上已经有一个Sprite,我的应用程序会卡住。有没有办法在应用程序不卡住的情况下将相同的Sprite添加到屏幕?lettimer=SKAction.waitForDuration(1.00)letaddSpriteNode=SKAction.runBlock{self.addSprite()}letsequence=SKAction.sequence([timer,addSpriteNode])self.runAction(SKAction.repeatActionForever
我有一个游戏,与敌人的接触结束了游戏,但是当我在敌人节点上使用removeFromParent时,它只会删除最近的一个。敌人是使用switch语句生成的,以确定他们从哪一侧进入,一旦发生接触并且游戏结束,节点仍然存在会导致更多接触,从而使游戏变得困惑。如果用户没有按下任何东西,并且敌人在游戏结束屏幕期间完成了他们的轨迹,那么问题就不会发生。我可以在游戏结束后以任何方式从屏幕上杀死所有节点吗?我可以在结束屏幕中暂停输入大约3秒钟让操作完成吗?我是否需要在敌人生成时枚举它们以便在游戏结束后将它们一一杀死?我已经坚持了大约3天,希望得到一些帮助。我认为我解释得相当好,但如果我需要显示任何代码
我有一个sprite,如果按下该sprite,我想打印一些文本。我在上面找到的每个教程似乎都已过时。这怎么可能?应该是这样的:ifSpriteistouched{print("SomeText")} 最佳答案 如果您有自定义的Sprite类,只需重写touchesBegan方法例子classPlayer:SKSpriteNode{requiredinit?(coderaDecoder:NSCoder){super.init(coder:aDecoder)userInteractionEnabled=true}overridefunc