質問

SDL で小さな RTS ゲームを始めているのですが、いくつか質問があります:

  • 私は小さなスプライトを使用していますが、スキャンラインを使用して画面X2を表示する方法はありますか?ロトゾームでズームしてみましたが、ゲームが遅くなり、手でスプライトをスケーリングすることを避けたいと思います。
  • 実行中にフルスクリーンとウィンドウを切り替えるにはどうすればよいですか?私が見つけたのは、SDL_WM_ToggleFullScreen 機能しますが、SDL DocによるとWindowsでは機能していないようです。
  • 独自のカーソルを置くために、私はスプライトをポインターにロードし、マウスをたどるようにします。しかし、私はまた、フレームレートを下げたいと思いますSDL_Delay そうすることで、ポインターの動きが滑らかになりません。SDLカーソルは、アプリケーションのフレームレートの影響を受けていないようには見えませんでした。それはそれを使用する方が良いソリューションであり、もしそうなら、奇妙なマスクの代わりに写真を使用する方法はありますか?
  • フレームレートを制限するより良い方法はありますか?
  • サーフェスに色を付けるにはどうすればよいですか (例: draw_lit_sprite アレグロで)
役に立ちましたか?

解決

スプライト サイズ - あらゆる種類のリアルタイムのスケーリングや回転には、SDL のようなソフトウェア ブリッターではなく OpenGL を使用するのが最適です。他のライブラリなど SFML これで終わります。

フルスクリーン/ウィンドウ - Zack の答えは十分に良さそうです。SDL_SetVideoMode をもう一度呼び出すだけです。

カーソルの動き - 通常、OS はマウスの応答性を維持するために、基礎となるアプリケーションとは別にマウスをレンダリングします。マウス カーソルを自分でレンダリングしている場合、唯一の手段はゲームをより速くレンダリングすることです。ただし、カーソル自体についてはあまり選択肢がないと思います (おそらくクロスプラットフォームの要件のため)。

フレームレート - ゲーム内の動きと物理をフレームレートから切り離すことを多くの人が提案しています (例:見る 'タイムステップを修正する')。また、SDL_Delay は待機時間に上限ではなく下限を課すことに注意してください。

サーフェスの色付け - 繰り返しますが、SDL はこれを直接サポートしていないため、これは OpenGL で実行するのが最適です。

他のヒント

実行中に全画面表示とウィンドウ表示を切り替えるにはどうすればよいですか?私が見つけたのは、 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を表示する方法はありますか?ロトゾームでズームしてみましたが、ゲームが遅くなり、手でスプライトをスケーリングすることを避けたいと思います。

  • サーフェスに色を付けるにはどうすればよいですか (例: draw_lit_sprite アレグロで)

SDL で OpenGL モードを使用することをほぼ推奨します。ハードウェア アクセラレーションを利用して、このようなことを自由に実行できるようになります。 rotozoom (私の知る限りでは)すべてソフトウェアで行われており、それが非常に遅い理由です。いつも遅くなるよ。

2x でスプライトを描画する場合のもう 1 つのオプションは、すべてを 1x サイズのテクスチャに描画し、すべてを描画した後でそのテクスチャを 2x にスケールすることです。そうすれば、フレームごとに多数の小さなサーフェスを何度も処理するのではなく、単一のサーフェスのみを処理することになります。

カーソルの問題に関しては、次のようにしたいと思われるかもしれません。 可能な限り高速に描画しますが、ゲームは一定の速度でのみ更新されます. 。そうすれば、スムーズなスクロールが得られますが、ゲームプレイが制御不能になることはありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top