0

我是 Python 新手并且正在自学,因此需要很多帮助。我正在尝试利用 John Zelle 编写的 graphics.py 包来一次显示、绘制和移动多个图像对象。

我有一个类 Enemy 对象,它接受速度,startX 位置和 startY 位置。我在这个类中还有一个 move 方法,它将获取 startX 位置并将其添加到速度中。

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

在 main 方法中,我使用 graphics.py 来绘制 Enemy 的 Image 对象。所有敌人都有相同的图像,并且从相同的起始位置开始,但是敌人的移动速度不同。

    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()

图像对象不移动。我在这里做错了什么?

4

1 回答 1

0

通过不接受敌人的对象性质,您使您的问题变得更加困难:

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()

不要将图像与对象分开处理,使图像只是对象的一个​​方面。

于 2017-06-26T05:09:55.287 回答