2013-06-18 2 views
0

화면에 두 개의 물체를 움직이는 코드가 있습니다. 내가 원하는 것은 상대방에 도달하고 처음부터 다시 시작하는 것입니다. 그러나 그들은 화면을 가로 지르며 사라집니다.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 :'if 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

여기서 문제는 이미지의 경계 사각형 (if self.rect.right >= 500)의 위치를 ​​테스트하는 것입니다.이 사각형은 업데이트되지 않습니다 (이미지의 위치에 'custom'변수 인 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 
관련 문제