2013-06-18 112 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