2014-01-11 4 views
0

내가 게임을 개발하는 게임을 일시 정지 withhout위한 타이머를 개최, 나는 다음과 같이 화면에 텍스트를 블럭 전송 : 화면 메시지 "에 따라서은 파이 게임 표면에서 무언가를 삭제하고

message = font.render("Hello World" , True) 
surface_1.blit(message, some_rect) 

Hello World "가 나타납니다. 내가 필요한 것은이 메시지를 몇 초 동안 붙잡고 숨길 수있는 방법입니다. 내가 생각하기에 쉬운 방법은 루프의 각 회전 수를 계산하는 변수를 만드는 것입니다. 카운터가 순환 수에 도달하면 (100 회 = 1 초) 반복적으로 메시지를 숨 깁니다. null 문자열에 대한 메시지 : "".

나는이 방법을 시도하고 작동하지만 실제로는 표면에서 메시지를 지우는 더 좋은 방법과 메시지를위한 시간을 유지하는 더 좋은 방법이 필요하다. 그러나 더 좋은 방법은 내가 멈추고 싶지 않다. 내가 게임에서 (나중에) 추가 할 다른 것들.

예를 들어, 그림을 다양한 상태로 애니메이션화하여 애니메이션 (사람 산책)을 만드는 스프라이트. 그래서 몇 초 동안 게임을 잠/멈추게하는 것은 좋은 생각이 아닙니다.

답변

0

표면에서 무언가를 삭제할 방법이 없습니다. 서페이스에는 블리 팅 된 오브젝트에 대한 정보가 없으므로

이는 파이 게임의 구조는 어떻게해야 대략입니다 :

init() 
while playing: 
    drawVisibleSprites() 
    updateGame() 
    getPlayerInput() 

하는의 당신이 5 초에 문자열 "Hello World"를 표시 할 가정 해 봅시다.

내가 할 것이고, VolatileSprite 클래스를 만들면 타이머 객체와 함께 Sprite가 생길 것이다. 그런 다음 시간이 경과했는지 확인하기 위해 루프를 실행하고 제거 할 개체를 예약합니다.

얼마나 많은 시간이 경과했는지 알 수있는 방법이 필요하므로 pygame.time.Clock()을 사용할 수 있습니다. 이 클래스에는 tick()에 대한 마지막 호출 이후에 경과 한 시간 (ms)을 반환하는 tick() 메서드가 있습니다. 이른바 시간 델타는 다양한 함수에 전달되어 스프라이트를 업데이트 할 수 있습니다.

VolatileSprite로 돌아갑니다. VolatileSprite의 update(delta) 메서드에서 시간이 지났는지 확인할 수 있습니다. 그렇다면 제거 된 것으로 설정할 수 있습니다. 이렇게하면 주 코드에서 모든 스프라이트를 반복하고 제거해야하는 스프라이트를 제거 할 수 있습니다.

동일한 원리가 애니메이션에 적용되면 AnimatedSprite에는 일정한 시간이 지나면 그려지는 그림이 변경되는 타이머가 있습니다.