всичко. Сега разработвам игра за 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;
}