Wie man richtig entfernen Sie den Knoten aus, wenn der Bildschirm Grenzen?

Arbeite ich an einem sprite-kit-Spiel, wo Knoten spawn unterhalb des niedrigsten Punktes auf dem Bildschirm und die Schwerkraft eingestellt ist, dass Sie schweben, um den oberen Rand des Bildschirms. Alles funktioniert perfekt, aber er beginnt schnell zu verlangsamen die FPS, und schließlich Verzögerungen und Pannen immer sehr langsam. Ich dachte, die Möglichkeit, dies zu lösen gewesen wäre, das entfernen der Knoten aus dem übergeordneten nach Sie hatte aus der Vergangenheit eine Punkt, das war der code, den ich verwendet, die im update:

-(void)update:(CFTimeInterval)currentTime {

    if (_bubble1.position.y > CGRectGetMaxX(self.frame)+40) {
        [self removeFromParent];
    }

}

Werden, und im Fall es nötig ist, das ist, wie ich gespawnt, sagte Blase unterhalb der initWithSize Methode:

-(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],
                                         ]]];

}

Wie kann ich es so machen, dass die Knoten ordnungsgemäß entsorgt werden, wenn Sie den Bildschirm zu verlassen? Und wie kann ich die FPS bei einer Konstanten rate von 60 FPS?

Vielen Dank im Voraus!!

  • "FPS" ist nur lose im Zusammenhang zur Anzahl der Knoten. andere Faktoren werden dazu beitragen mehr.
  • Wirklich?! wie das, was @BradAllred
  • Sie haben nur eine Blase ivar, würden Sie brauchen, um ein array zu verwenden, um den Zugriff auf alle von Ihnen später. Mit Ihren update-code, den Sie nur in der Lage sein, zu entfernen, die Blase, die erstellt wurde, Letzte. Leichter können Sie jedes Blase führen Sie eine benutzerdefinierte Aktion, die Häufig überprüft seine position und fordert removeFromParent, wenn nötig.
InformationsquelleAutor user3576196 | 2014-06-11
Schreibe einen Kommentar