-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_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)
于 2012-06-09T18:44:13.553 に答える