2016-12-18 3 views
1

Ich mache ein Spiel wo du um die Galaxie fliegst und es sollte diese anderen Schiffe irgendwo fliegen aber wie kann ich das eigentlich machen? Lassen Sie uns sagen, wie X eine Menge Zeit.Wie kann ich diese Klasse tatsächlich erstellen/ausführen? Python

Alles also, wann gibt es eine Möglichkeit, alle Schiffe herunterzufahren?

class spaceship(): ###thigs that fly arround when GUI == 4 

    def __init__(self,GUIstatus): 

     self.shipUp = pygame.image.load("icons/shipUP.png") 
     self.shipRight = pygame.image.load("icons/shipRIGHT.png") 
     self.shipLeft = pygame.image.load("icons/shipLEFT.png") 
     self.shipDown = pygame.image.load("icons/shipDOWN.png") 
     self.shipImage = self.shipLeft 
     self.shipnpc_x = 0 
     self.shipnpc_y = 0 
     self.GUIstatus = GUIstatus 

     self.shipType = (random.randrange(0,10)) 
     self.randomspeed = (random.randrange(0,5)) 
     self.speed = 10 += self.randomspeed 

     self.exists = 0 

     ##Logic place for selecting and randomizing ship and things 

    def Update(self): 
      if self.exists == 1: 
       return 
      if self.exists == 0 and self.GUIstatus == 4: 
       if dirrection == LEFT: 
        self.shipnpc_x +=selfspeed 
        self.shipImage = self.shipLeft 

       if dirrection == RIGHT: 
        self.shipnpc_x -=selfspeed 
        self.shipImage = self.shipRight 

       if dirrection == UP: 
        self.shipnpc_y -=self.speed 
        self.shipImage = self.shipUp 

       if dirrection == DOWN: 
        self.npcship_y +=self.speed 
        self.shipImage = self.shipDown 


    def Draw(self,screen): 
      if self.exists == 1: 
       return 
      screen.blit(self.shipImage,(self.shipnpc_x,self.shipnpc_y)) 
+0

Ihre Frage ist ein wenig unklar. Sie können neue Instanzen mit 'ship1 = spaceship()' erstellen und dann die update/draw-Methode mit 'ship1.Draw()' oder 'ship1.Update()' aufrufen. Aber ich vermute, das ist nicht was du meinst? Außerdem ist es üblich, Klassennamen 'Raumschiff' _ (CamelCase) _ und Methoden/Variablen' update' _ (lower_case) _ zu nennen. Diese Konvention erleichtert es anderen Programmierern, die jeweils anderen Programme zu verstehen. –

+0

brauchen Sie 'Hauptschleife', in der Sie alle Schiffe in jeder Schleife bewegen. Jedes Schiff sollte eine eigene Methode 'update()' haben, die seine Position ändert. – furas

+0

[einfaches Beispiel] (https://github.com/furas/python-examples/tree/master/pygame/follow-player) wo du Spieler und zwei mosters hast - wenn du einen Spieler bewegst, bewegen sich auch motens. – furas

Antwort

1

Mach dir keine Sorgen, das ist eigentlich ein ziemlich häufiges Problem, dass Anfänger konfrontiert.

Was möchten Sie tun, ist Ihre Objekte in einer Art Liste setzen (in Python, Sie in der Regel [] verwenden), und anstelle von Methoden, die auf ein einzelnes Objekt aufrufen, wie

ship1.Update() 

Sie verwenden Schleife über diese Liste zu durchlaufen, wie

for ship in ships: 
    ship.Update() 

Aber da Sie pygame verwenden, ist es noch einfacher, da es eine Klasse, die für Sie einige der schweren Heben tun wird.

Sie sollten mit der Sprite und Group Klasse beginnen, also lassen Sie uns Ihre spaceship Klasse ändern. Beachten Sie die Kommentare

class Spaceship(pygame.sprite.Sprite): ###thigs that fly arround when GUI == 4 

    def __init__(self, ships, GUIstatus): 

     # ships is a Group for all ships 
     pygame.sprite.Sprite.__init__(self, ships) 
     self.shipUp = ... 

     # the image has to be in self.image 
     self.image = self.shipLeft 

     # no need for shipnpc_x and shipnpc_y, since we store 
     # our position in self.rect 
     self.rect = self.image.get_rect() 
     self.GUIstatus = GUIstatus 

     self.shipType = ... 

    # this has to be called update instead of update 
    # to work with groups 
    def update(self): 

     # to change the position, we just alter self.rect 

     if self.exists == 0 and self.GUIstatus == 4: 
      if dirrection == LEFT: 
       self.rect.move_ip(-self.speed, 0) 
       self.shipImage = self.shipLeft 

      if dirrection == RIGHT: 
       self.rect.move_ip(self.speed, 0) 
       self.shipImage = self.shipRight 

      if dirrection == UP: 
       self.rect.move_ip(0, -self.speed) 
       self.shipImage = self.shipUp 

      if dirrection == DOWN: 
       self.rect.move_ip(0, self.speed) 
       self.shipImage = self.shipDown 

    # no need for the Draw function, since it's handled 
    # by the sprite class' draw function 

Jetzt mit diesen Veränderungen vorhanden, wir müssen einfach erstellen Group:

ships = pygame.sprite.Group() 

Also, wenn Sie ein Raumschiff erstellen, geben Sie sie in die Schiffe Gruppe setzen nur um die Weitergabe Gruppe zum Initialisierer. Wenn Sie 30 Schiffe wollen, verwenden Sie einfach eine Schleife:

for _ in xrange(30): 
    Spaceship(ships, GUIstatus) 

Wie für die Aktualisierung und Zeichnung, rufen Sie einfach

ships.update() 
ships.draw(screen) 

in der Hauptschleife und die Group Klasse kümmert update anrufen und draw auf jeder Sprite innerhalb es (im Grunde es iteriert nur über eine Liste mit einem for wie ich oben geschrieben habe).

Das ist es! Wenn Sie eine Spaceship loswerden wollen, rufen Sie einfach die kill Funktion darauf (wahrscheinlich innerhalb der Update-Methode), oder verwenden Sie etwas wie pygame.sprite.groupcollide, um es automatisch zu tun.

Am Ende möchten Sie wahrscheinlich mehrere Gruppen, z. eine Gruppe für alles, was du update und draw in deinem Hauptschloß nennst, und, wenn du es erstellst, sagen wir ein Shooter-Spiel, eine Gruppe für alle Feinde und eine für deine Kugeln, so kannst du pygame.sprite.groupcollide für Kollisionserkennung usw. verwenden ...

+0

'self.rect.move_ip (self.speed, 0)' innerhalb von sind (x, y) Recht? und was sollte xrange sein? – cmdtvt

Verwandte Themen