2009-05-11 3 views
2

についての質問の束:私はSDLと少しRTSゲームを始めているし、ここでいくつかの質問があるSDL

  • 私は、小さなスプライトで作業は走査線で画面 X2を表示する方法が あり?私は回転式のズームで をズームしようとしましたが、ゲームが遅くなります。 私は手でスプライトを拡大しないようにしたいと思います。
  • が実行中に、 を全画面表示とウィンドウ表示に切り替えるにはどうすればよいですか? SDL_WM_ToggleFullScreenの機能が見つかりましたが、 Windowsでは動作していないようです SDL docによると、
  • 私自身のカーソルを置くために、私はポインタでスプライトをロードし、 マウスを追うようにします。しかし、私は でも SDL_Delayでフレームレートを下げたいので、 ポインタの動きが滑らかではありません。 SDL カーソルは の影響を受けていないようですが、アプリケーションのフレームレートは より優れたソリューションであり、そうであれば奇妙なマスクの代わりに画像を使用する方法がありますか?
  • フレームレートを制限する良い方法はありますか?私が実行している間、私はフルスクリーンとウィンドウを切り替えることができますどのよう

答えて

2

スプライトサイズ - リアルタイムのスケーリングや回転を行うには、SDLのようなソフトウェアブリッタではなく、OpenGLを使うのが最適です。 SFMLのような他の図書館がこれを包みます。

フルスクリーン/ウィンドウ - ザックの答えが十分に見えるだけで、SDL_SetVideoModeをもう一度呼び出すだけです。

カーソル移動 - 通常、OSはマウスを基礎となるアプリケーションとは別にレンダリングし、反応しやすいようにします。マウスカーソルを自分でレンダリングしている場合は、ゲームをより速くレンダリングするだけです。私はあなた自身がカーソル(カーソル間の要件に起因する可能性がある)を多用するとは思わない。

フレームレート - 多くの場合、フレーム内のゲーム内の動きや物理を切り離すことを提案しています(例:Fix Your Timestep参照)。また、SDL_Delayは、上限ではなく、待機時間に下限を課すことに注意してください。

サーフェスを色づけする - これは、SDLがこれを直接サポートしていないため、OpenGLで最も効果的です。

+0

上記のOpenGLと言えば、明らかにWindowsのみならDirectXに置き換えることができます。 – Kylotan

3

(アレグロ でdraw_lit_spriteと同じように)表面をTINTEすることができますどのよう

  • ?私はSDL_WM_ToggleFullScreen機能を見つけましたが、SDLの文書によると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はすべて私の知る限りソフトウェアで書かれているので、それはとても遅いです。常に遅いです。

    スプライトを2倍に描画する場合は、すべてを1xサイズのテクスチャに描画してから、すべてを描画した後にそのテクスチャを2倍にスケーリングします。次に、1つのフレームにつき1つのサーフェスを繰り返し処理するのではなく、1つのサーフェスだけを処理します。

    カーソルの問題は、drawing as fast as possible, but only updating your game at a constant rateのように聞こえます。そうすればスムーズなスクロールが可能になりますが、ゲームのプレイはコントロールできなくなります。

    +0

    "スプライトを2倍に描画するには、すべてを1xサイズのテクスチャに描画し、すべてを描画したらそのテクスチャを2倍にスケーリングします。フレームごとに小さなものを繰り返します。 これは実際に私がすでにやっているものです – Giann

    +0

    おっと!さて、私は試しました;) –

    関連する問題