問題タブ [game-engine]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - Is C still being widely used in game engines?
The title is a bit of a misnomer, what I mean really is "C with classes".
Let me explain, recently I bought the book ShaderX7 which came with a lite (and old) copy of the Unigine engine for one of the articles about shadow mapping techniques.
I was dabbling through the code when I realized that, while the author was using C++ and inheritance and all the C++ goodness, most if not all the method content was essentially C-style code; for example:
I am not saying this is bad, it does the job and that's what matters but I'm more used to C++ style constructs, with std::string, vectors etc... and I make big use of the Boost libraries; so this kind of style come as a bit of a surprise to me.
Is it really better/faster to use this kind of code than to go the generic, OO way ?
Did I fall into the "too much abstraction" trap ?
Edit: corrected method name to make it clear what it is doing.
oop - コンポーネント ベースのゲーム エンジン設計におけるイベント処理
この質問またはそのバリエーションがたくさん出回っていると思うので、私が言っていることが重複していて、答えが他の場所にある場合は、お知らせください.
私はゲーム エンジンの設計を研究しており、コンポーネント ベースのエンティティ モデルに出会いました。有望に聞こえますが、私はまだその実装に取り組んでいます。
エンジンがいくつかの「サブシステム」で構成され、レンダリング、サウンド、ヘルス、AI などの側面を管理するシステムを検討しています。各サブシステムには、ヘルスのヘルス コンポーネントのようなコンポーネント タイプが関連付けられています。サブシステム。NPC、ドア、何らかの視覚効果、プレイヤーなどの「エンティティ」は、1 つまたは複数のコンポーネントで構成されており、それらを組み合わせることでエンティティにその機能を提供します。
情報伝達の 4 つの主なチャネルを特定しました。コンポーネントは現在のエンティティ内のすべてのコンポーネントにブロードキャストでき、コンポーネントはそのサブシステムにブロードキャストでき、サブシステムはそのコンポーネントにブロードキャストでき、サブシステムは他のサブシステムにブロードキャストできます。
たとえば、ユーザーがキャラクターを動かしたい場合は、キーを押します。このキーの押下は、入力サブシステムによって取得され、イベントがブロードキャストされ、プレーヤー サブシステムによって取得されます。次に、プレーヤー サブシステムは、このイベントをすべてのプレーヤー コンポーネント (およびそれらのコンポーネントが構成するエンティティ) に送信します。これらのプレーヤー コンポーネントは、独自のエンティティの位置コンポーネントと通信して先に進み、移動します。
キーを押すためのこれらすべては少し複雑に思えますが、私は確かにこのアーキテクチャの改善にオープンです。とにかく、私の主な質問はまだ続きます。
イベント自体については、訪問者パターンのようにイベントがどこで振る舞うかを考えました。私が望んでいることの重要性は、イベントがサポートしていないコンポーネントに遭遇した場合 (移動イベントは AI や健康とは直接関係がないため)、そのコンポーネントを無視することです。イベントが後を追っているコンポーネントを見つけられなくても、それは問題ではありません。
訪問者パターンはほぼ機能します。ただし、コンポーネントのすべてのタイプ (つまり、visitHealthComponent、visitPositionComponent など) に関係がない場合でも、仮想関数が必要になります。これらの関数を空のままにしておくこともできます (そのため、これらのコンポーネントに遭遇した場合は無視されます) が、コンポーネントを追加するたびに別の関数を追加する必要があります。
私の希望は、必ずしも他の場所に何かを追加することなくコンポーネントを追加し、他のものを台無しにすることなくイベントを追加できることでした.
だから、私の2つの質問:
- 効率や柔軟性などの点で、私の設計で可能な改善点はありますか?
- イベントを処理する最適な方法は何でしょうか?
3d - クオンツとは何ですか?
私は gamestudio A8 で実験していますが、3D の世界で使用される単位は quant です。
私の質問はです。メートルは何クオンツ?
スケッチアップでいくつかのモデルを作成したいのですが、そこでメーターを使用しています。モデルをmdlに変換できます。
問題は。オブジェクトをアニメーション化および移動する場合。1 メートルにいくつのクオンツがあるかを知る必要があります。
また、サイズをインターネットの他のモデルと一致させたい.
android - AndEngine & SurfaceView (CameraPreview)
AndEngine (Physics Example) の BaseGameActivity の背景としてカメラ プレビューを表示する SurfaceView を追加するにはどうすればよいですか。
c# - XNA での TileMap のクリーンな例が必要
数人の友人と私は、昨年から週に 1 回、XNA RPG に取り組んでいます。私たちの戦闘エンジンは基本的に完成しており、現在はオーバーワールドの探索に取り組んでいます。
この方法で動作する大まかな Tile および TileMap オブジェクトを既に作成しました。
- リスト内のタイル (Texture2D) オブジェクトを表す整数値の単純な 2D 配列
- For ループを使用して、正確に画面のサイズである TileMap をレンダリングする
問題は、このような機能を実現するためにこれをどのように変更できるかです。
- 画面よりも大きなマップを作成する
- TileMap をスムーズにスクロールし、必要なものだけを描画します (例: ビューポートを表示)
脚注: 私はスクロールを機能させようとしてきましたが、それを達成するために間違ったアプローチを使用していた可能性があります (つまり、滑らかなスクロールの外観を実現するためにタイルのセクションをレンダリングする)。ただし、これはうまく機能しませんでした。基本的に TileMap のビューポートを描画するものを見つけることができれば素晴らしいことです。
また、追加のリンクや外部ソースも大歓迎です。疑似コードの例のアイデアでさえ、非常に役立ちます。
iphone - iPhone/Android向けゲームエンジン
iphone と android のクロス プラットフォーム ゲーム エンジンを実行することは可能ですか。どうすればこれを行うことができますか。私はこれを行うために勉強する必要があると考えています。
c++ - C++ コンソール ゲーム入力 && リフレッシュ機能
私は小さなコンソール アドベンチャー ゲームを書いていますが、いくつかの問題に直面しました。
1. 入力がちょっと遅いです。while ループ ( while(getch() == 'w') ) を使用しています。最初にキーを押した後は何も起こりません (キーを 2 回押す必要があります)。方向を切り替えても (キー A/D/S を押します)、最初は反応しません。キーを持っていれば問題なく動作します。これはどのように修正できますか?
2.ゲームをリフレッシュするために使用する関数は次のとおりです(キーが押されたときにゲームシーンをレンダリングします):
この機能を一度使用すると問題ありませんが、キーを複数回押したり押したりすると、ゲームフィールドが点滅し始めます。フィールド全体ではなく、フィールドの一部 (変更が行われた場所/移動が行われた場所) のみを再描画する必要があると考えました。それを行う方法について何かアイデアを提供できますか?
入力のサンプル コード:
基本的に、メイン関数は次のようになります。
actionscript-3 - AS3で継承せずに、複数のクラスに追加機能をどのように提供しますか?
私はActionScriptでゲームを書いています。そこでは、ショットで「ヒット可能」であるはずの複数のクラスがあります。
他のすべてのゲーム内エンティティが継承する最も一般的なクラスはCombatObjectです。CombatShip、CombatAsteroid、その他のさまざまなクラスがそれを継承しています。CombatAiクラスとCombatPlayerクラスはどちらもCombatShipから継承しています。
ここで、CombatAi、CombatPlayer、およびCombatAsteroidをショットでヒット可能にしたいのですが、それらに継承させたくありません(後で、ヒットできないはずのCombatShipがある可能性があります)。
私のアイデアは、これら3つにインターフェイスIHitableを実装して、ショットと衝突したときにif(hitObject is IHitable)
、ショットを破壊してダメージを与えるように依頼できるようにすることでした。
さて、問題は、これらのクラスのそれぞれを持つことが最善でしょうか?
- ダメージを受けるために必要なすべてのコードを実装する(シールドのチェック、ダメージ率の計算など)
- それらすべてにクラスのインスタンスを所有させ、すべての損傷関連機能を処理するクラスを返す
DamageManager
関数を実装しますgetDamageManager():DamageManager
- (2.)の欠点の1つは、各CombatShip、CombatAsteroidなどがDamageManagerのインスタンスを所有している必要があることです。DamageManagerをシングルトンにして、船とそれに与えられたショットへの参照を持ち、残りを処理させる方がおそらくさらに良いでしょうか?
c++ - Android 用の C++ レンダリングまたはゲーム エンジン。
私は Android アプリケーションを開発しています。レンダリング エンジンを使用して、Blend で作成したオブジェクトを表示する必要があります。
モデルを表示するための C++ ゲーム エンジンまたはレンダリング エンジンがあるかどうか疑問に思っています。
誰かいますか?
ありがとう。
c++ - ゲーム内のエンティティの処理
小さな演習として、エンティティ(移動、基本的なAIなど)を処理するだけの非常に小さくてシンプルなゲームエンジンを作成しようとしています。
そのため、ゲームがすべてのエンティティの更新をどのように処理するかを考えようとしていますが、少し混乱しています(おそらく間違った方法で行っているためです)
そこで、この質問をここに投稿して、私の現在の考え方を示し、誰かが私にそれを行うためのより良い方法を提案できるかどうかを確認することにしました。
現在、必要な他のクラス(CWindowクラス、CEntityManagerクラスなど)へのポインターを受け取るCEngineクラスがあります。
擬似コードでは次のようなゲームループがあります(CEngineクラス内)
私のCEntityManagerクラスは次のようになりました。
そして、私のCEntityクラスは次のようになりました。
その後、例えば敵のクラスを作成し、それにスプライトシートや独自の機能などを与えます。
例えば:
これらはすべて、画面にスプライトを描画するだけで問題なく機能しました。
しかし、あるエンティティには存在するが別のエンティティには存在しない関数を使用するという問題に直面しました。
上記の擬似コードの例では、do_ai_stuff(); およびhandle_input();
私のゲームループからわかるように、EntityManager-> draw();への呼び出しがあります。これはentityVectorを繰り返し処理し、draw()を呼び出しました。各エンティティの関数-すべてのエンティティにdraw()があるため、これは問題なく機能しました。働き。
しかし、入力を処理する必要があるのがプレーヤーエンティティである場合はどうなるでしょうか?それはどのように機能しますか?
試したことはありませんが、敵のようなエンティティにはhandle_input()関数がないため、draw()関数のようにループすることはできないと思います。
次のように、ifステートメントを使用してentityTypeをチェックできます。
しかし、私は人々が通常どのようにこのようなものを書くのかわからないので、それを行うための最良の方法がわかりません。
私はここにたくさん書いたが、具体的な質問はしなかったので、ここで探しているものを明確にします。
- コードのレイアウト/設計方法は問題ありませんか?それは実用的ですか?
- 自分のエンティティを更新し、他のエンティティにはない関数を呼び出すためのより効率的な方法はありますか?
- 列挙型を使用してエンティティタイプを追跡することは、エンティティを識別するための良い方法ですか?