全て。私は現在、スプライト キットを使用して iOS ゲームを開発しています。ゲームの仕組みには、スプライトを上から下に無限にスクロールするものが含まれます。
私のゲーム シーンには、上、中、下の 3 つのスプライトしかありません。私は何十ものスプライト画像を持っているので、私の解決策は動的に3つのスプライトを作成することです(スプライトが画面全体を埋めることができるように)。新しいスプライト ノードを作成し、下、中、上のスプライトを交換します。
疑似コード: インターフェイス ファイル内:
- GameScene:SKScene
{
...
SKSpriteNode *_topSprite;
SKSpriteNode *_middleSprite;
SKSpriteNode *_bottomSprite;
...
}
実装ファイルで:
- (void)update:(CFTimeInterval)currentTime
{
// 1 compute time interval
// 2 update sprite node
_topSprite.position move down 100*timeInterval
_middleSprite.position move down 100*timeInterval
_bottomSprite.position move down 100*timeInterval
// 3 crop the off-screen bottom sprite node
if (_bottomSprite is offScreen)
{
[_bottomSprite removeFromParent]
}
// 4 check the highest sprite position visible
// if the highest position is below the frame top,then create new sprite
_bottomSprite = _middleSprite;
_middleSprite = _topSprite;
_topSprite = [self createNewNode]; // random a sprite image
}
ゲームの fps は 60 で、ノード数は増加していません。すべて問題ないように見えますが、ゲームで突然ショット チョークが発生し、フレームの移動が連続しなくなることがあります。私の直感では、主な原因は手順 4 にあると思いましたが、解決する方法がわかりません。任意の提案をいただければ幸いです。
createNewNode メソッドは次のとおりです。
- (SKSpriteNode *)createNewNode {
NSString *blockName = [self randomImageName];
SKSpriteNode *sprite = [[SKSpriteNode alloc] initWithImageNamed:blockName];
sprite.position = _highestPosition;
sprite.anchorPoint = CGPointMake(0.5, 0);
NSLog(@"putAnotherNodeOnTop %@", blockName);
[self addChild:sprite];
return sprite;
}