Hallo Hörnchen

In diesem zweiten Teil meiner kleinen Reihe, in der ich versuche, mir selber Cocos2d (Python) beizubringen, möchte ich das minimale Grundgerüst aus dem ersten Teil weiter aufbohren. Im Endeffekt soll so etwas herauskommen, wie mein PyGame-Tutorial aus dem letzten Jahr (Teil 1, Teil 2, Teil 3 und Teil 4), das ich ja auch schon erfolgreich nach Processing.py portiert hatte (Teil 1, Teil 2, Teil 3 und Teil 4). Nun also der Versuch mit Cocos2d:

Hörnchen

Um dieses Bild zu erzeugen, habe ich den Quelltext des Grundgerüstes nur ein wenig aufgebohrt:

import cocos
from cocos.director import director 
from cocos.scene import Scene
from cocos.layer import ColorLayer
from cocos.sprite import Sprite

class Game(ColorLayer):

    def __init__(self):
        super(Game, self).__init__(0, 80, 125, 255)
        self.player = Sprite("assets/horngirl.png")
        self.player.position = 160, 120
        self.add(self.player)

def main():
    director.init(caption = "Hello Hörnchen!", width = 320, height = 240)
    scene = Scene(Game())
    director.run(scene)

if __name__ == "__main__":
    main()

Die Klasse Game erbt von ColorLayer, der in der __init__()-Funktion eine Hintergrundfarbe im Format RGBA mitgegeben wird. Dann wird das Bild der jungen Dame geladen und positioniert. In der main()-Funktion wird die Scene geladen und angezeigt. Das ist alles, aber es geht noch mehr.

In einer zweiten Version habe ich ein Modul resources.py angelegt

import pyglet

pyglet.resource.path = ["assets"]
pyglet.resource.reindex()

horngirl = pyglet.resource.image("horngirl.png")

und dort das Hörnchen versteckt. Damit kann man es sich im Hauptprogramm – besonders wenn man viele resourcen hat – noch einfacher machen:

import cocos
from cocos.director import director 
from cocos.scene import Scene
from cocos.layer import ColorLayer
from cocos.sprite import Sprite
import resources

class Game(ColorLayer):

    def __init__(self):
        super(Game, self).__init__(0, 80, 125, 255)
        self.player = Sprite(resources.horngirl)
        self.player.position = 160, 120
        self.add(self.player)

def main():
    director.init(caption = "Hello Hörnchen!", width = 320, height = 240)
    scene = Scene(Game())
    director.run(scene)

if __name__ == "__main__":
    main()

Cocos2d setzt ja bekanntlich auf PyGlet auf und warum soll man dann nicht PyGlet die Ressourcenverwaltung überlassen? Bei nur einer Ressource ist es eher Mehraufwand, aber bei vielen Ressourcen kann sich das durchaus auszahlen. Still digging!