【发布时间】:2016-11-18 00:43:59
【问题描述】:
代码应该在岩石列表中的任何精灵与子弹精灵碰撞后生成一个临时的岩石精灵。目前,临时岩石不会生成。当我运行程序打印岩石列表的长度时,如果我射击一颗小行星,数字会增加,但不会产生新的。
class Rock(gameEngine.SuperSprite):
def __init__(self, scene):
gameEngine.SuperSprite.__init__(self, scene)
self.setImage("rock.gif")
self.reset()
def checkEvents(self):
self.rotateBy(self.rotSpeed)
def reset(self):
""" change attributes randomly """
self.hitOnce = False
#set random position
x = random.randint(0, self.screen.get_width())
y = random.randint(0, self.screen.get_height())
self.setPosition((x, y))
#set random size
scale = random.randint(20, 40)
self.scale = scale
self.setImage("rock.gif")
self.imageMaster = \
pygame.transform.scale(self.imageMaster, (scale, scale))
self.speed = random.randint(1,6)
self.angle = random.randint(0, 360)
self.setSpeed(self.speed)
self.setAngle(self.angle)
self.rotSpeed = random.randint(-5, 5)
class Game(gameEngine.Scene, gameEngine.SuperSprite):
def __init__(self):
gameEngine.Scene.__init__(self)
self.ship = Ship(self)
self.bullet = Bullet(self)
self.rocks = []
for i in range(10):
self.rocks.append(Rock(self))
self.score = -50
self.lives = 11
self.lblInfo = gameEngine.Label()
self.lblInfo.center = (175, 20)
self.lblInfo.size = (350, 30)
self.rockGroup = self.makeSpriteGroup(self.rocks)
self.addGroup(self.rockGroup)
self.sprites = [self.bullet, self.ship, self.lblInfo]
self.setCaption("asteroids")
def update(self):
rockHitShip = self.ship.collidesGroup(self.rocks)
if rockHitShip:
rockHitShip.reset()
self.lives -= 1
rockHitBullet = self.bullet.collidesGroup(self.rocks)
if rockHitBullet:
if rockHitBullet.scale >= 20:
rockHitBullet.setSpeed(rockHitBullet.speed * -1) #inverts the direction
rockHitBullet.imageMaster = \
pygame.transform.scale(rockHitBullet.imageMaster, (rockHitBullet.scale/2, rockHitBullet.scale/2))
self.tempRock = Rock(self)
self.tempRock.rect.center = rockHitBullet.rect.center
self.tempRock.dir = (rockHitBullet.dir - 90)
self.rocks.append(self.tempRock)
else:
rockHitBullet.reset()
self.bullet.reset()
self.score += 50
【问题讨论】:
-
使用按钮
{}在 SO 上正确格式化代码。 -
运行时是否收到错误消息?显示有问题的完整消息(回溯)。
-
旧方法:使用
print()查看变量中的值以及执行的代码部分。这样你就可以找到问题所在。 (或学习如何使用调试器) -
没有错误。似乎所有代码都已执行,但没有生成新的精灵
-
可能代码没有被执行——使用
print()来检查。
标签: pygame