草庐IT

spritekit

全部标签

Swift SpriteKit Sprite 移动但保留原始位置

使用带有集成游戏工具包的普通游戏应用程序设置。在场景中确实加载了我添加的self.hero=SKShapeNode.init(rectOf:CGSize.init(width:10,height:10),cornerRadius:1)iflethero=self.hero{letpos=CGPoint.init(x:-50,y:-90)hero.lineWidth=5hero.position=pos}self.addChild(self.hero!)然后在我添加的update函数中iflethero=self.hero{letmoveAction=SKAction.moveTo(x:

ios - 减少 SpriteKit 游戏的电池使用量

我已经在SpriteKit中开发了一款名为UpandDowntheRiver的纸牌游戏。这是一个相当简单的纸牌游戏,带有一些动画,例如发牌和打牌的Action。根据调试器工具,它通常非常高的能源利用率并且平均接近每秒170次唤醒。(如下图)SpriteKit游戏的典型特征是什么?一个简单的纸牌游戏应该消耗这么多能量吗?如果不是,我应该寻找什么来减少能源使用?注意:这是在macOS上运行的,但是该游戏是跨平台的(即iOS和macOS)。我在iOS设备上运行得到了类似的结果。 最佳答案 当SpriteKit运行时,它会不断更新屏幕(通常

swift - Spritekit 禁用特定 View 区域的触摸

这里是新编码器,我编写了一个用于拖动/throw对象的代码,我想知道如何制作它以便只有屏幕的一部分可以用于触摸,即只能触摸屏幕的下半部分.这是我的游戏场景代码,我使用的是Swift2.0。importSpriteKitvarsprite=SKSpriteNode!()vartouchPoint:CGPoint=CGPoint()vartouching:Bool=falseclassGameScene:SKScene{overridefuncdidMoveToView(view:SKView){self.physicsBody=SKPhysicsBody(edgeLoopFromRect

Swift & SpriteKit - 使用 break 的 switch 语句

我有一个switch语句,用于确定哪个节点名称被触及。我有两个重叠的节点。如果触及顶部节点,我只想执行顶部节点案例的代码。所以我在那个案子之后休息了。即便如此,这两种情况的代码都会执行。仅触发顶级案例的最佳方法是什么?下面是代码:fornodeinnodeTouched{ifletcurrentNode=node.name{switchcurrentNode{case"thisIsTheTopNode":print("top")breakcase"thisIsTheNodeUnderneath":print("bottom")breakdefault:break}}}输出:顶部底部

ios - 以编程方式完成时,SpriteKit 中没有任何内容加载到屏幕

我不明白为什么这行不通,而且似乎场景没有改变,因为背景颜色没有变成红色。这是我的代码:GameViewController.swiftclassGameViewController:UIViewController{overridefuncviewDidLayoutSubviews(){super.viewDidLayoutSubviews()letskView=self.viewas!SKViewifskView.scene==nil{//SetoptionsskView.ignoresSiblingOrder=trueskView.showsFPS=trueskView.shows

ios - SpriteKit 动画执行不可靠

我正在使用xCode开发基于SpriteKit/Swift的iOS游戏,目前正在试验动画。我创建了一个PlayerSprite类作为SKSpriteNode的子类,并定义了一个运行以下操作的方法moveRight:run(SKAction.moveBy(x:32.0,y:0.0,duration:0.25),completion:{debugPrint("Actioncompleted.")})PlayerSprite类只有一个播放器实例,它是节点树的一部分(SKScene->SKTileMap->PlayerSprite)。关键是,提到的操作没有可靠地执行:当我“第一次”启动应用程序

swift - 如何以编程方式为 OSX 上的 SpriteKit/GameScene 应用程序设置窗口大小和位置

我有一个在Xcode中作为SpriteKit/GameScene应用程序创建的基本项目。我想以编程方式设置窗口大小。我在这里阅读了很多答案,在其他地方阅读了一些教程,但我阅读的内容都没有帮助。Thisanswer谈到重写WindowController.windowDidLoad,但GameScene没有给我WindowController。它确实给了我一个ViewController。Thistutorial说你可以从ViewController.viewDidLoad()调用self.view.window?.setFrame(),但我的窗口顽固地保持相同的大小。我在SO上找到的许

ios - 尝试在 SpriteKit 编辑器中使用 GKComponent 子类会在保存时静默崩溃 Xcode

我正在尝试使用Xcode中的场景编辑器来处理GameplayKit和SpriteKit。我是SpriteKit的新手,之前也没有使用过NSSecureEncoding。老实说,Swift还是个新手。我有一个基本的GKComponent子类,其中一个整数一个字符串属性是这样实现的。importFoundationimportGameplayKit@objcclassBasicComponent:GKComponent{@GKInspectablevarnumber:Int=0@GKInspectablevartext:String=""structCoderKeys{staticlets

swift - 如何在 SpriteKit 中改变物体的质量以随着重力下降得更慢

我正在尝试用spritekit中的树叶制作游戏。我启用了重力等并在游戏中创建了一个地面。游戏开始时,模拟重力,树叶落到地上并停止。这很好,但是叶子的当前速度太快而且看起来不现实,一旦我进一步开发我想要更大的叶子“称重”更多并更快地落下(这意味着我不只是想改变世界的重力)。我想如果我只是改变叶子的质量它会改变速度,但没有。将它更改为任何数字,例如像.0000002这样的小数字对改变速度没有任何作用。知道发生了什么事吗? 最佳答案 将此添加到didMoveToView():physicsWorld.gravity=CGVectorMak

ios - SpriteKit : detect overlap of rotated nodes?

假设节点A是节点B的子节点。更改nodeB的zRotation值可以有效地旋转nodeA,但nodeA的位置(因为它是相对于nodeB的)保持不变。现在假设节点A从节点B中移除,但它的位置在屏幕中保持固定。nodeC被添加到nodeB并旋转。如何检测节点C和节点A之间的重叠?SKNode中的containsPoint,asdescribedhere,不起作用,因为nodeC和nodeA的位置永远不会因旋转而改变。 最佳答案 您可以测试节点与-(BOOL)intersectsNode:(SKNode*)node的交集。但在这种情况下,