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

シンプルで高速なマルチメディアライブラリ-グラフィック、入力、オーディオなどへのアクセスを提供する無料のポータブルAPI

9
ゲームのすべての画像を1つのファイルに配置するにはどうすればよいですか?
C ++ SFMLで書かれた基本的なRPGゲームを完成させたばかりで、ゲームに多大な労力を注ぎ、配布したいと考えていますが、小さな問題に遭遇しました。 問題は、実行可能ファイルと同じフォルダー内にすべての200個を超える画像とマップファイル(マップコードを保持する.txtファイル)があり、フォルダーを見ると少し泣きたい非常に多くのリソースがあるので、すべてのリソースを直接表示するゲームを見たことはありません。代わりに、特定のファイルにリソースを詰め込んでいると思います。 まあ、それは私が達成しようとしていることです:すべての画像を1つのファイル(おそらく.txtファイルかもしれません)に詰めて、そのファイルから読み取るか簡単に追加できるようにしたいと思っています。
67 c++  assets  sfml  spritesheet 

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

1
高速で正確な2Dコリジョン
私は2Dトップダウンシューティングゲームに取り組んでおり、今では基本的な四角形の境界ボックス衝突システムを超える必要があります。 私は多くの異なるスプライトを持つ大きなレベルを持っています。それらはすべて異なる形状とサイズです。スプライトのテクスチャはすべて透明な背景を持つ正方形のpngファイルであるため、プレーヤーが透明な背景ではなくテクスチャの色付き部分に進入したときにのみ衝突する方法も必要です。 次のように衝突を処理する予定です。 プレーヤーの範囲内にスプライトがあるかどうかを確認します 四角形の境界ボックスの衝突テストを行う 正確な衝突を行う(助けが必要な場合) 私はすべての要件を念頭に置いてこれを正しくしたいので、高度な技術は気にしませんが、これにどのようにアプローチするのかわかりません。どんなテクニック、さらにはライブラリも試してみてください。私はおそらく、各スプライトから透明な背景を差し引いたものを正確に表す何らかの種類の形状を作成して保存する必要があることを知っています。 私はピクセルごとに遅いことを読んだので、私の大きなレベルとオブジェクトの数を考えると、私はそれが適切だとは思わない。Box2dも調べましたが、多くのドキュメントや、SFMLでそれを実行する方法の例を見つけることができませんでした。

3
ゲームコンテンツの保存にデータベースを使用する必要がありますか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Game Development Stack Exchangeで話題になるようにします。 4年前に閉鎖されました。 SFMLを使用してC ++で記述された2Dゲームがあります。ファイルまたはデータベースに行/エントリ/行を追加することで、アイテムやエンティティなどのコンテンツを簡単に追加できるように、ゲームを拡張可能にしたいと考えています。 プログラムにコンパイルする必要はないが、実行時に読み書きできるものを探しています。データベースを使用するのが適切な場合
16 c++  sfml  databases 


5
Pythonパフォーマンスvsゲームメーカー[終了]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Game Development Stack Exchangeで話題になるようにします。 6年前に閉鎖されました。 私はもともと、PythonとSFMLでゲームを作成することを考えていました。PythonはC ++と比較して遅いことを理解していますが、ゲームメーカーと比較してどうですか? 私が尋ねる主な理由は、最近、コンピューターでかなり悪いフレームレートで実行されたGame Makerゲーム(The Iconoclasts)をプレイしたことです(GMA 950)。Python / SFMLでも同様のパフォーマンスの問題があるのではないかと心配しています。

2
Time.deltaTimeを使用しているにもかかわらず、動きはフレームレートに依存しているように見える
Unityでゲームオブジェクトを移動するために必要な変換を計算する次のコードがありますLateUpdate。これはで呼び出されます。私が理解していることから、私の使用はTime.deltaTime最終的な翻訳フレームレートを独立させるべきCollisionDetection.Move()です(ただレイキャストを実行することに注意してください)。 public IMovementModel Move(IMovementModel model) { this.model = model; targetSpeed = (model.HorizontalInput + model.VerticalInput) * model.Speed; model.CurrentSpeed = accelerateSpeed(model.CurrentSpeed, targetSpeed, model.Accel); if (model.IsJumping) { model.AmountToMove = new Vector3(model.AmountToMove.x, model.AmountToMove.y); } else if (CollisionDetection.OnGround) { model.AmountToMove = new Vector3(model.AmountToMove.x, 0); } model.FlipAnim = flipAnimation(targetSpeed); // If we're ignoring gravity, then just …

2
私の膨大な数の画像のために、またはそれにもかかわらず、スプライトシートを使用する必要がありますか?
2Dゲームを開発していますが、たくさんのスプライトがあります。3Dアニメーションとモデルを使用して2Dにレンダリングし、「フォールアウト」または「ディアブロ」に見えるようにしました。また、手で描くよりも簡単です(笑)。 私はすでにフレームレートを15fpsに削減しなければなりませんでした。これは、フレームをぎこちなくすることなく下げることができる最低のフレームレートでした。しかし、24フレームが非常に滑らかに見えたために悲しかったです。 これを行った理由は2つあります。 1)HDDスペースを削減します。画像が少ないほど、ゲーム全体が小さくなります。 2)RAMの消費を削減します。ロードする画像が少ないほど、RAMの制限を膨らませる問題を回避できる可能性が高くなります。 ただし、HDDスペースとRAMの両方でイメージを圧縮する方法があれば、それを行います。以前にテストしたことがありますが、ほとんどの場合、RGBA8888からRGBA5555に変換しても品質に変化はなく、TexturePackerプログラムでRGBA4444に変換してもほとんど影響を受けません。SFMLは、.PNGイメージのタイプに関係なく、同じ量のメモリを使用するように見えるため、現在これを行いません。異なる方法でロードする方法を調査しましたが、このテーマについては何も見つかりませんでした。 2Dビデオゲームの処理方法について多くの記事を読みました。コンセンサスは圧倒的です。優れたパフォーマンスのために、スプライトをより大きなテクスチャに詰め込みます!そこで、TexturePackerを使用して、小さなスプライトを非常に大きなスプライトシートにパックします。 ただし、キャラクターごとに10〜15のアニメーション、5つの移動方向、およびアニメーションごとに15〜40のフレーム(おそらく平均24)を用意する予定です。15アニメーション、5方向、およびアニメーションあたり平均24フレーム。つまり、1文字あたり1800個の個別フレームです。スプライトシートにパックされている場合、代わりに75個の画像のみです。(アニメーションごと、方向ごとに1つのスプライトシート。15* 5) ゲーム内の1人の巨大なボスキャラクターの場合、スプライトシートを使用できず、一度に1つのイメージを単純に読み込む方法をプログラムする必要があります。パフォーマンスのためにこれを行うことができるかどうかはまだわかりません。 キャラクターについては、すでにスプライトシートにパックしています。1人のキャラクターが歩き回る場合、これはほとんどの場合うまくいくようですが、時々失速します。ただし、そのキャラクターのすべてのテクスチャをプリロードするのではなく、テクスチャをスワップアウトする悪い考えのコードに起因します。 テクスチャをプリロードする場合、スプライトシートには意味があります。各キャラクターに1800個の小さな画像をプリロードするのは悪い考えだと想像するだけです。 ただし、一度に1つずつメモリにストリーミングしたり、メモリからストリーミングしたりするのは非常に高速であるため、一度に1つの画像をメモリに保存するだけで済みます。これは、特定の瞬間に各キャラクターが45 + MBではなく数KBしか消費しないという意味ではないでしょうか? ストリーミングは信じられないほど高速(1秒間にメモリとレンダリングに出入りする15枚の画像)が必要であり、画像は非常に小さいものの、キャラクタースプライトシートをロードすることをお勧めします。代わりにメモリに。しかし、とにかく大きなボスキャラクターのために、単一画像ストリームのようなレンダリングシステムをコーディングする必要があります。 私は実験してきましたが、単純なプロセスではありません。特に、現在グラフィックスを処理していないゲームエンジンの他の部分に取り組んでいるという事実を考えると。

1
クラス間のデータと依存関係をきれいにエレガントに処理する方法
私はSFML 2の2Dトップダウンゲームに取り組んでおり、すべてがうまく機能し、調和するエレガントな方法を見つける必要があります。 説明させてください。drawメソッドとupdateメソッドをすべてのクラスに提供する抽象ベースから継承するクラスがいくつかあります。 ゲームループでは、updateを呼び出してから各クラスを描画します。これは非常に一般的なアプローチだと思います。タイル、コリジョン、プレーヤー、およびすべてのタイル/画像/テクスチャを含むリソースマネージャーのクラスがあります。SFMLでの入力の動作方法のため、各クラスで(必要に応じて)更新呼び出しで入力を処理することにしました。 これまで、必要に応じて依存関係を渡してきました。たとえば、移動キーが押されたときのプレーヤークラスで、衝突クラスのメソッドを呼び出して、プレーヤーが移動したい位置が衝突かどうかを確認します。衝突がない場合にのみプレーヤーを移動します。 これはほとんどの部分でうまく機能しますが、もっと良くできると信じています。どうすればいいのかわかりません。 実装する必要のあるより複雑なものがあります。例えば、プレーヤーは地面のオブジェクトに近づき、キーを押してそれを拾い上げたり、それをインベントリに表示することができます。これは、いくつかのことを行う必要があることを意味します。 プレイヤーがキーを押すとルート可能なアイテムの範囲内にあるかどうかを確認し、そうでない場合は先に進まないでください。 アイテムを見つけます。 アイテムのスプライトテクスチャをデフォルトのテクスチャから「looted」テクスチャに更新します。 アイテムの衝突を更新します。形状が変更されたか、完全に削除された可能性があります。 追加されたアイテムでインベントリを更新する必要があります。 すべてを通信させるにはどうすればよいですか?現在のシステムでは、クラスがスコープ外になり、メソッド呼び出しが至る所で行われます。1つの大きなマネージャーですべてのクラスを結び付けて、それぞれに親マネージャークラスへの参照を与えることができますが、これはほんの少しだけ良いようです。 どんなヘルプ/アドバイスも大歓迎です!不明な点がある場合は、詳しく説明させていただきます。
12 c++  2d  architecture  sfml 

4
ターンベース、距離ベースの戦略ゲームで可能な動きの範囲を決定する方法は?
私はc ++とSFML-2.0を使用して、2次元のターンベースの戦略ゲームを作成しています。移動はグリッドベースではなく距離ベースであり、いくつかの異なる三角形のピースが所定のターンで所定の位置で回転するか、前方に移動します。 動きは、プレイヤーが駒を移動する場所を選択するように機能します。これにより、駒が進む可能性のあるパスが生成されます。プレーヤーが決定を確認すると、ピースはそのパスに沿って目的の場所に移動します。パスは次の2つの要素によって制限されます。距離、曲がり角を考慮して、ピースが移動できる距離です(カーブがある場合、ポイントからポイントに直接ではなく、カーブに沿った長さになります)。ステアリングアングル、ピースが移動中に任意のポイント(およびすべてのポイント)で回転できる距離(たとえば、-30から30度)。 私の質問は、ピースを移動させるためにプレーヤーが選択できる潜在的な場所の範囲をどのように決定すればよいですか? ここで使用する方程式やアルゴリズムは完全にはわかりません。私の最初の計画は非常に複雑で、実装することはほぼ不可能であり、説明は言うまでもありませんでした。この時点で、プロジェクトが停滞して完全に迷っています。 回転半径を考慮して、ユニットが移動できる範囲をどのように決定できますか? たとえば、次の画像では。赤、青、緑の線はすべて同じ長さになります。紫色の円は、ユニットが移動できる移動範囲を示します。(形状はおそらく不正確であり、ラインはおそらく実際には同じ長さではありませんが、あなたはアイデアを得るでしょう)

5
マルチプレイヤーゲームを作成するために、高価なサーバーと豪華なホスティングが必要ですか?
私はRPGの作業を終了しましたが、マルチプレイヤーにするのはもっと楽しいようです。SFMLにはネットワーキング機能があります。それは可能だと思ったのですが、私の人生の中で、ネットワーキングに関する基本的なことすら試したことはありません。実際、私の知識は非常に限られています。 リソース単位でマルチプレイヤーゲームを作成するには何が必要ですか?私はMMOについて話しているのではなく、協力型のゲームのようなものです。ホスティングとサーバー、そしてそれを作るために多くの多くのことを支払うのにたくさんの現金が必要ですか?
11 c++  multiplayer  sfml 

4
衝突長方形の応答
移動可能な長方形を複数の長方形と衝突させるのに問題があります。 私はSFMLを使用していて、intersects2つの四角形を取り、その交差部分を返すという便利な関数があります。移動可能な四角形を衝突させたい四角形でいっぱいのベクトルがあります。私は次のコードを使用してこれをループしています(pは移動可能な四角形です)。 IsCollidingWithブール値を返しますがintersects、交点を計算するためにSFMLも使用します。 while(unsigned i = 0; i!= testRects.size(); i++){ if(p.IsCollidingWith(testRects[i]){ p.Collide(testRects[i]); } } そして実際のCollide()コード: void gameObj::collide( gameObj collidingObject ){ printf("%f %f\n", this->colliderResult.width, this->colliderResult.height); if (this->colliderResult.width < this->colliderResult.height) { // collided on X if (this->getCollider().left < collidingObject.getCollider().left ) { this->move( -this->colliderResult.width , 0); }else { this->move( this->colliderResult.width, 0 ); } …


1
R9 380 GPUのフラグメントシェーダーで画面がちらつく
私のゲームで2人のプレーヤーがフラグメントシェーダーを使用すると画面がちらつくという問題が発生していますが、これはR9 380 GPUを使用するプレーヤーでのみ発生しているようです。これは、ゲームでは次のようになります。 プレーヤーの1つを操作した後、シェーダーを使用するように絞り込みましたが、呼び出し元のコードで適切に行われていない可能性があります。シェーダーは次のようになります(まだGLSLを学習しています)。 uniform sampler2D lightTexture; uniform sampler2D targetTexture; uniform sampler2D backgroundTexture; uniform vec2 tileSize; vec3 SaturationBrightness(vec3 color, float brt, float sat) { // Increase or decrease theese values to adjust r, g and b color channels seperately const float AvgLumR = 0.5; const float AvgLumG = 0.5; const …
8 c++  2d  glsl  sfml 

1
glCreateShaderがセグメンテーション違反を引き起こす
sfmlでシェーダーを使用しようとすると、シェーダーを作成できません。関数glCreateShader(GL_VERTEX_SHADER); セグメンテーション違反が発生します。最初にグーグルで調べたところ、プログラムがopenglコンテキストを持っていない場合にそうなることがわかりました。私は最初にSDLを試しましたが、不十分なドキュメントと「ヘッダーを見て何をすべきかを知る」ことでsfmlに行きました セグメント障害の原因となるコードは次のとおりです sf::Window App(sf::VideoMode(800, 600, 32), "SFML OpenGL"); // Set color and depth clear value glClearDepth(1.f); glClearColor(0.f, 0.f, 0.f, 0.f); // Enable Z-buffer read and write glEnable(GL_DEPTH_TEST); glDepthMask(GL_TRUE); // Setup a perspective projection glMatrixMode(GL_PROJECTION); glLoadIdentity(); GLuint vertShader = glCreateShader(GL_VERTEX_SHADER); //... gcc linuxでopengl 2.1を使用して、glew、gl.h、sfml-window、sfml-systemを含めています。 何が欠けている?
8 opengl  sfml 

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