Sto lavorando a un gioco di sprite-kit in cui i nodi si generano sotto il punto più basso dello schermo e la gravità è impostata per farli galleggiare nella parte superiore dello schermo. Tutto funziona perfettamente, ma inizia rapidamente a rallentare l'FPS, e alla fine i ritardi e le anomalie diventano molto lentamente. Ho pensato che il modo per risolvere questo sarebbe stato per rimuovere i nodi dal genitore dopo che avevano passato un punto, questo è stato il codice che ho usato nell'aggiornamento:Come rimuovere correttamente il nodo fuori dai limiti dello schermo?
-(void)update:(CFTimeInterval)currentTime {
if (_bubble1.position.y > CGRectGetMaxX(self.frame)+40) {
[self removeFromParent];
}
}
E in caso di necessità, questo Ecco come ho generato detto bolla di seguito il metodo 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],
]]];
}
Come posso fare in modo che i nodi vengono smaltite correttamente quando lasciano lo schermo? E come posso mantenere il FPS ad un tasso costante di 60 FPS?
Grazie in anticipo !!
"FPS" è in stretta relazione al numero di nodi. altri fattori contribuiranno a questo di più. –
Realy ?! come cosa @BradAllred – user3576196
Hai solo un bubble ivar, avresti bisogno di usare un array per accedere a tutti in seguito. Con il tuo codice di aggiornamento sarai solo in grado di rimuovere la bolla creata per ultima. Più facilmente puoi fare in modo che ogni bolla esegua un'azione personalizzata che controlli frequentemente la sua posizione e chiama removeFromParent quando necessario. – LearnCocos2D