2013-06-18 61 views
0

我有代码在屏幕上移动2个对象。我想要他们做的是到达另一边,并在开始时重新开始,但是他们只是穿过屏幕并消失。在PYGAME中移动对象

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

什么决定了“敌人”的位置?它是x:'self.x + = ...'还是rect:'如果self.rect.right> = ...' – Patashu

+0

self.x是对象的x。增加它会移动物体,如果意图在物体到达远端时将物体移回起始位置。 –

回答

1
self.x += self.xMoveAmnt 

在这里,你增加Enemyx移动它。

if self.rect.right >= 500: 

你都在增加x但现在你正在检查rect.right。如果增加xrect.right不会增加。也许你打算这样做:

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

+0

做到了。非常感谢! –

+0

'rect.right'是一个属性,它相当于'rect.x + rect.width' – ninMonkey

0

这里的问题是,当矩形未更新(因为图像的位置使用“自定义”变量,x)时,您将对图像的边界矩形(if self.rect.right >= 500)的位置进行测试。

尝试做这样的事情:

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