0

画面上で 2 つのオブジェクトを移動するコードがあります。私がやりたいのは、反対側に到達して最初からやり直すことですが、画面を横切って消えるだけです。

import pygame, sys, time, random
from pygame.locals import *
pygame.init()
winW = 500
winH = 300
surface = pygame.display.set_mode ((winW, winH),0,32)

class Enemy():
    def __init__(self, char, xMoveAmnt, startY=0, startX=0):
        self.char = char
        self.x = startX
        self.y = startY
        self.startX=startX
        self.startY=startY
        self.xMoveAmnt = xMoveAmnt
        self.image = pygame.image.load(self.char)
        self.rect = self.image.get_rect()


    def moveChar(self):
        self.x += self.xMoveAmnt
        if self.rect.right >= 500:
            self.x=self.startX

enemyList = []
for i in range (0, 2):

    leftOrRight1 = random.randint(0,1)
    if leftOrRight1 == 0:
         leftOrRight = 0
         xMoveAmnt = 20
    elif leftOrRight1 == 1:
        leftOrRight = 500
        xMoveAmnt = -20
    enemyList.append(Enemy(("orc.png"), xMoveAmnt, random.randint(0, 300), leftOrRight))

while True:
    surface.fill ((255,255,255))
    for enemy in enemyList:
        enemy.moveChar()
        surface.blit(enemy.image, (enemy.x, enemy.y))
        time.sleep(00.04)        
    pygame.display.update()

何が原因でしょうか?

4

2 に答える 2

1
    self.x += self.xMoveAmnt

xここでは、のを増やしEnemyて移動します。

    if self.rect.right >= 500:

増加していましxたが、今はチェックしていますrect.right。増えていれば増えx rect.rightません。多分あなたはこれをするつもりでした:

    if self.x + self.rect.right >= 500:

?

于 2013-06-18T23:45:37.103 に答える
0

ここでの問題は、画像の境界矩形 ( if self.rect.right >= 500) の位置をテストしているときに、この矩形が更新されていないことです (画像の位置に「カスタム」変数 を使用しているxため)。

そのようなことをしてみてください:

def moveChar(self):
    self.x += self.xMoveAmnt
    if self.x >= 500:
        self.x = self.startX

そのようなことには、モジュロ演算子を使用することもできます。

def moveChar(self):
    self.x = (self.x + self.xMoveAmnt) % 500
于 2013-06-18T23:45:30.270 に答える