2016-08-27 14 views
0

현재 2D 탑뷰에서 우주 탐사 게임을하고 있습니다. 나는 꽤 많은 행성을 가지고 있으며, 맵 스팬이 디스플레이보다 훨씬 크기 때문에 나는 디스플레이 영역 밖에있는 많은 행성 스프라이트로 끝난다. 순간에 나는 파이 게임이 실제로 스프라이트를 블리치하지 않을 것이라고 생각한다. 블리 팅을 이해하고 서페이스를 그리는 것이 상당히 느리다는 사실이다. 또는 blit 호출 이전에 스프라이트가 디스플레이 내에 있는지 확인하기 위해 조건을 추가해야합니까? 제가 묻는 이유는 게임이 작동 할 때마다 행성이 발견 될 때마다 2 개의 새로운 것들이 생성된다는 것입니다. 이것은 게임이 상당히 커지고 잠재적으로 매우 느려질 수 있다는 것을 의미합니다.파이 게임 블릿이 디스플레이 외부에있는 사각형으로 나타납니다.

고맙습니다.

답변

1

아니요, 이미지가 밝아지지 않습니다. 파이 게임 (Pygame)은 화면 밖에있는 것을 블리치하려는 경우 단순히 무시할 것입니다. 방대한 양의 객체가있는 경우를 제외하고는 프로그램 속도가 느려져서는 안됩니다. 파이 게임이 이미지가 화면 외부에 있는지를 결정하는 데 시간이 걸릴 것이기 때문입니다. 그래도 큰 문제는 아닙니다.

내 대답이 증명이 부족하다는 것을 깨달았습니다. (나쁘다, mkay ...), 그래서 나는 내 점수를 증명하기 위해 몇 가지 테스트를 실시했습니다. 나는 3 가지 조건을 테스트했다 : 화면에 블리 팅, 화면 바깥으로 블리핑, 아무것도하지 말 것. 컴퓨터의 성능 (5 년 된 랩톱)을 기반으로하므로 초당 소요 시간은 중요하지 않으므로 대신 그 사이의 요인을 찾아보십시오. 모두를 위해 비슷해야합니다.

5000 블릿

  • 내부 : 0.033265519510593734 초 외부
  • : 0.002402466401003767 초
  • 아무것도 : 0.00023237229449441657 초

50 블릿

  • 내부 : 3.639024520190433 초
  • 외부
  • : 0.23328839021967726 초
  • 아무것도 : 0.023549600850092247 초

50,000,000 블릿

  • 내부 : 360.48034191795153 초 외부
  • : 23.317473949049596 초
  • 아무것도 : 2.3507101910654455 초

화면에서 블리치하는 것은 블리 칭하지 않는 것보다 더 많은 시간이 걸리지 만 실제로 화면에 블리 칭하는 데는 거의 시간이 걸리지 않습니다. 화면 밖에서 블리치하는 것은 거의 비용이 들지 않습니다.

setup = """ 
import pygame 
pygame.init() 
screen = pygame.display.set_mode((100, 100)) 
image = pygame.Surface((100, 100)) 
""" 

statement1 = """ 
for i in range(5000): 
    screen.blit(image, (0, 0)) 
""" 

statement2 = """ 
for i in range(5000): 
    screen.blit(image, (200, 200)) 
""" 

statement3 = """ 
for i in range(5000): 
    pass 
""" 

from timeit import timeit 

num_of_times = 10000 
inside = timeit(stmt=statement1, setup=setup, number=num_of_times) 
outside = timeit(stmt=statement2, setup=setup, number=num_of_times) 
nothing = timeit(stmt=statement3, setup=setup, number=num_of_times) 

print("Inside: {} seconds".format(inside/num_of_times)) 
print("Outside: {} seconds".format(outside/num_of_times)) 
print("Nothing: {} seconds".format(nothing/num_of_times)) 
+0

좋아 그게 내가 생각했던,하지만이 블리트 기능에 숨어 있었는지 몰랐 때문에 나는 일을하지 않은 확신하지 못했습니다 :

더 참고로

, 여기에 내가 만든 테스트입니다 아무 것도 계산하지 않아. – Sorade

+0

@Sorade 나는 인터넷 접속이 가능한 미친 사람을 맹목적으로 믿을 필요가 없도록보다 정확한 정보와 실제적인 증거를 포함하도록 내 대답을 업데이트했습니다. –