-1

我有以下课程:

class Enemy(pygame.sprite.Sprite):
def __init__(self):
    pygame.init()
    pygame.sprite.Sprite.__init__(self)
# Basic variables
    self.speed = [2,2]

# Sets up the image and Rect
    self.bitmap = pygame.image.load("badguy.png")
    self.bitmap.set_colorkey((0,0,0))
    self.shipRect = self.bitmap.get_rect()
    self.shipRect.topleft = [100,200]

def move(self, x, y):
    self.shipRect.center = (x,y)

def render(self):
    screen.blit(self.bitmap, (self.shipRect))

现在,我想让它在我按下箭头键时移动。但是,我的移动功能存在很大问题。它只是将船的中心移动到输入函数的坐标。如果您没有看到问题,那是我试图这样称呼它:

if event.key == K_RIGHT:
    enemy.x += 5
if event.key == K_LEFT:
    enemy.move(-5,0)
if event.key == K_UP:
    enemy.move(0,5)
if event.key == K_DOWN:
    enemy.move(0,-5)

我期待它能够将我的五人朝我击中的键的方向移动。但是,它会射到屏幕的左上角,因为我将中心设置在一个轴上为零,而在另一轴上设置为 +- 5。

可以使用什么方法使它朝着正确的方向移动,并且仍然可以让我将精灵放置在我选择的屏幕上的起始位置。

任何帮助深表感谢。

4

2 回答 2

3

更改move为:

def move(self, x, y):
    self.shipRect.center[0] += x
    self.shipRect.center[1] += y

这样,它只会将位置增加您指定的移动量。

于 2012-04-04T15:49:49.120 回答
1

move_ipcenterx/y是你想要的:

if event.key == K_RIGHT:
    enemy.centerx.move_ip(5,0)
if event.key == K_LEFT:
    enemy.centerx.move_ip(-5,0)
if event.key == K_UP:
    enemy.centerx.move_ip(0,5)
if event.key == K_DOWN:
    enemy.centerx.move_ip(0,-5)
于 2012-06-09T18:44:13.553 回答