Pracuję nad grą sprite-kit, w której węzły spawnują się poniżej najniższego punktu na ekranie, a grawitacja jest ustawiona tak, aby unosiły się na górze ekranu. Wszystko działa idealnie, ale szybko zaczyna spowalniać FPS, a w końcu opóźnienia i zakłócenia stają się bardzo powolne. Myślałem, że sposobem rozwiązania tego byłoby usunąć węzły z rodziców po ich dalszy obok punktu, to był kod użyłem w aktualizacji:Jak prawidłowo usunąć węzeł po przekroczeniu granicy ekranu?
-(void)update:(CFTimeInterval)currentTime {
if (_bubble1.position.y > CGRectGetMaxX(self.frame)+40) {
[self removeFromParent];
}
}
A w przypadku jest to potrzebne, jak ja zrodził powiedział bańka wybraną metodę initWithSize
:
-(void)didMoveToView:(SKView *)view {
[self performSelector:@selector(spawnBubbles) withObject:nil afterDelay:1.0];
[self performSelector:@selector(spawnBubbles1) withObject:nil afterDelay:1.5];
}
-(void)spawnBubbles {
randomPosition = arc4random() %260*DoubleIfIpad;
randomPosition = randomPosition + 20*DoubleIfIpad;
randomNumber = arc4random() %7;
randomNumber = randomNumber + 1;
myColorArray = [[NSArray alloc] initWithObjects:colorCombo1, colorCombo2, colorCombo3, colorCombo4, colorCombo5, colorCombo6, colorCombo7, colorCombo8, nil];
myRandomColor = [myColorArray objectAtIndex:randomNumber];
_bubble1 = [SKShapeNode node];
[_bubble1 setPath:CGPathCreateWithEllipseInRect(CGRectMake(-25*DoubleIfIpad, -25*DoubleIfIpad, 50*DoubleIfIpad, 50*DoubleIfIpad), nil)];
_bubble1.strokeColor = _bubble1.fillColor = myRandomColor;
_bubble1.position = CGPointMake(randomPosition, CGRectGetMinY(self.frame)-60);
_bubble1.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:20];
_bubble1.physicsBody.categoryBitMask = CollisionBubble;
[self addChild:_bubble1];
[self runAction:[SKAction sequence:@[
[SKAction waitForDuration:1.0],
[SKAction performSelector:@selector(spawnBubbles) onTarget:self],
]]];
}
Jak mogę to zrobić tak, że węzły są odpowiednio utylizowane, gdy opuszczają ekran? I jak mogę utrzymać FPS na stałym poziomie 60 FPS?
Z góry dziękuję !!
„FPS” jest luźno powiązana z liczbą węzłów. inne czynniki przyczynią się do tego bardziej. –
Naprawdę ?! jak to, co @BradAllred – user3576196
Masz tylko jedną bańkę ivar, musisz użyć tablicy, aby uzyskać dostęp do wszystkich później. Za pomocą kodu aktualizacji można usunąć tylko dymek, który został utworzony jako ostatni. Łatwiej jest uruchomić akcję, która często sprawdza pozycję i wywołuje metodę removeFromParent, gdy jest to konieczne. – LearnCocos2D