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

コードの構造。ゲームエンジンの内部設計に関する質問。

1
物理学とゲームロジックをUIコードから分離する
私は単純なブロックベースのパズルゲームに取り組んでいます。 ゲームプレイは、ゲームエリア内を移動するブロックで構成されているため、簡単な物理シミュレーションです。しかし、私の実装では、理想とはほど遠いものであり、より良い方法についての指針を教えていただけませんか。 多くのパズルゲームで行ったように、ゲームロジックとUIの2つの領域にコードを分割しました。 ゲームロジックは、ゲームの一般的なルール(チェスの正式なルールシステムなど)を担当します。 UIはゲーム領域とピース(チェス盤やピースなど)を表示し、アニメーション(チェスの駒のアニメーションの動きなど)を担当します。 ゲームロジックは、ゲームの状態を論理グリッドとして表します。各ユニットは、グリッド上の1つのセルの幅/高さです。したがって、幅6のグリッドの場合、幅2のブロックを境界と衝突するまで4回移動できます。 UIはこのグリッドを取得し、論理サイズをピクセルサイズに変換して描画します(つまり、定数を乗算します)。ただし、ゲームにはゲームロジックがほとんどないため、ゲームロジックレイヤー[1]は、衝突検出以外にはあまり関係がありません。仕組みは次のとおりです。 プレイヤーがピースをドラッグし始めます UIは、ゲームロジックにそのピースの正当な移動領域を要求し、プレイヤーがその領域内でそれをドラッグできるようにします プレイヤーは駒を手放す UIはピースをグリッドにスナップします(そのため、有効な論理位置に配置されます) UIはゲームロジックに新しい論理的位置を伝えます(ミューテーターメソッドを使用します。 私はそれに満足していません: ゲームロジックレイヤーのユニットテストを作成していますが、UIは作成していません。UIにはトリッキーなコードがすべて含まれていることがわかりました。ピースが他の人や境界と衝突してグリッドにスナップするのを止めます。 UIがゲームロジックに新しい状態を通知するという事実が気に入らないのでmovePieceLeft()、他のゲームのようにメソッドまたはそのようなものを呼び出すようにしたいのですが、そのアプローチにはあまり向いていません。ゲームロジックは、UIで可能なドラッグとスナップについて何も知りません。 最善の方法は、ゲームロジックレイヤーを取り除き、代わりに物理レイヤーを実装することだと思います。それに関していくつか質問があります。 このような物理層は一般的ですか、それともゲームロジック層にこれを行わせるのがより一般的ですか? グリッドへのスナップおよびピースのドラッグコードは、UIまたは物理レイヤーに属しますか? そのような物理層は、通常、ピクセルサイズまたはゲームロジック層のような何らかの論理ユニットで動作しますか? ゲームのコードベースでイベントベースの衝突検出を見たことがあります。つまり、プレーヤーがピースをドラッグするだけで、UIがそれを素直にレンダリングして物理システムに通知し、物理システムがonCollision()メソッドを呼び出します。衝突が検出されると作品に。もっと一般的なものは何ですか?このアプローチまたは最初に法的運動領域を求めていますか? [1] レイヤーはおそらく私が言っていることの正しい言葉ではありませんが、サブシステムは誇張されており、各レイヤーは複数のクラスで構成されているため、クラスは誤解しています。

2
小さなゲーム開発チームにとって効果的な戦略は何ですか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 8年前に閉鎖されました。 中級から上級開発者の小さなゲーム開発チームの言語/プラットフォームに依存しないベストプラクティスとは何ですか? 高レベルの戦略(および、優れたROIを提供する可能性のあるフレームワーク、エンジン、またはIDEに関する提案)を歓迎します。

9
GUI要素についてはどうすればいいですか?
注:独自のGUIシステムを作成する予定です。学習に便利で、軽量で、必要なビットのみがあり、ゲームと関係があります。 私はそれを行う方法を考えていました。私が意味する要素は次のとおりです。 ラジオボタン ここにテキストを入力してください ボタン スライダー チェックボックス 私はまだそれらを作る方法を探していません。しかし、彼らがどのように行くかについての詳細。 考え ものを必要とするそれぞれの状態があるので、ほとんどすべてに要素のコンテナがあります。各要素はGUIピースです。 これらにはそれぞれ、位置、グラフィックなどがあります。 私がもっと行き詰まっているのは、それらのロジックです。 そのための私の考えは、モジュール性とシンプルさを可能にするために、MainMenuStartButtonを避けることでした。OptionsOneBackButtonなど。代わりにSlider Slider1を実行できます。またはボタン開始;。 代わりに、Gui :: StartButtonClickやGUI :: ColourSliderHoverなどのGUI名前空間の関数へのboost :: functionがあります。 私はこれが非常に遅いかどうか疑問に思っていました。 さらに言えば、ゲーム用のGUIを実行する簡単で簡単な方法はありますか?Qt、wxWidgetsなどはありません。
12 c++  architecture  gui 

6
戦略ゲームの背後にサウンドトラックを配置する必要がありますか?音楽とサウンドが必要なゲーム
シャッフルカードとインパクトノイズはクールです(カードベースのゲームです)が、バックグラウンドミュージックの接続に時間/労力をかける必要がありますか?オンラインまたは同様のコードを使用してローカルMP3を再生できる場合、DIにフックできるC#を使用したスト​​リームからPlay Audioを見つけましたが、努力する価値はありますか?どのゲームジャンルがそれを必要とし、どのゲームがそれを必要としませんか?それなしでリリースし、.5機能として追加しますか?

1
堅牢なアイテムシステムの作成
私の目的は、次のようなものを処理できる、可能な限り一般的なアイテムシステムを作成することです。 アップグレード可能なアイテム(+6カタナ) ステータス修飾子(+15器用さ) アイテムモディファイア(Yダメージを与える確率%X、フリーズする確率) 充電アイテム(30回使用の魔法使い) セットアイテム(4セットのXセットを装備してY機能を有効化) レアリティ(共通、ユニーク、伝説) 劣化(一部のクラフト材料に分割) 製作可能(特定の材料で製作可能) 消耗品(5%%X攻撃力、回復+15 hp) ※以下の設定で太字になっている機能は解決できました。 今、私は私が考えていることを反映するために多くのオプションを追加しようとしました。必要な機能をすべて追加するつもりはありませんが、必要に応じて実装できるようにしたいと考えています。これらは、在庫システムおよびデータのシリアル化とも互換性がある必要があります。 私は継承をまったく使用せず、エンティティコンポーネント/データ主導のアプローチを使用することを計画しています。最初は、次のようなシステムについて考えました。 BaseStat:外出先で統計を保持する汎用クラス(アイテムとキャラクターの統計にも使用できます) 項目:リスト、名前、項目タイプ、およびui、actionName、説明などに関連するものなどのデータを保持するクラス。 IWeapon:武器のインターフェース。すべての武器には、IWeaponが実装された独自のクラスがあります。これには、Attackとキャラクター統計への参照があります。武器が装備されている場合、そのデータ(アイテムクラスのstat)がキャラクターstatに挿入されます(BaseStatが何であれ、それはStatボーナスとしてキャラクタークラスに追加されます)したがって、たとえば、剣( jsonを使用してアイテムクラスを作成する)ため、剣はキャラクターのステータスに5攻撃を追加します したがって、BaseStatは( "Attack"、5)になります(enumも使用できます)。このステータスは、装備するとBonusStat(別のクラスになる)としてキャラクターの "攻撃"ステータスに追加されます。したがって、SwordはIWeaponを実装するという名前のクラスが作成されます。アイテムクラスが作成されます。そのため、この剣にキャラクターのステータスを挿入し、攻撃するときに、キャラクターのステータスから合計の攻撃ステータスを取得し、攻撃方法でダメージを与えることができます。 BonusStat:BaseStatに触れずに統計をボーナスとして追加する方法です。 IConsumable:IWeaponと同じロジック。直接統計の追加はかなり簡単(+15 hp)ですが、この設定で一時的な武器を追加するかどうかはわかりません(%xで5分間攻撃する)。 IUpgradeable:これは、このセットアップで実装できます。私は武器をアップグレードするときに増加する基本ステータスとしてUpgradeLevelを考えています。アップグレードすると、武器のBaseStatを再計算して、アップグレードレベルに一致させることができます。 この時点まで、システムはかなり良いと思います。しかし、他の機能については、他に何かが必要だと思います。たとえば、BaseStatはこの機能を処理できず、これが行き詰まったため、Craftable機能をこれに実装できないからです。すべての材料をスタットとして追加できますが、それは意味がありません。 これを簡単に投稿できるようにするために、次の質問を参考にしてください。 このセットアップを続行して他の機能を実装する必要がありますか?継承なしでそれは可能でしょうか? 継承なしでこれらの機能をすべて実装するために、あなたが考えることができる方法はありますか? アイテムモディファイアについて、どうすればそれを達成できますか?それはその性質上非常に一般的だからです。 この種のアーキテクチャを構築するプロセスを容易にするために何ができるか、推奨事項はありますか? この問題に関連する掘り出し物はありますか? 私は本当に継承を避けようとしていますが、継承をかなり維持できるように維持しながら、継承によって簡単に解決/達成できると思いますか? さまざまな側面や人から知識を得ることができるように質問を非常に広くしているので、1つの質問に自由に答えてください。 編集 @ jjimenezg93の答えに従って、C#でテストするための非常に基本的なシステムを作成しました。あなたがそれに何かを追加できるかどうかを確認してください: public interface IItem { List<IAttribute> Components { get; set; } void ReceiveMessage<T>(T message); …

5
コンポーネントベースのゲームで衝突を適切に処理する方法は?
コンポーネントを中心に設計されたゲームで衝突を適切に処理する方法に頭を悩ませようとしています。 多くの例ではPhysicsComponent、エンティティのコンポーネントのリストに何らかの種類の追加が加えられていますが、実際の実装では混乱します。 これPhysicsComponentが機能するためには、周囲の世界にアクセスする必要があります。これは私には直感的な意味がありません。コンポーネントは、そのコンテナ(エンティティ)だけでなく、そのコンテナのコンテナ(世界)を認識すべきではありませんか? 私には、レベルまたはシーンがこれらのエンティティのリストを維持し、ゲームが更新されるたびに、エンティティをループしてどのコリジョンを決定するように聞こえます。 私の質問は、第一に、これが良い設計であるかどうか、そして第二に、どのエンティティが衝突できるかを決定する方法です。ソリッドエンティティは空のIRigidBodyインターフェイスを実装できるので、レベルはリスト内のどのエンティティが衝突をサポートするかを決定できます。しかし、これはコンポーネントの設計を壊していますか? 代わりに、空のRigidBodyコンポーネントを含める必要がありますか?常に空であるとは限らず、このアプローチはより将来性があるため、これは実際により良い場合があります。これに関する唯一の問題は複雑さです。シーンは、すべてのエンティティだけでなく、すべてのエンティティのコンポーネントもループして、このRigidBodyコンポーネントがあるかどうかを判断する必要があります。 第三に、それらが衝突した場合、両方のエンティティに何らかの方法で通知する必要があり、これを達成する方法については確信がありません。 両方のエンティティにHealthComponentが含まれていて、衝突すると両方のヘルスが任意の値5減少するとします。2つのエンティティ間の衝突を検出した場合、これを処理するのはシーンの責任です。 しかし、その後、シーンはあまりにも責任がありますか?エンティティがアクセスしてはならない(?)ものの多くをシーンが担当している場合、これが手に負えなくなり、扱いにくくなるのを見ることができました。 編集:詳細が更新された質問。

3
make-everything-static-and-globalデザインパターンを取り除きたいのですが、どうすればいいですか?
私は宇宙で小さなダンジョンクローラーを作っています。エンジンのバックエンドをより良くする方法についてのアドバイスを聞きたいです。基本的に、現在はすべてが管理者のがらくたに基づいています: BackgroundManager:AddBackground(image, parallax)クールな背景効果を作成するためのメソッドがあります。 ConfigManager:構成ファイルを読み取り/作成し、その構成ファイルから読み取ったデータも保持します。 DrawManager:持っているDraw(sprite)画面にコンテンツを描画する方法を、そして物事が好きSetView(view)、GetView()など EntityManager:すべてのアクティブなエンティティを保持し、エンティティを追加、削除、検索するためのメソッドを備えています。 DungeonManager(実際GridManagerと呼ばれるが、これは簡単にするためである):のようなメソッドがありGenerateDungeon()、PlaceEnemies()、PlaceFinish()など 現在、私はすべてのマネージャーをリストアップしているわけではないので、これは変化しなければならないと思います。私のゲームもスクリーンに基づいていますが、メインメニューなど、マネージャーが管理しているものの半分が必要ないため、面倒です(メインメニューには物理学/エンティティ/ダンジョンは必要ありません!) ここで、マネージャーを静的ではなく、ScreenMainGameにすべてのゲーム固有マネージャーのインスタンスを与えることを考えました。しかし、それはマネージャーに関連するものを呼び出したり取得したりするのを巨大な混乱にScreenMainGame.Draw()させます... ((ScreenMainGame)ScreenManager.CurrentScreen).GridManager.Draw() それは本当にいです。 それで、仲間のゲーム開発者は、この混乱を解決する方法を知っていますか?ありがたいです!

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

2
どのようにすれば、攻撃者は攻撃者だけを攻撃し、攻撃者は攻撃者を攻撃するだけですか?
私のゲームには、さまざまなタイプの善人とさまざまなタイプの悪者がいます。それらはすべてお互いに発射体を発射しますが、どちらのアラインメントでも偶発的な付随的な損傷が発生することは望ましくありません。そのため、悪者は他の悪者を打ったりダメージを与えたりしてはならず、善人は他の善人を打ったりダメージを与えたりすべきではありません。 私がこれを解決することを考えている方法は、Unitインスタンス(これはjavascript、btw)がまたはのalignmentいずれかのプロパティを持つようにすることです。そして、衝突が起きるのは、goodbad class Attack boolean didAttackCollideWithTarget(target) return attack.source.alignment != target.alignment and collisionDetected(attack.source, target) もちろん、これは疑似コードです。 しかし、私がこの質問をしているのは、Unitクラスにさらに別のプロパティを追加する以外に、これを設計するはるかにエレガントな方法があるかもしれないという感覚を得ているからです。

2
キャラクターのスキルと能力をコマンドとして作成することは良い習慣ですか?
私は、ユニークな攻撃スキルと、構築、修復などの他の能力を持つキャラクターで構成されるゲームを設計しています。プレイヤーは、そのようなキャラクターの複数を制御できます。 そのようなスキルや能力をすべて個別のコマンドに組み込むことを考えています。静的コントローラーは、これらすべてのコマンドを静的コマンドリストに登録します。静的リストは、ゲーム内のすべてのキャラクターの利用可能なすべてのスキルと能力で構成されます。そのため、プレイヤーがいずれかのキャラクターを選択し、UIのボタンをクリックして呪文を唱えたり能力を実行したりすると、ビューは静的コントローラーを呼び出して、リストから目的のコマンドをフェッチして実行します。 Unityでゲームを構築しているので、これが良いデザインであるかどうかはわかりません。すべてのスキルと能力を個別のコンポーネントとして作成し、それをゲーム内のキャラクターを表すGameObjectsに関連付けることができると思います。次に、UIはキャラクターのGameObject を保持してからコマンドを実行する必要があります。 私がデザインしているゲームのデザインと練習は何がいいですか?

4
エンティティごとに1つのタイプの1つのコンポーネントを壊すことなく、エンティティごとに複数のメッシュを使用するにはどうすればよいですか?
階層ベースのゲームエンジンからコンポーネントベースのゲームエンジンに切り替えるだけです。私の問題は、メッシュの階層を持つモデルをロードすると、コンポーネントベースのシステムのエンティティは同じタイプの複数のコンポーネントを持つことができないが、それぞれに「meshComponent」が必要になるということです。モデルのメッシュ。だから私はこの問題をどのように解決できますか? このサイトでは、コンポーネントベースのゲームエンジンを実装しました:http : //cowboyprogramming.com/2007/01/05/evolve-your-heirachy/

6
ゲームの状態管理(ゲーム、メニュー、タイトル画面など)
基本的に、これまでに作成したすべてのゲームで、「current_state」のような変数が常にあります。これには、「game」、「titlescreen」、「gameoverscreen」などがあります。 そして、私のUpdate関数には、巨大なものがあります: if current_state == "game" game stuf ... else if current_state == "titlescreen" ... しかし、私はこれが専門的できれいな状態の扱い方だとは思いません。これをより良い方法で行うためのアイデアはありますか?それともこれが標準的な方法ですか?

2
シンプルなアドベンチャーゲームでの動作の実装
私は最近、単純なテキストベースのアドベンチャーゲームをプログラミングして楽しませており、非常に単純なデザインの問題のように見えます。 概要を説明すると、ゲームはRoomオブジェクトに分解されます。それぞれにRoomは、Entityその部屋にあるオブジェクトのリストがあります。それぞれEntityに、単純な文字列->ブールマップであるイベント状態と、文字列->関数マップであるアクションリストがあります。 ユーザー入力は次の形式を取ります[action] [entity]。Room適切戻るには、エンティティ名を使用Entityして、正しい機能を見つけるために、アクション名を使用するオブジェクトを、それを実行します。 部屋の説明を生成するために、各Roomオブジェクトは独自の説明文字列を表示し、すべての説明文字列を追加しますEntity。Entity説明は(ETC、「ドアが開いている」、「ドアが閉じている」、「ドアがロックされている」)、その状態に基づいて変更することができます。 ここに問題があります。この方法を使用すると、実装する必要のある記述およびアクション関数の数がすぐに手に負えなくなります。私のスターティングルームだけでも、5つのエンティティの間に約20の機能があります。 すべてのアクションを1つの関数に結合し、それらをif-else / switchで結合できますが、それでもエンティティあたり2つの関数です。またEntity、ドアやキーなどの一般的なオブジェクトや一般的なオブジェクトの特定のサブクラスを作成することもできますが、それだけではこれまでのところはできません。 編集1:要求どおり、これらのアクション関数の疑似コード例。 string outsideDungeonBushesSearch(currentRoom, thisEntity, player) if thisEntity["is_searched"] then return "There was nothing more in the bushes." else thisEntity["is_searched"] := true currentRoom.setEntity("dungeonDoorKey") return "You found a key in the bushes." end if string dungeonDoorKeyUse(currentRoom, thisEntity, player) if getEntity("outsideDungeonDoor")["is_locked"] then getEntity("outsideDungeonDoor")["is_locked"] := false …

3
C ++でゲームエンジンを整理する方法 私の継承の使用は良い考えですか?
私はゲーム開発とプログラミングの両方の初心者です。 ゲームエンジンの構築に関する原則を学びたいと思っています。 シンプルなゲームを作成したいのですが、ゲームエンジンを実装しようとしているところです。 だから私は私のゲームエンジンがこれを制御する必要があると思った: - Moving the objects in the scene - Checking the collisions - Adjusting movements based on collisions - Passing the polygons to the rendering engine 私は私のオブジェクトを次のように設計しました: class GlObject{ private: idEnum ObjId; //other identifiers public: void move_obj(); //the movements are the same for all the objects (nextpos …
11 c++  architecture  oop 

2
Androidゲームを効率的に開発するにはどうすればよいですか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 2年前に閉店。 塗装で作ったフローチャートの画像を添付しました。 画像は、ゲームをどのように開発したいかを示しています。更新が簡単なスマートコーディングと、時間の経過に伴う広告機能を備えた優れたゲームが欲しい。私のターゲットプラットフォームはAndroidスマートフォンであり、必要に応じて、すべてのコードはXMLで膨らませたリソースを使用してJavaで記述されます。私はハードコードを探していませんが、疑似コードは役立ちますが、私はプロからの提案とアドバイスをもっと好むでしょう。 私の質問は: これはゲームをプログラミングする良い方法ですか、それともこれを行うためのより良い方法がありますか?必要な変更はありますか?私はゲームプログラミングの経験がないので、どんな提案も役に立ちます。したがって、いくつかのゲームを書いて、経験からコードを効率的に実行するための設定方法を知っている人からのアドバイスを好みます。

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