我有代码在屏幕上移动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()
导致这种情况的原因是什么?
答案 0 :(得分:1)
self.x += self.xMoveAmnt
在此处,您需要增加x
的{{1}}来移动它。
Enemy
您正在增加 if self.rect.right >= 500:
,但现在您正在查看x
。如果您增加rect.right
x
则不会增加。也许你打算这样做:
rect.right
答案 1 :(得分: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