leicht gemacht: Cocos2d Scenes und Layer

Heute behandeln wir den grundsätzlichen Aufbau einer Cocos2d App. Wie ihr sicher in unserem Beispiel aus dem letzten Beitrag bereit erkannt habt arbeitet die App mit Scenes und Layer. Aber was machen Scenes und Layer? Und wann braucht man was? Und was bedeutet überhaupt dieser QuellCode:

 +(CCScene *) scene {
      // 'scene' is an autorelease object.
     CCScene *scene = [CCScene node];

     HelloWorldLayer *layer = [HelloWorldLayer node];

      // add layer as a child to scene
      [scene addChild: layer];

      // return the scene
      return scene;
}

Diese Fragen werden wir in diesem Tutorial behandeln. 

Scenes

Eine Scene ist tatsächlich mit einer Szene aus Film und Fernsehen vergleichbar. Sie bildet eine Art Rahmen für bestimmte Handlung oder einen Bereiche der App. So könnte man sich vorstellen, dass es eine Szene für das Hauptmenu gibt, eine andere Szene für die Highscore Liste und wieder eine andere Scene für das eigentliche Spiel. Es kann jedoch stets nur eine Scene angezeigt werden.

Die Scene an sich ist nur ein logisches Objekt und daher unsichtbar. Die nächst kleinere Einheit ist ein Layer. Jede Scene muss mindestens einen Layer haben. Alles was wir als Programmierer nun in einem Bereich der App angezeigt haben wollen müssen wir dem Layer und somit übergeordnet auch der Scene hinzufügen.

 

 Layers

Layers sind tatsächlich eine Art Schichten und ähnlich der Layer von Photoshop. Auch sie sind wieder nur logische und damit unsichtbar Objekte. Einem Layer können nun jedoch sichtbaren Objekte hinzugefügt werden. Zusätzlich ist es möglich dass mehrere Layer übereinander liegen. Die Objekte können sich dabei teilweise überdecken und zeichnen so das Gesamtbild.

Und was bedeutet nun der Quellcode vom Anfang?

 +(CCScene *) scene {
      // 'scene' is an autorelease object.
     CCScene *scene = [CCScene node];

     HelloWorldLayer *layer = [HelloWorldLayer node];

      // add layer as a child to scene
      [scene addChild: layer];

      // return the scene
      return scene;
}

Diese Methode ist direkt aus der HelloWorldLayer Klasse. HelloWorldLayer ist ein Objekt, welches von CCLayer alle Eigenschaften erbt und ist somit selbst ein Layer. Zunächst fällt auf, dass es sich um eine öffentliche Klassenmethode handelt, was an dem + zu erkennen ist. Innerhalb des AppDelegate.m wird diese „scene“ Methode aufegrufen:

 [director runWithScene: [HelloWorldLayer scene]];

Wenn die Methode ausgeführt wird, erstellt sie als aller erstes eine neue Scene.

CCScene *scene = [CCScene node];

Anschließend wird ein Objekt vom Typ HelloWorldLayer erstellt. Also ein Objekt der Klasse die wir gerade betrachten und dessen Methode „scene“ wir gerade untersuchen. Anschließend wird der erstellte Layer der Scene hinzugefügt.

HelloWorlLayer *layer = [HelloWorlLayer node];

// add layer as a child to scene
[scene addChild: layer];

Ganz zum Schluss übergeben wir die erstellte Scene mit dem nun angefügten Layer an die aufrufende Instanz „director“ zurück.

return scene;

Bis zum nächsten mal.
Alles Gute.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.