草庐IT

Sprite-Kit

全部标签

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

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

ios - Swift 和 Sprite Kit - 如何测量 Sprite 移动的总距离?

在我的游戏中,玩家Sprite连续向上移动,因为我在更新函数中设置了Sprite的速度:overridefuncupdate(_currentTime:TimeInterval){...player.physicsBody!.velocity.dy=max(player.physicsBody!.velocity.dy,650*gameGain)}现在我想测量Sprite走过的总距离。有什么方法/方法可以这样做,还是我必须创建一个变量来手动计算距离,例如vardistance:Floatoverridefuncupdate(_currentTime:TimeInterval){play

swift - 如何按角度移动 SpriteNode?

我正在尝试创建一个小游戏,其中SpriteNode(又名玩家)以恒定速度垂直向上移动。我想用它的角度向左或向右转向。但是,我无法使用其角度正确移动播放器。感谢您的宝贵时间。这是我写的部分代码:overridefunctouchesBegan(_touches:Set,withevent:UIEvent?){iflettouch=touches.first{letlocation=touch.previousLocation(in:self)iflocation.x=self.size.width/2&&location.yself.size.height/2{//GoUpprint("

swift - Assets 单例和引用循环

我目前有一个Assets单例类,可以让我访问纹理、声音和音乐。当我和我的伙伴正在经历我们项目的内存管理阶段时,我们意识到我们可能会产生严重的泄漏,并且根据我对Xcode工具的使用,我们最大的问题可能集中在这个单例类上。虽然肯定存在其他泄漏,但我们注意到在map屏幕和游戏屏幕之间来回移动时,有大约100mb的相当稳定的增加,这似乎对应于我们的11个mapAssets。在这种情况下,我的问题是:下面的代码是否会创建一个保留循环,如果是,是否可以通过单例类的存在来管理它,或者我们是否应该将其分解为s.t.纹理图集是分开保存的?functransitionToMapScreen(){//Iho

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

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

ios - 未调用 UIScrollViewDelegate 函数

当我拖动它时,我的View似乎在滚动(边栏出现并四处移动),但我的委托(delegate)函数没有触发。问题:为什么协议(protocol)函数中的println永远不会被调用?作为背景,我正在尝试重写https://github.com/bobmoff/ScrollKit在Swift中,这就是UIView与SKView等混合的原因。我的日志输出是:852.0480.0FinishedviewDidLoad代码是:importUIKitimportSpriteKitvarkViewTransformChanged="viewtransformchanged"varscene=GameS

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的交集。但在这种情况下,

Swift - SpriteKit CGPoint 对齐

我正在swift进行一个项目,我能够制作一个Sprite。我正在尝试在许多不同的位置制作一个Sprite。作为测试,我将游戏场景中的代码替换为:classGameScene:SKScene{overridefuncdidMoveToView(view:SKView){letwall=SKSpriteNode(imageNamed:"Wall")wall.position=CGPoint(x:289,y:0)}}我不明白的是这段代码在左下角制作了一个Sprite。正如预期的那样,在y方向上只有一半的Sprite显示,但x方向似乎完全关闭。如果我尝试将x值设置为289以下的任何数字,它将不

ios - 大 SKSpriteNode 导致帧率下降

我正在使用相当大的SpriteNodes在iOSSwift中移动我的背景(其中包括)。letrunningBar=SKSpriteNode(imageNamed:"Bar")self.addChild(self.scoreText)它是这样移动的:overridefuncupdate(currentTime:NSTimeInterval){//GolfupdateRunningBarPosition()}funcupdateRunningBarPosition(){runningBar.position.y=CGFloat(Double(runningBar.position.y)+c

ios - 在一段时间内手动移动节点

我目前声明了以下函数,这些函数将节点移动到场景更新函数中调用的目标位置(在这种情况下,我不能使用SKAction.moveTo)funcmoveTowardsPosition(targetPosition:CGPoint,withTimeIntervaltimeInterval:NSTimeInterval){letcurrentPosition=self.positionvardeltaX=targetPosition.x-currentPosition.xvardeltaY=targetPosition.y-currentPosition.yvarmaximumDistance=3