SpriteKit : Random Coins (Punkte/Powerups etc) best practice?

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • SpriteKit : Random Coins (Punkte/Powerups etc) best practice?

    Hey Leute...

    ich entwickle gerade ein kleines Spiel mit Hilfe des Sprite Kit Frameworks. Wirklich eine feine Sache, was Apple da gezaubert hat.
    Ich selbst bin Designer und stolpre daher über Dinge, die für einen Programmierer sicher alltägliches Brot sind.

    In einem "Endlosscroller" erzeuge auf dem Screen Münzen / Coins (oder was auch immer) die random erscheinen.
    Immer wenn eine Münze aus dem Screen rausläuft wird die Methode aufgerufen, oder wenn man eine Münze einsammelt ([self addChild:[self spawnCoins]];).

    Das klappt soweit auch ganz gut, allerdings gefällt mir die Anordnung noch nicht so ganz und des Weiteren überlappen die Münzen ab und an.
    Mich würde nun interessieren ob ihr ein paar gute Lösungsansätze / Ideen oder Beispiel-Code habt, die dieses Problem charmant lösen können.

    Hier mein Code:

    Quellcode

    1. - (Coin *) spawnCoins{
    2. NSLog(@"add Coins");
    3. Coin *temp = [[Coin alloc] init];
    4. temp.name = @"coin";
    5. temp.physicsBody.categoryBitMask = coinCategory;
    6. temp.physicsBody.collisionBitMask = playerCategory;
    7. temp.physicsBody.contactTestBitMask = playerCategory;
    8. float randomStartPoint = arc4random_uniform(5) * 64 + 50;
    9. CGPoint startPoint = CGPointMake(self.size.width + arc4random() % 800, randomStartPoint);
    10. //temp.position = CGPointMake(self.size.width + arc4random() % 800, arc4random() % 240 + 50);
    11. temp.position = startPoint;
    12. return temp;
    13. }
    Alles anzeigen


    LG Florian
  • Wenn du deine Coins in Reihen setzt, die dann wandern, quasi wie in Doodle Jump, dann Speicher dir einfach die Positionen der im Moment aktuellen letzten Reihe und wenn du neu Punkte zufällig erstellst erstell eine Schleife und lass die so lange durchlaufen, bis die neue Münze sich nicht mit den alten Münzen überschneidet, dann die neuen münzen Positionen speichern und ....
    So kannst du auch immer einen Mindestabstand einführen der eingehalten werden muss...

    Hoffe das hilft.
  • dyna87@gmail.com schrieb:

    Hey Leute...

    ich entwickle gerade ein kleines Spiel mit Hilfe des Sprite Kit Frameworks. Wirklich eine feine Sache, was Apple da gezaubert hat.
    Ich selbst bin Designer und stolpre daher über Dinge, die für einen Programmierer sicher alltägliches Brot sind.

    In einem "Endlosscroller" erzeuge auf dem Screen Münzen / Coins (oder was auch immer) die random erscheinen.
    Immer wenn eine Münze aus dem Screen rausläuft wird die Methode aufgerufen, oder wenn man eine Münze einsammelt ([self addChild:[self spawnCoins]];).

    Das klappt soweit auch ganz gut, allerdings gefällt mir die Anordnung noch nicht so ganz und des Weiteren überlappen die Münzen ab und an.
    Mich würde nun interessieren ob ihr ein paar gute Lösungsansätze / Ideen oder Beispiel-Code habt, die dieses Problem charmant lösen können.

    Hier mein Code:

    Quellcode

    1. - (Coin *) spawnCoins{
    2. NSLog(@"add Coins");
    3. Coin *temp = [[Coin alloc] init];
    4. temp.name = @"coin";
    5. temp.physicsBody.categoryBitMask = coinCategory;
    6. temp.physicsBody.collisionBitMask = playerCategory;
    7. temp.physicsBody.contactTestBitMask = playerCategory;
    8. float randomStartPoint = arc4random_uniform(5) * 64 + 50;
    9. CGPoint startPoint = CGPointMake(self.size.width + arc4random() % 800, randomStartPoint);
    10. //temp.position = CGPointMake(self.size.width + arc4random() % 800, arc4random() % 240 + 50);
    11. temp.position = startPoint;
    12. return temp;
    13. }
    Alles anzeigen


    LG Florian


    Schau dir mal "Coin catcher" im AppStore an und sag mir, ob das random genug ist... dann könnte ich entsprechenden Code zur Verfügung stellen.
    Man kann alles schaffen. Man muss es nur wollen ;)
    www.regetskcob.github.io