【发布时间】:2016-12-13 11:08:19
【问题描述】:
我需要有关如何使我的塔防游戏具有多个实例的类的帮助。我想让新实例在最后一个实例之后大约一秒钟出现,但已经卡住了几个小时。我的代码如下。
import pygame
import os
import time
img_path = os.path.join('test.jpg')
class redEnemy(object):
def __init__(self):
self.image = pygame.image.load(img_path)
self.x = 0
self.y = 208
def moveEnemy(self):
dist = 3
if True:
self.x += dist
def draw(self, surface):
surface.blit(self.image, (self.x, self.y))
lifes(self)
def lifeText(life):
font = pygame.font.SysFont("monospace", 20)
text = font.render("Lifes %s" % life, True, black)
textpos = text.get_rect()
textpos.center = (50,20)
screen.blit(text, textpos)
def lifes(self):
global life
life = 50
if self.x > 950:
life = life - 1
enemies.append(redEnemy())
lifeText(life)
pygame.init()
screen = pygame.display.set_mode((960, 720))
black = (0,0,0)
enemies = []
redenemy = redEnemy()
clock = pygame.time.Clock()
mapImg = pygame.image.load("mapimage.jpg")
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
running = False
for enemy in enemies:
enemy.update()
for enemy in enemies:
enemy.draw(screen)
redenemy.moveEnemy()
screen.blit(mapImg, (0,0))
redenemy.draw(screen)
pygame.display.update()
clock.tick(60)
【问题讨论】:
-
您对多重实例的确切含义是什么?类似的东西: a = redEnemy(); b = redEnemy();打印 id(a),id(b)
-
我希望班级能够同时在屏幕上有多个敌人但我不知道怎么做,我在网上看到你使用列表来做到这一点但我仍然感到困惑。
-
您只创建了一个 redenemy
redenemy = redEnemy()的实例,因此当您将其添加到列表时,它将始终指向同一个敌人。你也调用enemy.update(),但它没有任何这样的方法。 -
那我该如何解决呢?
-
如何解决?通常 - 在你的班级中定义
def update(self)。要拥有许多实例,只需执行instance_1 = redEnemy()和instance_2 = redEnemy()等。您可以将所有实例保留在列表中 -instances = []和instances.append(redEnemy())
标签: python class pygame instances