タグ付けされた質問 「sdl」

Simple DirectMedia Layer(SDL)は、オーディオ、キーボード、マウス、ジョイスティック、OpenGLを介した3Dハードウェア、および2Dビデオフレームバッファへの低レベルアクセスを提供するように設計されたクロスプラットフォームマルチメディアライブラリです。

8
OpenGL、SFML、SDLには、ソフトウェアレンダリングと比べてどのような利点がありますか?
フレームワークなどを使用せずにCasey Muratoriがゲームエンジンを作成するHandmade Heroストリームを見始めました。昨日、私は彼が画面に画像が描かれる方法を示した部分に着きました。私が理解した限り、彼は描画したい画面のサイズと同じ大きさのメモリを割り当てました。そして、彼はビットマップを作成し、それを割り当てたバッファメモリに渡し、OS固有の関数を使用して画面に描画しました。 これは非常に簡単です。GameMakerを使用し、Love2Dに変更し、Sprite Kitで少し作業しましたが、この時々混乱するレイヤーの下で実際に何が起こっているのか常に疑問に思っていました。 それを考えると、単にバッファを割り当て、ビットマップを渡して画面に描画するだけでよいのに、なぜグラフィックライブラリ(OpenGL、SFML、SDLなど)を使用する必要があるのでしょうか。 その後、画面に明確なものを描画したい場合は、ビットマップに書き込むだけで、バッファに渡されます。私はプログラミングを始めたばかりですが、これは非常に簡単に思えます。私が間違っている場合は修正してください。

3
マルチプラットフォームマルチスレッド:本当の課題は何ですか?
SDLのようなライブラリは、スレッド化のためのクロスプラットフォームラッパーAPIを提供しますが、これが非常に異なるプラットフォーム(デスクトップ/モバイル)でのゲームの簡単な開発に直接つながると考えるのは単純だと思います。 次の点を考慮して、この方法で開発に取り組む最良の方法は何ですか(クロスプラットフォームスレッドAPIが与えられた場合): 異なる数のコア コアごとに大幅に異なる処理機能 一般的に異なるシステムアーキテクチャ、たとえば。キャッシュ、RAM、およびI / Oアクセスのさまざまなレイテンシ これを行う唯一の方法は、サポートする各デバイスごとに実行できるスレッド数を評価し、最小公分母が何であるかを調べることだと感じています。ただし、これにより、利用可能な処理スループットの合計量に関して、私はまだ暗闇の中に残ります。これを効果的に行う唯一の方法は、開発中、サポートするつもりの最低スペックのモバイルデバイス向けに積極的に開発することだけだと思いますか?-すなわち、最小公分母?これで大体十分でしょうか?それともこれ以上のものがありますか? 編集:私の質問がまだ完全に回答されているとは思わないので、他の人がこれについてさらに経験を提供してください。

2
大規模ゲームの入力管理手法
大規模なゲームで入力を管理するための標準的な手法はありますか。現在、私のプロジェクトでは、すべての入力処理は次のようにゲームループで行われます。 while(SDL_PollEvent(&event)){ switch(event.type){ case SDL_QUIT: exit = 1; break; case SDL_KEYDOWN: switch(event.key.keysym.sym){ case SDLK_c: //do stuff break; } break; case SDL_MOUSEBUTTONDOWN: switch(event.button.button){ case SDL_BUTTON_MIDDLE: //do stuff break; } } break; } (私はSDLを使用していますが、メインプラクティスではライブラリとフレームワークも適用されると考えています)。大規模なプロジェクトでは、これは最善の解決策ではないようです。ユーザーが何を押したかを知りたいオブジェクトがいくつかある場合があるため、それらのオブジェクトが入力を処理する方が理にかなっています。ただし、イベントを取得すると、イベントバッファからプッシュされるため、別のオブジェクトがその入力を受け取らないため、すべてが入力を処理することはできません。これに対抗するために最も一般的に使用される方法は何ですか?
16 c++  sdl  input  standards 

5
1秒あたりのフレーム数を制限する利点は何ですか?(もしあれば)
私はOpenGLでシンプルなゲームに取り組んでおり、ディスプレイの初期化と入力にSDLを使用していますが、タイミングに関しては2つの選択肢があります。最適なTimePerFrame-theTimeTakenToRenderでスリープ状態にある1つ目は、最適なTimePerFrameの秒数= 1 / theFramerateCapです。(vsyncを使用するのと同等であるため、これが必要かどうかは完全にはわかりません。これはより正確かもしれません。私の仮定が正しい場合、SDL + OpenGLがデフォルトでvsyncを持っているかどうかを教えてください。もう1つは、最後のフレームがレンダリングされてからの時間を測定し、それに応じて移動を調整することです。(フレームのレンダリングにかかる​​時間が短いほど、そのフレーム内でのエンティティの移動が少なくなります)。パフォーマンス、およびフリッカーの減少などに関して、これら2つの方法の長所と短所は何ですか?
13 opengl  sdl  frame-rate  vsync 

3
「Dont Starve」ではどのアニメーション手法が使用されていますか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Game Development Stack Exchangeで話題になるようにします。 6年前に閉鎖されました。 開発から離れた個人的な時間にいくつかのゲームをプレイしているときに、サバイバル2D / 3Dサバイバルゲームに出くわしました。ゲームは明らかにSDLとGLUT(Dont starve)で作成されましたが、本当に驚いたのはゲーム内のアニメーションでした。 アニメーションは非常に滑らかで流です。アニメーション中に歪みはありません。手作りのアニメーションで通常起こるのは、ピクセルが削除され、アニメーションがギザギザになり、単純に滑らかにならないことです。それで、どうしてこのような品質のアニメーションを達成できたのかを考えるようになりました。彼らは本当に手作りでしたか(もしそうなら、それは非常に才能のあるアーティストを撮影したに違いありません)、それは骨のアニメーションですか、それとも別のテクニックを使用していますか?
12 animation  sdl  glut 

4
SDLのトラップマウス
ユーザーのマウスをゲーム内にトラップするにはどうすればよいですか?フルスクリーンのゲームではありませんが、ユーザーがマウスを画面外にドラッグできないようにしたいです。 マウスとSDL_WarpCursorの座標を確認してウィンドウ内で(手動で)確認する必要がありますか、それとも自動的な方法がありますか? ありがとうございました。
12 sdl  input  mouse 

2
SDLでデルタ時間を計算する方法は?
SDL_GetPerformanceCounterとSDL_GetPerformanceFrequencyと呼ばれる2つの関数でデルタ時間を計算できると聞きました。完全にどのように機能するかはわかりませんが、SDL_GetTicks()を使用するのと少し似ていると聞きました Uint64 NOW, LAST; double deltaTime = 0; while (somebool) { LAST = SDL_GetPerformanceCounter(); NOW = SDL_GetPerformanceCounter(); LAST = NOW; deltaTime = (NOW - LAST) / (double)SDL_GetPerformanceFrequency(); /**Rendering**/ } 私はこのコードを持っていますが、deltaTimeを出力するか、それを使用しようとすると、常にいくつかの本当にランダムで非常識な数値に等しくなります。これは正しいです?
11 c++  algorithm  sdl 

2
OpenGLの原点を画面の左上に変更する場合、何を心配すればよいですか?
自己啓発のために、私はSDL / OpenGLを使用してC ++で2Dプラットフォーマーエンジンを書いています。最初はsdltutorials.comとlazyfoo.netのチュートリアルを使用して純粋なSDLから始めましたが、現在はSDLを使用してOpenGLレンダリングコンテキストを作成し、OpenGL関数でレンダリングしています(特に即時モードですが、VAO / VBOについて学習しています) )。インターフェイス、オーディオなどにのみSDLを使用しています。 SDLは、画面の左上を原点とし、正のy軸を下に向けた座標系を使用します。OpenGLで正投影を設定してこれをミラーリングするのは簡単です。 テクスチャ座標が0から1までの値を持つ右側のシステムであることを知っています-レンダリングする前にテクスチャを垂直に反転(まあ、ロードする前にファイルを反転)すると、正しくレンダリングされるテクスチャが生成されます...描画している場合は問題ありませんテクスチャ全体ですが、最終的にはタイルセットを使用し、問題を想像できます。 これを行うと、レンダリングに関して何を気にする必要がありますか? 誰かが何かアドバイスをしたり、自分でこれを行って将来の落とし穴を指摘したりできるなら、それは素晴らしいことですが、実際にはどんな考えでもありがたいです。
11 c++  opengl  2d  sdl 

1
複数のサーフェスを一度にブリットするSDL
レベルの背景のスプライトが512x512のチャンクに分割されるプラットフォームゲームを作成しようとしています。一度に3つのチャンクをメモリに保持し、3つすべてを画面に表示するコードを記述しようとしています。ここに私が持っている現在のコードがあります: SDL_Rect where; where.y = -game->camera->y; where.x = -game->camera->x - MAP_WIDTH; SDL_BlitSurface(left_chunk, NULL, screen, &where); where.x = -game->camera->x; SDL_BlitSurface(center_chunk, NULL, screen, &where); where.x = -game->camera->x + MAP_WIDTH; SDL_BlitSurface(right_chunk, NULL, screen, &where); 私が遭遇している問題は、最初にブリットされるチャンクのいずれかが表示される唯一のものであるということです。残りは画面に表示されません。問題はアルファ透明度に関係している可能性があると思いますが、チャンクがまったく重ならない場合でも、問題は解決されません。コードの他の部分では、文字や背景など、一度に複数の項目を画面に表示しますが、それらはすべて正しく表示されます。このコードの特定のセグメントは、この問題が発生している唯一の領域です。 left_chunkを点滅させる行をコメント化すると、次のように変わります。
10 sdl 

1
ターンベースのJRPG戦闘システムアーキテクチャリソース
過去数か月間、SDLライブラリーを使用してC ++で2D JRPG(和風RPG)をプログラミングするのに忙しかった。探索モードは多かれ少なかれ行われます。今はバトルモードに取り組んでいます。 私は、古典的なターンベースのJRPG戦闘システムがどのように構成されているかに関するリソースを見つけることができませんでした。私が見つけるのは、損傷の公式についての議論です。私はグーグルを試し、gamedev.netのメッセージボードを検索し、C ++関連の質問をここでStack Exchangeでクロールしました。また、既存のオープンソースRPGのソースコードを読み取ってみましたが、なんらかのガイドがないと、干し草の山から針を見つけようとするようなものです。 D&Dなどの一連のルールは探していません。私は純粋にコードとオブジェクト構造の設計について話しています。戦闘システムは、メニューを使用してプレイヤーに入力を要求します。次に、ヒーローと敵がアクションを実行するときに、バトルターンが実行されます。 誰かが私を正しい方向に向けることができますか?前もって感謝します。
9 c++  2d  architecture  sdl  rpg 

1
V8がSDLスレッドで実行されないのはなぜですか?
私は自分のゲームに対してV8をコンパイルしてリンクすることができ、コードの解釈はうまくいきました。ただし、コードを分割したいので、ゲームループは1つのスレッドに存在し、スクリプトエンジンはゲームループと一緒に2番目のスレッドで実行する必要があります。私はSDLを使用しているため、このコードを試して新しいスレッドを生成しました SDL_CreateThread(ScriptingEngine::SpawnMain, NULL); ここで、次のコードは私のテストスクリプトエンジンです。 namespace ScriptingEngine { v8::HandleScope handleScope; v8::Handle<v8::ObjectTemplate> global = v8::ObjectTemplate::New(); v8::Persistent<v8::Context> context; void Setup() { // TODO: bind functions to global // ... context = v8::Context::New(NULL, global); } int SpawnMain(void *arguments) { v8::Context::Scope scope(context); v8::Handle<v8::Script> script = v8::Script::Compile( v8::String::New("'Hello World'") ); v8::Handle<v8::Value> result = script->Run(); context.Dispose(); return …

1
スリープを使用して単一スレッドでロジック/更新コードをレンダリング/描画コードから分離する
私は、ゲームオブジェクトの速度はFPSによって妨げられるべきではなく、時間に基づくべきであると読みました。更新/描画コードを分離して、描画速度を制限せずにパフォーマンスを最大化し、時間に基づいて一定のロジック更新速度を提供するにはどうすればよいですか? 私の現在の疑似コードは次のとおりです loop { draw(); if (ticksElapsed() > 100) { update(); ticks+= ticksElapsed(); } } 問題は、描画コードがupdate()レートのパフォーマンスを妨げていることです。また、スリープ状態になると、描画機能とロジック機能の両方が使用できなくなるため、CPUが100%消費されます。 私もSDLを使用していますが、vsyncオプションがないようです。固定および可変時間ステップという用語も聞いたことがありますが、sleep()でそれをどのように行うことができるかわかりません。

2
C ++ / SDLで2Dプラットフォーマーを作成する。チュートリアル/例/リソースを探しています[終了]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、ゲーム開発スタック交換のトピックになるようにします。 昨年休業。 C ++の経験は豊富ですが、ゲームプログラミングの経験はありません。この夏、私は学習体験のためにC ++ / SDLを使用して最初から2Dプラットフォーマーを作成する予定です。私は、始めるのに役立つできるだけ多くのリソースを探しています。良いソースコード、チュートリアル、なんでも。 私が見つけた最高のチュートリアルの1つは、故フロリアンハフスキーによる非アクティブなJump 'n' Run Devチュートリアルです。同様のチュートリアルはありますか?
9 c++  2d  sdl  platformer 

2
OS XでOpenGLとフルスクリーンを処理する方法
私はほとんどの開発をOS Xで行っており、現在のゲームプロジェクトではこれがターゲット環境です。ただし、ゲームをするときはWindowsでプレイします。私はWindowsゲーマーとして、Alt + Tabをゲーム内から最後に開いたアプリケーションに切り替えることに慣れています。 OS XIでは、現在、それをサポートするゲームも、それを可能にする方法も見つけることができません。私の現在のプロジェクトはSDL 1.3に基づいており、cmd + tabはアプリケーションに直接送信され、オペレーティングシステムによってインターセプトされないシーケンスであることがわかります。 今、私の最初の試みは、確かに機能するcmd + tabでレンダリングウィンドウを非表示にすることでしたが、ユーザーがタブでアプリケーションに戻ったときに、SDLの非表示のOpenGLウィンドウを復元できないという欠点があります。まず、そのために発生するイベントがないか、イベントを見つけることができません。次に、アプリケーションウィンドウが非表示になっていると、ゲームがアクティブなアプリケーションのままで、ウィンドウが消えただけであるというコアの問題があります。 それは信じられないほど迷惑です。 alt + tabのWindows / Linuxの動作を概算する方法はありますか?
9 opengl  sdl  macos 

3
PNGをロードするためのSDL関数
私は現在SDL 2.0を学習しており、BMPをロードするためのこの方法を見てきました。 SDL_Texture* LoadImage(std::string file) { SDL_Surface *loadedImage = nullptr; SDL_Texture *texture = nullptr; loadedImage = SDL_LoadBMP(file.c_str()); if (loadedImage != nullptr) { texture = SDL_CreateTextureFromSurface(renderer, loadedImage); SDL_FreeSurface(loadedImage); } else std::cout << SDL_GetError() << std::endl; return texture; } PNGファイルをロードするように切り替えるにはどうすればよいですか? 編集:うーん、PNGをロードする私の方法を追加するのを忘れていました。 SDL_Texture* grass_image = nullptr; grass_image = IMG_LoadTexture(renderer, "res/grass.bmp"); SDL_Rect grass_rect; grass_rect.x …
9 c++  sdl 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.