2009-05-11 7 views
2
내가 여기에 SDL과 약간의 RTS 게임을 시작하고있어

에 대한 질문의 무리는 몇 가지 질문은 다음과 같습니다는 SDL

나는 작은 스프라이트 작업
  • 이 거기 주사선으로 화면 X2를 표시하는 방법 ? 나는 rotozoom과 함께 줌을 시도했지만 게임이 느려지고 손으로 내 스프라이트를 스케일링하지 마십시오.
  • 이 실행되는 동안 전체 화면과 창 사이에서 을 어떻게 전환 할 수 있습니까? SDL_WM_ToggleFullScreen 기능을 찾았지만 Windows에서 작동하지 않는 것 같습니다. SDL doc에 따르면.
  • 내 자신의 커서를 넣으려면 내 포인터로 스프라이트를로드하고 마우스를 따라 가도록합니다. 하지만 도 SDL_Delay으로 프레임 속도를 낮추려고하므로 포인터가 부드럽게 움직이지 않습니다. SDL 커서가 의 영향을받지 않는 것처럼 보입니다. 응용 프로그램의 프레임 속도는 이며, 그렇다면 더 좋은 해결책이며 이상한 마스크 대신 그림을 사용하는 방법이 있습니까?
  • 프레임 율을 제한하는 더 좋은 방법이 있습니까?
  • 어떻게

답변

2

스프라이트 크기 - 모든 종류의 실시간 크기 조정 또는 회전을 위해 SDL과 같은 소프트웨어 블 리터보다는 OpenGL을 사용하는 것이 가장 좋습니다. SFML과 같은 다른 라이브러리가 이것을 대신 사용합니다.

전체 화면/창 - Zack의 대답이 충분 해 보이며 SDL_SetVideoMode를 다시 호출하십시오.

커서 이동 - 일반적으로 OS는 기본 응용 프로그램과 별도로 마우스를 렌더링하여 반응 형으로 유지합니다. 마우스 커서를 직접 렌더링하는 경우 게임을 더 빨리 렌더링하는 것이 유일한 방법입니다. 나는 커서 자체에 대해 많은 선택권을 가지지는 않는다고 생각한다 (아마도 크로스 플랫폼 요구 사항 때문에).

프레임 레이트 - 많은 사람들은 프레임 속도에서 게임 내 움직임과 물리를 분리하는 것을 제안합니다 (예 : 'Fix Your Timestep'참조). 또한 SDL_Delay는 상한이 아닌 대기 시간에 하한을 부과합니다.

표면을 틴트 처리 - 다시 말하지만, SDL이이를 직접 지원하지 않으므로 OpenGL에서 가장 잘 수행됩니다.

+0

위의 OpenGL을 말하면, 분명히 Windows에서만 DirectX를 대체 할 수있다. – Kylotan

3

가 어떻게 전체 화면 사이를 전환하고 실행하는 동안, 윈도우를 할 수 있습니다 (draw_lit_sprite 알레그로 에서와 같이) 표면을 tinte 수 있습니까? SDL_WM_ToggleFullScreen 함수를 찾았지만 SDL doc에 따라 Windows에서 작동하지 않는 것 같습니다.

예, 문서는 SDL_WM_ToggleFullScreen 기능은 현재는 X.

방법에 대한 작동 상태 나는 그것이 어떻게 이렇게 같은 : 이러한 점을 들어

void SdlGraphics::setupScreenSurface() { 
    Uint32 flags = 0; 
    flags |= SDL_HWSURFACE; 
    flags |= SDL_DOUBLEBUF; 

    if(isFullScreen) { 
     flags |= SDL_FULLSCREEN; 
    } 

    screenSurface = boost::shared_ptr<SDL_Surface>( 
     SDL_SetVideoMode(width, height, depth, flags), 
     utility::NullDeleter() 
    ); 
} 

void SdlGraphics::setFullScreen(bool fullScreen) { 
    if(isFullScreen != fullScreen) { 
     isFullScreen = fullScreen; 
     setupScreenSurface(); 
    } 
} 

:

  • 작은 스프라이트로 작업합니다.이 있습니다. 주사선으로 화면 x2를 표시하는 방법은? rotozoom으로 확대/축소 해 보았지만 게임이 느려졌습니다. 그리고 내 스프라이트를 수동으로 조정하는 것을 피하고 싶습니다.

  • 어떻게 내가 거의 SDL와 OpenGL 모드를 사용하는 것이 좋습니다 (알레그로에서 draw_lit_sprite와 같은) 표면

을 tinte 수 있습니다. 하드웨어 가속을 통해 이러한 종류의 작업을 수행 할 수 있습니다. rotozoom은 모두 소프트웨어로 작성되었습니다 (제 지식에 따라). 그래서 느린 이유입니다. 항상 느려질거야.

스프라이트를 2x로 그리는 데 사용할 수있는 다른 옵션은 모든 것을 1x 크기의 텍스처로 그리는 것이고 모든 것이 그려지면 그 텍스처를 2x 배율로 조정하는 것입니다. 그런 다음 프레임 당 여러 개의 작은 표면이 아닌 하나의 표면 만 처리합니다.

커서 문제는 drawing as fast as possible, but only updating your game at a constant rate 일 수 있습니다. 그렇게하면 부드럽게 스크롤되지만 게임 플레이가 제어 불능 상태가되지 않습니다.

+0

"스프라이트를 2x로 그리는 데 사용할 수있는 또 다른 옵션은 모든 것을 1x 크기의 텍스처로 그리는 것이고 모든 것이 그려지면 그 텍스처를 2x 스케일링 한 다음 많은 수의 단일 서페이스 만 처리하는 것입니다. 프레임마다 작은 것들. " 그건 사실 내가 이미하고있는 것입니다 – Giann

+0

아야! 글쎄, 노력했다;) –