我有以下课程:
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。
可以使用什么方法让它以正确的方向移动,并且仍然可以让精灵放在我选择的屏幕上的起始位置。
非常感谢任何帮助。
答案 0 :(得分:2)
将move
更改为:
def move(self, x, y):
self.shipRect.center[0] += x
self.shipRect.center[1] += y
这样它只会按您指定的移动量增加位置。
答案 1 :(得分:0)
move_ip
和centerx
/ 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)