2017-06-25 6 views
0

Je suis nouveau en Python et je suis auto-apprentissage, par conséquent, beaucoup d'aide est nécessaire. J'essaie d'utiliser le package graphics.py écrit par John Zelle pour afficher, dessiner et déplacer plusieurs objets image à la fois. J'ai un objet Enemy de classe qui prend en compte la vitesse, la position startX une position startY. J'ai aussi une méthode de mouvement dans cette classe qui prendra la position startX et l'ajoutera à la vitesse.Dessiner et déplacer plusieurs objets image à la fois en python

class Enemy(object): 

    def __init__(self, speed, startXpos, startYpos): 
     self.speed = speed 
     self.x = startXpos 
     self.y = startYpos 

    def move(self): 
     self.x += self.speed 

Dans la méthode principale, j'ai utilisé graphics.py pour dessiner l'objet Image de Enemy. Tous les ennemis ont la même image et commencent à la même position de départ, mais la vitesse de déplacement des ennemis est différente.

win = GraphWin("Enemy", 1000, 500) 
    myEnemies = [] 

    e = Image(Point(50, 200), "enemy.gif") # use speed as y position, too 
    e.draw(win) # add it to the window 
    e2 = Image(Point(50, 200), "enemy.gif") # use speed as y position, too 
    e2.draw(win) # add it to the window 
    e3 = Image(Point(50, 200), "enemy.gif") # use speed as y position, too 
    e3.draw(win) # add it to the window 

    enemy1 = Enemy(40, 50, 0) 
    enemy2= Enemy(50, 50, 0) 
    enemy3 = Enemy(60,50, 0) 
    myEnemies.append((enemy1,e)) 
    myEnemies.append((enemy2,e2)) 
    myEnemies.append((enemy3,e3)) 

    for i in range(40): # main animation loop 
     for enemy in myEnemies: # loop through the enemy list 
      enemy[0].move() 
      time.sleep(1) # wait a second... 
    win.close() 

Les objets image ne bougent pas. Qu'est-ce que je fais mal ici?

+0

'Enemy' est une sous-classe si' object', que voulez-vous que Enemy fasse en appelant simplement la fonction move d'un objet qui ne change qu'un attribut. Par conséquent, "Ennemi" ne devrait-il pas être une sous-classe de quelque chose d'autre? – abccd

+0

mettez votre time.sleep à l'intérieur pour la boucle ennemie –

+0

Vous devriez obtenir 'AttributeError' puisque vous appelez la fonction' .move() 'sur l'objet' tuple'. –

Répondre

0

Vous faites votre problème plus difficile de ne pas embrasser la nature de l'objet de vos ennemis:

from graphics import * 

class Enemy(object): 

    def __init__(self, speed, startXpos, startYpos): 
     self.speed = speed 
     self.x = startXpos 
     self.y = startYpos 

     self.graphic = Image(Point(startXpos, startYpos), "enemy.gif") 
     self.graphic.draw(win) 

    def move(self): 
     self.x += self.speed 
     self.graphic.move(self.speed, 0) 


win = GraphWin("Enemy", 1000, 500) 

myEnemies = [Enemy(40, 50, 100), Enemy(50, 50, 200), Enemy(60, 50, 300)] 

for i in range(40): # main animation loop 
    for enemy in myEnemies: # loop through the enemy list 
     enemy.move() 
     time.sleep(1) # wait a second... 

win.close() 

Ne pas manipuler les images séparées des objets, faire l'image juste un aspect de l'objet.