我试图在离开场景时删除节点,我尝试了这种方法来做到这一点if(CGRectIntersectsRect(node.frame,view.frame)){//Don'tdeleteyournode}else{//Deleteyournodeasitisnotinyourview}但它似乎不起作用任何帮助将不胜感激 最佳答案 从性能的角度来看,这不是最好的方法,但如果您在场景中重写update方法,您将能够编写每帧执行的代码。classGameScene:SKScene{vararrow:SKSpriteNode?overridefun
我的spritekit游戏有问题,它在我使用后立即重新启动一个模型segue到我的gameoverviewcontroller。每次重新启动游戏后,fps也会除以2。所以我实际上需要一种在使用segue后删除游戏的方法。我试过self.dismissViewControllerAnimated(true,completion:nil)但我真的不知道我应该放在哪里。我的Storyboard中有3个ViewController,第一个使用带有模态转场的按钮到第二个我玩游戏场景的按钮。overridefuncviewWillLayoutSubviews(){super.viewWillLay
有人可以帮我理解GameScene中sceneDidLoad和didMove(toview:)之间的区别吗?我意识到didMove(toview:)一旦场景出现,就会被调用。同时sceneDidLoad场景初始化后被调用。所以它的逻辑顺序是先是sceneDidLoad,然后是didMove(toview:)(对吧?)话虽如此,我正在尝试使用以下方法创建一个弹跳球:letborderBody=SKPhysicsBody(edgeLoopFrom:self.frame)self.physicsBody=borderBodyphysicsWorld.gravity=CGVector(dx:0
我在一个简单但快节奏的SpriteKit游戏中遇到了问题,但我已经将我的代码缩减为一个弹跳球,但问题的程度仍然较小:overridefuncdidMove(toview:SKView){super.didMove(to:view)physicsWorld.contactDelegate=selfphysicsWorld.speed=1physicsWorld.gravity=CGVector(dx:0.0,dy:0.0)letborderBody=SKPhysicsBody(edgeLoopFrom:self.frame)borderBody.friction=0self.physic
我试图让节点位于触摸位置,但遇到了.nodes()返回父节点和位于同一“位置”的其他节点的问题。我已经尝试了十几种不同的代码配置,但似乎无法找到使用SKScene.convert()或SKScene.convertPoint()的正确顺序和其他人....基本上,我有一个垂直层次的节点树。顶部是父节点,下面的每个节点都是直接在顶部的节点的子节点...(见下图)问题:当我点击最底部的节点时,在我的场景中运行.nodes()得到了多次点击……我试图只获取我指定位置的节点单击...当我单击某处时,我不希望打印相同“位置”或相同“.position”的父节点或其他节点...我只是想只获取精确位置
在我的游戏中,我需要使用鼠标来选择单位。但是,我遇到了问题,因为我不知道如何获取相对于游戏而非窗口的点击坐标。例如,如果第1单元位于游戏的(0,0)点,它可能位于窗口上的任何一点,具体取决于我平移和缩放窗口的方式,但我希望鼠标单击返回(0,0)无论我如何移动窗口只要我点击同一个点。现在我正在使用:overridefuncmouseDown(withevent:NSEvent){eventPos=event.location(in:self)...}(其余代码与鼠标点击位置无关)。这一切都在GameScene中,它是一个SKScene。那么如何获取鼠标点击相对于GameScene的位置呢
我有一个SKScene显示加入当前房间的玩家。如果这些玩家中的任何一个离开房间(通过点击离开按钮),他们的玩家列表将被更新。但如果我关闭其中一位玩家的应用程序,该特定玩家将留在房间内。我想从applicationWillTerminate调用我的leaveRoom函数,这样所有数据都可以正常工作。可能吗?我该如何解决这个问题? 最佳答案 你可以让观察者拦截它:overridefuncdidMove(toview:SKView){NotificationCenter.default.addObserver(self,selector:
对于我正在创建的游戏,我希望能够创建许多可以轻松加载的自定义关卡。每个级别都应该有一个.sks接口(interface)文件和它自己的SKScene子类.swift文件。现在,这是有效的:extensionSKScene{classfuncunarchiveFromFile(file:NSString,theClass:AnyClass!)->SKScene?{ifletpath=NSBundle.mainBundle().pathForResource(file,ofType:"sks"){varsceneData=NSData.dataWithContentsOfFile(path
是的,我知道你在想什么......但这不是重复......我有2个场景,gameScene和menuScene。我想将menuScene覆盖在gameScene上。我知道你不能一次呈现2个场景,我查看了解决方案,他们都建议将menuScene设置为SKNode而不是SKScene。问题是我需要将menuScene设为SKScene,因为我使用的是SKCameraNode(在SKNode中不可用)...有什么建议吗?提前致谢。 最佳答案 相信我,你做不到。针对这些情况,您应该采取的方法是考虑层次结构和角色(参见下图)那么,如果您现在有
我需要在Swift中为我的游戏获取像素/点的颜色。所以我试图找到一个输入CGPoint并返回Color的函数,到目前为止我发现的所有内容都只返回(0,0,0,0)。我认为这是因为我在我的游戏场景类(它是一个SKScene)中这样做,并且场景仅由ViewController加载。任何解决方案?(如果有更好的方法来检查sprite是否接触到同样有效的颜色)提前致谢。 最佳答案 添加以下方法:extensionUIView{funcgetColor(atpoint:CGPoint)->UIColor{letpixel=UnsafeMuta