通常在精灵套件游戏中,当呈现新场景时,旧场景中的所有节点及其内容自动被移除.那么,如果不删除像"HUD"这样的节点呢?精灵套件中是否有任何方法只创建一个节点并在所有场景中使用它而不必每次在每个新场景中一次又一次地删除和创建它?必须有一种技术使其成为可能.这是一个严重的精灵套件设计问题,如果不可能的话.但我不这么认为.单例技术适用于音频播放器,它只创建一次并用于所有场景.有一种方法只能创建一个节点并在所有场景中使用它.谢谢你的想法.
我正在开发一个带有精灵套件的简单飞行游戏。一旦太空船达到最大高度和速度,它就会以恒定的速度飞行。我注意到飞船在不断的飞行过程中会随机结结巴巴。我在这里阅读了有关此问题的所有帖子,但没有任何内容真正有助于 100% 修复它。
为了测试,我编写了一个非常简单的游戏,其中只包含一艘太空船和一个简单的云(代码如下)。但是即使在这个非常简单的游戏中,飞船仍然会卡顿。LOG 显示,即使太空船以恒定速度飞行,太空船的运动也不是随机恒定的。这就是口吃的原因。
希望有人能帮我解决这个问题。感谢您的任何想法。
Sprite 套件、Objective c、Xcode 8.0、测试设备:iPhone 6 - iOS 8.3、iPhone 4s - iOS 9.3.5
CPU:最大 21%,内存:最大 8 MB,FPS:永久 60 FPS
这是我的代码(为简单起见,我将所有代码放在场景类中)
FlightScene.h
#import <SpriteKit/SpriteKit.h>
@interface FlightScene : SKScene <SKPhysicsContactDelegate>
@end
Run Code Online (Sandbox Code Playgroud)
FlightScene.m
#import "FlightScene.h"
#define HERO_FLIGHT_LOG 1
//#define HERO_DEBUG_OVERLAY 1
static const CGFloat kMaxHeroVelocityY = 100.0f;
static const CGFloat kMaxHeroVelocityX = 200.0f;
@implementation FlightScene
{
SKNode *_world;
SKSpriteNode *_hero;
SKSpriteNode *_cloud;
CGPoint _heroStartPosition;
CGSize _cloudSize;
CGFloat _xAdj;
BOOL _hasBegun;
// debug
CGFloat _oldHeroX;
CGFloat _oldHeroY;
int _frame; …Run Code Online (Sandbox Code Playgroud)