2017-02-04 1 views
1

저는 게임을하고 있는데,이 게임에는 게임 화면의 맨 위에서 떨어지는 오브젝트가 있습니다. 개체가 y> = 200 일 때 개체를 임의의 x 위치로 다시 그리기를 원합니다. 코드를 작성하려고했지만 작동하지 않습니다. 내가 객체를 다시 그려 넣는 곳과 관련된 문제가 의심 스럽다. 누군가 내 실수를 지적 할 수 있습니까? 합니다 (if player.y >= 200: player.draw() 문이 불필요한 보이더라도)다시 그릴 객체를 가져올 수 없습니다.

문제는

# IMPORTS 
import pygame, random 

# GLOBALS 
global screen, displayW, displayH 
global clock, FPS 
global end, food, player 

# SETGLOBALVALUES 
def setGlobalValues(): 
    global screen, displayW, displayH 
    global clock, FPS 
    global end, food, player 

    displayW = 800 
    displayH = 600 
    screen = pygame.display.set_mode((displayW, displayH)) 

    clock = pygame.time.Clock() 
    FPS = 60 

    end = False 
    food = Food() 
    player = Player() 

# MAIN 
def main(): 
    pygame.init() 

    setGlobalValues() 
    setup() 
    gameLoop() 
    quitGame() 

# GAMELOOP 
def gameLoop(): 
    global end, player 

    while(not end): 
     for event in pygame.event.get(): 
      # ONCLICK QUIT 
      if(event.type == pygame.QUIT): 
       end = True; 

      # KEYDOWN 
      if(event.type == pygame.KEYDOWN): 
       if(event.key == pygame.K_LEFT): 
        player.velX -= 10 
       if(event.key == pygame.K_RIGHT): 
        player.velX += 10 

      # KEYUP 
      if(event.type == pygame.KEYUP): 
       if(event.key == pygame.K_LEFT): 
        player.velX = 0 
       if(event.key == pygame.K_RIGHT): 
        player.velX = 0 

     draw() 
     animate() 
     collision() 
     setFPS() 


# DRAW 
def draw(): 
    global screen, food, player 

    # fill background 
    screen.fill((255, 255, 255)) 

    player.draw() 

    if player.y >= 200: 
     player.draw() 

    food.draw() 

    # update 
    pygame.display.update() 

# ANIMATE 
def animate(): 
    global food, player 

    food.animate() 
    player.animate() 

# COLLISION 
def collision(): 
    player.collision() 

# SETFPS 
def setFPS(): 
    global clock, FPS 

    clock.tick(FPS); 

# CLASSES 
class Food(): 
    def __init__(self, img="", x=0, h=0, velY=0, color=()): 
     global displayW 

     self.img = pygame.image.load("assets/img/rsz_burger.png") 
     self.x = random.randrange(0, displayW) 
     self.y = -100 
     self.velY = 3 
     self.color = (255, 0, 0) 

    def draw(self): 
     global screen 

     screen.blit(self.img, (self.x, self.y)) 

    def animate(self): 
     self.y += self.velY 

    def collision(self): 
     global displayW, displayH 

     pass 

class Player(): 
    def __init__(self, x=0, y=0, velX=0, velY=0, w=0, h=0, color=()): 
     global displayW, displayH 

     self.w = 20 
     self.h = 20 
     self.x = displayW/2 - self.w/2 
     self.y = displayH - 100 
     self.velX = 0 
     self.velY = 0 
     self.color = (0, 0, 0) 

    def draw(self): 
     global screen 

     pygame.draw.ellipse(screen, self.color, (self.x, self.y, self.w, self.h)) 

    def animate(self): 
     self.x += self.velX 
     self.y += self.velY 

    def collision(self): 
     global displayW 

     # collision to walls 
     if(self.x <= 0): 
      self.velX = 0 
     elif(self.x + self.h) >= displayW: 
      self.velX = 0 


# SETUP 
def setup(): 
    pygame.display.set_caption("Food Catcher") 

# QUIT GAME 
def quitGame(): 
    pygame.quit() 
    quit() 

# CALL MAIN 
if(__name__ == "__main__"): 
    main() 

답변

1

드로우 기능이 잘 보인다 draw()

PYTHON입니다.

Food 클래스의 애니메이션 기능에 조건부를 추가하여 원하는 것을 수행 할 수 있습니다. 당신이 Food__init__ 기능에 임의의 x 값을 생성하기 때문에

def animate(self): 
    self.y += self.velY 
    # reset food if y position over 200 
    if self.y > 200: 
     self.y = -100 
     self.x = random.randrange(0, displayW) 

귀하의 접근 방식은 작동되지 않았습니다. 이 행은 Food 오브젝트 (setGlobalValues 함수)를 한 번만 인스턴스화하기 때문에 한 번만 실행됩니다.

관련 문제