2010-11-25 4 views
0

저는 파이 게임을 사용하여 작은 장면을 만듭니다. 지금, 나는 선과 함께 일하고있다.파이썬 (파이 게임) : 어떻게 행을 삭제할 수 있습니까?

나는 화면에 그려지는 선의 배열을 가지고 있는데, 배열에서 선이 삭제되면 화면에서 그 선을 사라지게하고 싶다.

내가 발견 한 문제는 화면에 선이 그려지고 정적으로 유지된다는 것입니다. 화면을 재설정하는 방법을 찾을 수 없습니다 (배경으로 JPEG를 사용하고 있습니다).

화면에서 그려진 선을 제거하는 방법이 있습니까? 당신이 screen.fill를 사용하는 경우

감사

답변

1

는 ([0,0,0])는 배경에 기입 (또는 당신은 당신의 배경으로 설정 한 무엇이든).

이렇게하면 이미지에 그려진 선이 지워지고 기본적으로 배경에 그려진 것이 제거됩니다.

0

the documentation에 설명 된대로 명령을 실행하여 디스플레이를 업데이트해야 할 수 있습니다. 전체 디스플레이 표면을 업데이트하는 명령은 다음과 같습니다

pygame.display.update() 

단지 더 효율적이 될 것이다 필요한 부분을 업데이트하려면 함수에 인수를 전달할 수도 있지만, 전체 코드없이 내가 할 수 없습니다 그 논증이 무엇인지 말해.

4

매우 효율적으로 보이지는 않지만, 가장 쉬운 방법은 모든 것을 다시 그리는 것입니다. 많은 게임에서 3D 카드가 없어도 모든 프레임에서 화면이 완전히 그려집니다 (이전 Doom 게임을 기억하십니까?). 따라서 백그라운드 위에 몇 줄을 그릴 경우 파이썬에서도 매우 빠릅니다.

import pygame 
import random 

SCREEN_WIDTH = 320 
SCREEN_HEIGHT = 200 

class Line(object): 
    def __init__(self, start_pos, end_pos, color, width): 
     object.__init__(self) 
     self.start_pos = start_pos 
     self.end_pos = end_pos 
     self.color = color 
     self.width = width 

def CreateRandomLine(): 
    rnd = random.randrange 
    start_pos = (rnd(SCREEN_WIDTH), rnd(SCREEN_HEIGHT)) 
    end_pos = (rnd(SCREEN_WIDTH), rnd(SCREEN_HEIGHT)) 
    color = (rnd(255), rnd(255), rnd(255)) 
    width = rnd(10) + 1 
    return Line(start_pos, end_pos, color, width) 

def DrawScene(screen_surface, background_image, lines): 
    screen_surface.blit(background_image, (0, 0)) 
    for line in lines: 
     pygame.draw.line(screen_surface, line.color, \ 
         line.start_pos, line.end_pos, line.width) 

pygame.init() 
screen_surface = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT)) 
background_image = pygame.Surface(((SCREEN_WIDTH, SCREEN_HEIGHT))) 
background_image.fill((200, 100, 200)) # I kinda like purple. 
# Alternatively, if you have a file for your background: 
# background_image = pygame.image.load('background.png') 
# background_image.convert() 
lines = [] 
for i in range(10): 
    lines.append(CreateRandomLine()) 

for frame_id in range(10): 
    del lines[0] # Remove the oldest line, the one at index 0. 
    lines.append(CreateRandomLine()) # Add a new line. 
    DrawScene(screen_surface, background_image, lines) 
    pygame.display.flip() 
    pygame.time.wait(1000) # Wait one second between frames. 

이 스크립트는 배경에 임의의 줄을 표시

나는 그런 일을 상상한다. 10 프레임, 각 프레임은 1 초 지속됩니다. 각 프레임 사이에 첫 번째 행이 행 목록에서 제거되고 새 행이 추가됩니다.

pygame.time.wait을 제거하고 얼마나 빠르는지 확인하십시오. D.