2015-01-21 3 views
-1

특정 키를 누르면 플레이어가 계속 움직여야합니다. 문제는 플레이어의 이미지가 한 번 (정의 된 키 중 하나를 누를 때) 움직이며 멈추는 것입니다. 여기에 코드를 입력하십시오.파이 게임에서 스프라이트 이동을 어떻게 만드나요?

import pygame 
import sys 
import os 
import random 
import time 
from pygame.locals import * 

pygame.init() 

white = (255, 255, 255) 
black = (0, 0, 0) 

screenw = 800 
screenh = 600 

screen = pygame.display.set_mode((screenw, screenh)) 

pygame.display.set_caption("Game") # Here I create a display. 

clock = pygame.time.Clock() 

class Car(pygame.sprite.Sprite): # Here I create a class. 

    def __init__(self, color = black, width = 100, height = 100): 

     pygame.sprite.Sprite.__init__(self) 

     self.image = pygame.Surface((width, height)) 

     self.image.fill(color) 

     self.rect = self.image.get_rect() 

    def set_pos(self, x, y): 
     self.rect.x = x 
     self.rect.y = y 

    def set_img(self, filename = None): 
     if filename != None: 

      self.image = pygame.image.load(filename) 

      self.rect = self.image.get_rect() 

def main():*I create a game loop 
    x_change = 0 
    y_change = 0 

    x = 0 
    y = 0 

    car_group = pygame.sprite.Group() # Make a group 

    player = Car() 

    player.set_img("images.jpg") 

    car_group.add(player) 

    exit = False 

    FPS = 60 

    while not exit: 
     for event in pygame.event.get(): 
      if event.type == pygame.QUIT: 
       pygame.quit() 
       quit() 

      if event.type == pygame.KEYDOWN: 

       if event.key == pygame.K_LEFT: 
        x_change = -10 

       elif event.key == pygame.K_RIGHT: 
        x_change = 10 

       elif event.key == pygame.K_UP: 
        y_change = -10 

       elif event.key == pygame.K_DOWN: 
        y_change = 10 

      if event.type == pygame.KEYUP: 
       if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT or event.key == pygame.K_UP or event.type == pygame.K_DOWN: 
        x_change = 0 
        y_change = 0 

      x += x_change 
      y += y_change 


     screen.fill(white) 
     player.set_pos(x, y) # Blit the player to the screen 
     car_group.draw(screen) 
     clock.tick(FPS) 
     pygame.display.update() 

main() 
pygame.quit() 
quit() 
+0

0120-13d 또한 파이 게임에서 문서를 읽으십시오 http://www.pygame.org/docs/ref/key.html – RNikoopour

+3

'x + = ... y + = ...'한 들여 쓰기를 취소하면 네가 원하는 걸해라. – user2097159

+0

첫눈에. 상황이 바뀌어 - while 루프에서 "pygame.event.pump"호출을 추가하십시오. 그 필요성은 event. * 함수 및 시스템에 대한 특정 호출에 따라 다릅니다. – jsbueno

답변

0

글쎄, 문제는 스프라이트가 한 번만 움직일 수 있다는 것입니다. 예를 들어,이 코드 조각을 :

if event.key == pygame.K_LEFT: 
    x_change = -10 

이는 x 위치 (10)에 의해 작은 그런 다음이 정지 될 수 있습니다. 업데이트 기능을 만들고 싶을 수도 있습니다. 함수를 사용하거나 사용하지 못하게하는 변수도 만들어집니다. 다른 방향은 진행 방향을 제어하는 ​​데 사용됩니다. 다음은 update 기능입니다. 귀하의 필요에 맞게 변경하십시오.

def update(): 
    global direction 
    if direction == 'LEFT': 
     x -= 10 
    elif direction == 'RIGHT': 
     x += 10 
    elif direction == 'UP' 
     y -= 10 
    elif direction == 'DOWN': 
     y += 10 

이제 함수를 실행할지 여부를 제어하는 ​​변수가 필요합니다. 새로운 두 변수에 대해 다음 두 행을 추가하십시오.

run = 0 
direction = 'NONE' 

클래스의 코드 앞에 있어야합니다. 당신은 절대적 event.key 라인에서 라인을 변경, 그것은 (적절한 들여 쓰기에) 있어야합니다 : 물론

if event.key == pygame.K_LEFT: 
    direction = 'LEFT' 
    run = 1 
elif event.key == pygame.K_RIGHT: 
    direction = 'RIGHT' 
    run = 1 
elif event.key == pygame.K_UP: 
    direction = 'UP' 
    run = 1 
elif event.key == pygame.K_DOWN: 
    direction = 'DOWN' 
    run = 1 

, 반복 무한 바로 이동 차를 중지하는 뭔가가 있어야한다? run 1의 동일 한 때문에

if run == 1: 
    Car.update() 
else: 
    pass 

이 작동합니다 다음 while 루프에서이 두 줄을 넣어하지만 for 루프 전에 지금

elif event.key == pygame.K_SPACE: 
    direction = 'NONE' 
    run = 0 

: 위의 라인이 라인을 추가 자동차는 스페이스 바를 누를 때까지 주어진 방향으로 움직입니다. 이게 너를 돕기를 바란다.

관련 문제