문제

지금 내 간단한 피그 게임을 구현하는 방법은 다음과 같습니다.

import pygame, sys
from pygame.locals import *

def run_game():
    pygame.init()

    SIZE = (640, 400)
    BG_COLOUR = (0, 0, 0)
    LINE_COLOUR = (255, 255, 255)

    screen = pygame.display.set_mode(SIZE)
    clock = pygame.time.Clock()

    while True:
        time_passed = clock.tick(30)
        for event in pygame.event.get():
                if event.type == QUIT:
                        exit_game()

        screen.fill(BG_COLOUR)
        pygame.draw.aaline(screen, LINE_COLOUR, (1, 1), (639, 399))
        pygame.display.flip()

def exit_game():
    sys.exit()

if __name__ == "__main__"
    run_game()

나는 또한 a를 보았다 keeprunning 플래그는 대신 메인 이벤트 루프를 종료하고 사용하는 데 사용됩니다. pygame.event.poll() 반복하는 대신 pygame.event.get(). 변수의 사례/명명과 같은 제안, 더 효과적이거나 읽기 쉬운 것이 있습니까?

도움이 되었습니까?

해결책

무엇이든 pygame 저자는 추천합니다. 피하는 것이 좋습니다 from ... import *: 코드가 읽기가 더 어려워집니다 (독자가 각각의 모든 바레나 이름을 검사하여 실제로 로컬로 할당되었는지 여부를 확인해야합니다. *). 변경하십시오 import pygame.locals as pygl, 말하면, 이름을 모든 이름으로 사용하여 자격을 갖춘 사람이됩니다 (코드에서 이것은 단지 변경을 의미한다고 생각합니다. QUIT 에게 pygl.QUIT). 정확히 당신이 정확히 선택하는 대신에 어떤 짧은 이름을 선택했는지 pygl 그다지 중요하지는 않지만 그것은 내가 강력하게 추천하는 일반적인 구조입니다. Remeber : 네임 스페이스는 좋은 아이디어입니다. 더 많은 것을합시다!-)

PEP 8이 말하는 것처럼 4 개의 공간 인sents를 사용하십시오. 4 공간 계니를 8 공간이나 탭인 다른 4 공간과 혼합하는 것 같습니다. ~하지 않다!

당신이 할 수없는 변수에 할당하지 마십시오. time_passed.

Code Like : if event.type == Quit : exit_game ()가 하나 또는 아주 적은 가능성을 테스트하는 한 괜찮습니다. if/elif), 그러나 가독성이나 효율성으로 "확장"하지는 않습니다. 여러 사례를 다루어야하는 경우 루프 전에 설정할 수있는 DITT를 사용하십시오.

dispatch = {pygl.QUIT: exit_game, # whatever else
           }

그리고 대신 if/elif/else, 사용:

f = dispatch.get(event.type)
if f is None:  # the "else" case"
   ...
else: f()

다른 팁

당신의 예는 아주 좋습니다. 그러나 "pygame.event.poll ()"이 얼마나 작동하는지 알 수 있다면이 간단한 예를 참조하십시오.

event = pygame.event.poll()
    while "ok":
        event = pygame.event.wait()
        cursor = pygame.mouse.get_pos()
        if event.type == QUIT:  raise SystemExit
            if event.type == MOUSEBUTTONUP and pygame.mouse.get_pressed()[0]:
               print "up"
        if event.type == MOUSEBUTTONDOWN and pygame.mouse.get_pressed()[0]:
               print "down"
        if event.type == KEYDOWN and event.key == K_SPACE: print "space key"
        if event.type == KEYDOWN and event.key == K_BACKSPACE:
               print "backspace key"

Pygame의 모든 이벤트를 사용할 수 있습니다.

  • pygame.event.get- 대기열에서 이벤트 얻기 큐에서 이벤트 얻기
  • pygame.event.poll- 대기열에서 단일 이벤트 받기 큐에서 단일 이벤트 받기
  • pygame.event.wait- 대기열에서 단일 이벤트를 기다립니다.

또는

  • pygame.event.clear ([pygame.quit, pygame.activeevent, pygame.keydown, pygame.keyup, pygame.mousemotion, pygame.joybuttonup, pygame.userevent]))))

Bassicaly 당신은이 이벤트에 대한 기능을 만들어 사용합니다. 이와 같이 :

def click_down():
    #print "Event queue:", pygame.event.peek()
    return pygame.event.peek(pygame.MOUSEBUTTONDOWN)

def is_click():
    if not click_down():
        return None

    clicks = pygame.event.get(pygame.MOUSEBUTTONDOWN)
    pygame.event.get(pygame.MOUSEBUTTONUP)
    return clicks[0].pos
def quiting():
    return pygame.event.peek(pygame.QUIT)
def keyboard():
    pygame.event.pump()
    pygame.event.get(pygame.KEYDOWN)

또는 다음과 같은 일부 이벤트 차단

pygame.event.set_blocked((pygame.JOYAXISMOTION))

pygame.Color() 수업은 사용하기에 좋습니다.

from pygame import Color

# example: text is 20% gray. gray100 = (255,255,255)
text_fg = Color('gray20')
text_bg = Color('gray80')

# many names are defined
Color("red")

# rgb, rgba
Color(100, 100, 100)
Color(100, 100, 100, 20)

#hex
Color("fefefe")
Color("fefefe00")

이것은 기본적으로 내가 본 다른 모든 예와 같습니다. 아마도 Pygame으로 작성된 오픈 소스 게임을 찾고 싶을 수도 있습니다.

이것이 당신이 찾고있는 일종의 대답인지 확실하지 않지만
pygame.draw.aaline (화면, line_colour, (1, 1), (639, 399))
당신은 넣어야합니다
pygame.display.flip ()
이것은 플레이어가 실제로 보는 디스플레이가 모든 프레임마다 새로 고침 될 수 있도록합니다. 이 코드를 실행하는 경우, 디스플레이가 업데이트되지 않으므로 라인이없는 검은 색 화면뿐입니다.

경험적 테스트에서 간단히 라인이있는 것 같습니다.

pygame.quit()

sys.exit () 전에 누락

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top