все. Сейчас я разрабатываю игру для 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;
}