我正在SpriteKit中制作一个简单的基于图block的游戏,我在游戏中遇到高CPU使用率的问题。我有一个由60个图block组成的map,每个图block都是SKSpriteNode的子类。仅在场景中显示这60个Sprite就占用了iPhone6s模拟器中高达80%的CPU。没有运动、用户交互或物理发生。当我在UIKit而不是SpriteKit中制作相同的游戏时,我的CPU使用率是0。什么可以使用这么多CPU?我的瓷砖类:importSpriteKitimportUIKitclassTile:SKSpriteNode{vartileType="grass",tileX=0,tile
我想弄清楚如何确定一个节点是在屏幕上还是屏幕外可见。这只是节点的真/假属性吗?谢谢。(使用swiftspritekit) 最佳答案 您可以使用以下方法测试场景中是否有节点:if(!intersectsNode(sprite)){println("nodeisnotinthescene")}这假设self是一个SKScene子类,例如GameScene。 关于swift-你如何判断一个节点是否在屏幕上spritekitswift,我们在StackOverflow上找到一个类似的问题:
我的问题很简单,根据apple文档,您可以在呈现场景之前将纹理预加载到RAM中:SKTextureAtlas*atlas=[SKTextureAtlasatlasNamed:@"effect_circle_explode"];SKTextureAtlas*atlas2=[SKTextureAtlasatlasNamed:@"box_explodes"];SKTextureAtlas*atlas3=[SKTextureAtlasatlasNamed:@"fence_new"];SKTextureAtlas*atlas4=[SKTextureAtlasatlasNamed:@"swipe"
我的问题很简单,根据apple文档,您可以在呈现场景之前将纹理预加载到RAM中:SKTextureAtlas*atlas=[SKTextureAtlasatlasNamed:@"effect_circle_explode"];SKTextureAtlas*atlas2=[SKTextureAtlasatlasNamed:@"box_explodes"];SKTextureAtlas*atlas3=[SKTextureAtlasatlasNamed:@"fence_new"];SKTextureAtlas*atlas4=[SKTextureAtlasatlasNamed:@"swipe"
addChild和zPosition对场景有什么影响?我的意思是:假设我这样做sprite1.zPosition=50;sprite2.zPosition=10;sprite3.zPosition=30;然后再做这个[selfaddChild:sprite1];[selfaddChild:sprite2];[selfaddChild:sprite3];根据SpriteKit并考虑到zPosition顺序,sprite1应该在sprite3之上呈现在sprite2之上,但spriteKit忽略了这一点并呈现3over2over1。我错过了什么吗? 最佳答案
addChild和zPosition对场景有什么影响?我的意思是:假设我这样做sprite1.zPosition=50;sprite2.zPosition=10;sprite3.zPosition=30;然后再做这个[selfaddChild:sprite1];[selfaddChild:sprite2];[selfaddChild:sprite3];根据SpriteKit并考虑到zPosition顺序,sprite1应该在sprite3之上呈现在sprite2之上,但spriteKit忽略了这一点并呈现3over2over1。我错过了什么吗? 最佳答案
我正在开发一款SpriteKit游戏,我需要进行一些多线程处理以维持健康的fps。在更新时,我调用一个函数来创建大量UIBezierPaths并使用C++静态库合并它们。如果我有超过10个形状,帧速率会急剧下降,所以我决定尝试GCD并尝试使用单独的线程来解决这个问题。我把它放在didMoveToView中:queue=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH,0);在每一帧调用的函数中,我称之为:dispatch_async(queue,^(void){[selfheavyCalculationsFunc];});对于
我正在开发一款SpriteKit游戏,我需要进行一些多线程处理以维持健康的fps。在更新时,我调用一个函数来创建大量UIBezierPaths并使用C++静态库合并它们。如果我有超过10个形状,帧速率会急剧下降,所以我决定尝试GCD并尝试使用单独的线程来解决这个问题。我把它放在didMoveToView中:queue=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH,0);在每一帧调用的函数中,我称之为:dispatch_async(queue,^(void){[selfheavyCalculationsFunc];});对于
我正在使用SpriteKit来发射炮弹。使用-(void)applyImpulse:(CGVector)impulse给射弹节点一个脉冲。我想计算抛射物在撞击地面之前飞行的距离,知道抛射物节点物理体的速度矢量和重力加速度就可以轻松完成(参见Wikipedia:RangeofaProjectile)。然而,尚不清楚此距离的单位是什么以及它们如何转换为SKScene中的距离。documentationSKPhysicsBody的速度属性未提及单位。我目前正在运行一些测试来找出单位并映射到SKScene。有没有人已经弄明白了? 最佳答案
我正在使用SpriteKit来发射炮弹。使用-(void)applyImpulse:(CGVector)impulse给射弹节点一个脉冲。我想计算抛射物在撞击地面之前飞行的距离,知道抛射物节点物理体的速度矢量和重力加速度就可以轻松完成(参见Wikipedia:RangeofaProjectile)。然而,尚不清楚此距离的单位是什么以及它们如何转换为SKScene中的距离。documentationSKPhysicsBody的速度属性未提及单位。我目前正在运行一些测试来找出单位并映射到SKScene。有没有人已经弄明白了? 最佳答案