ゲーム開発

プロおよび独立系ゲーム開発者向けのQ&A

2
Microsoft XNA Platformerの例、衝突検出は正確に実装されていますか?
Microsoftが提供する例では、衝突の検出(私が確認できることから)に小さなエラーがあるようです。ユーザーが通過不可能なタイルと衝突すると、交差の深さが計算されます。奥行き値XとYの小さい方を使用してユーザーの位置を固定し、タイルと衝突しないようにします。しかし、ユーザーが斜めに移動している場合、これにより、ユーザーが最初にタイルと最初に衝突するポイントに正確に到達しない可能性がありますか? 私はおそらく間違っているが、それは私がそれを見る方法に過ぎない。 private void HandleCollisions() { // Get the player's bounding rectangle and find neighboring tiles. Rectangle bounds = BoundingRectangle; int leftTile = (int)Math.Floor((float)bounds.Left / Tile.Width); int rightTile = (int)Math.Ceiling(((float)bounds.Right / Tile.Width)) - 1; int topTile = (int)Math.Floor((float)bounds.Top / Tile.Height); int bottomTile = (int)Math.Ceiling(((float)bounds.Bottom / Tile.Height)) - 1; // Reset …

2
私は9日でゲームを作らなければなりません。ああ![閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 4年前に閉鎖されました。 質問に行き、背景をスキップしたい場合は、次の段落に進みます。そうでない場合は、読み続けてください。さて、私は13歳で、暇なときにゲームを作っています。誰とも共有したことがないので、中学生向けのSTEMビデオゲームチャレンジに参加することにしました。私はStencylを使用してゲームを作成することを決定し、それは1月だったので、いつかはそれに取り組むと思っていました。その後、私は私の学校の劇に参加しました。これは私の時間を大量に費やし、今日、私はその3月3日を実現しました。 だから、9日でゲームを作る必要があり、おそらくstencylworksを使用するつもりです。9日で実行できるというアイデアと、効率的なゲーム開発のための一般的なヒントだけが必要です。これはちょっと緩い質問で申し訳ありませんが、事前に感謝します!

2
コンポーネントベースのエンティティシステムでのスクリプト化された「ネイティブ」コンポーネントの処理
私は現在、コンポーネントベースのエンティティシステムを実装しようとしています。エンティティは基本的に単なるIDであり、いくつかのコンポーネントを束ねてゲームオブジェクトを形成するヘルパーメソッドです。そのいくつかの目標は次のとおりです。 コンポーネントには状態のみが含まれます(例:位置、ヘルス、弾薬数)=>ロジックは「システム」に入り、これらのコンポーネントとその状態(例:PhysicsSystem、RenderSystemなど)を処理します 純粋なC#とスクリプト(Lua)の両方でコンポーネントとシステムを実装したいと思います。基本的に、C#ソースを再コンパイルすることなく、完全に新しいコンポーネントとシステムをLuaで直接定義できるようにしたいと考えています。 これを効率的に一貫して処理する方法についてのアイデアを探しているので、たとえば、C#コンポーネントやLuaコンポーネントにアクセスするために別の構文を使用する必要はありません。 私の現在のアプローチは、通常のパブリックプロパティを使用してC#コンポーネントを実装することです。おそらく、エディターにデフォルト値などを伝えるいくつかの属性で装飾されています。次に、C#クラス "ScriptComponent"を作成します。これは、Luaテーブルを内部でラップするだけで、このテーブルはスクリプトによって作成され、特定のコンポーネントタイプのすべての状態を保持します。コンパイル時にはわからないので、C#側からはその状態にあまりアクセスしたくないのですが、どのScriptComponentsにどのプロパティを使用できるかはわかりません。それでも、エディターはそれにアクセスする必要がありますが、次のような単純なインターフェースで十分です。 public ScriptComponent : IComponent { public T GetProperty<T>(string propertyName) {..} public void SetProperty<T>(string propertyName, T value) {..} } これは単にLuaテーブルにアクセスし、Luaからこれらのプロパティを設定および取得するだけで、純粋なC#コンポーネントにも簡単に含めることができます(ただし、通常のC#プロパティをリフレクションなどで使用します)。これはエディターでのみ使用され、通常のゲームコードでは使用されないため、ここではパフォーマンスはそれほど重要ではありません。特定のコンポーネントタイプが実際に提供するプロパティを文書化したコンポーネントの説明を生成または手書きする必要がありますが、それは大きな問題ではなく、十分に自動化できます。 しかし、Lua側からコンポーネントにアクセスする方法は?たとえばgetComponentsFromEntity(ENTITY_ID)、「ScriptComponent」を含むネイティブのC#コンポーネントの束をユーザーデータとして取得することになるでしょう。ラップされたLuaテーブルから値GetProperty<T>(..)にアクセスすると、他のC#コンポーネントのようにプロパティに直接アクセスする代わりに、メソッドが呼び出されます。 おそらくgetComponentsFromEntity()、Luaからのみ呼び出される特別なメソッドを記述します。これは、代わりにラップされたテーブルを返す「ScriptComponent」を除いて、すべてのネイティブC#コンポーネントをユーザーデータとして返します。しかし、他のコンポーネント関連のメソッドがあるので、C#コードまたはLuaスクリプトから呼び出されるために、これらのメソッドをすべて複製したくありません。 最終的な目標は、ネイティブコンポーネントとLuaコンポーネントを区別する特別なケース構文なしで、特にLua側から、すべてのタイプのコンポーネントを同じように処理することです。たとえば、次のようなLuaスクリプトを記述できるようにしたいと思います。 entity = getEntity(1); nativeComponent = getComponent(entity, "SomeNativeComponent") scriptComponent = getComponent(entity, "SomeScriptComponent") nativeComponent.NativeProperty = 5 scriptComponent.ScriptedProperty = 3 スクリプトは、実際に取得したコンポーネントの種類を気にする必要はありません。C#側から使用するのと同じメソッドを使用して、コンポーネントを取得、追加、または削除します。 たぶん、そのようなエンティティシステムとスクリプトを統合するいくつかのサンプル実装がありますか?


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 

3
スローモーションでの衝突を計算的に緩和していますか?
多くのレーシングゲーム(たとえば、バーンアウトパラダイス)では、衝突が発生しようとすると、ゲームのプレイは自動的にスローモーションに切り替わり、衝突が完了するまでスローシーケンスで続行されます。 これは効果のためだといつも思っていました。衝突の一部を見逃したくない!しかし、私の友人の1人は、衝突が発生したときに必要とされる処理の圧倒的な速度がないことを確認するためにこれが行われることを最近提案しました。 今、私はそれが実際には逆だと思います。衝突が発生すると、多くの詳細がスローモーションで表示されるため、コンピューティングとレンダリングのパイプラインにオーバーヘッドがあると確信しています。 何が正しいですか? スローモーションシーンは、CPU / GPU使用量を増やしますか、それとも減らしますか?

4
世界を動かすか、プレイヤーを動かすか?
私は、横スクロールゲームを開発しようとしています。プレーヤーの目標は、タッチダウンする前に、できるだけ横軸に移動することです。水平軸に戻る必要がないことに注意してください。 私は、OpenGLとBox2dを使用するAndEngine for Androidでこれを開発しています。 開始する前に、何か重要なことを決定する必要があります。プレイヤーの周りの世界を使用して動きをシミュレートするか、実際にプレイヤーを動かして、ゲームエンジンのカメラ機能で彼を追跡する必要がありますか? どちらのアプローチにも長所とフォールバックがあり、どちらが最適であるかはわかりません。たとえば、途中でパワーアップを追加し、アニメーション化された背景を簡単にするにはどうすればよいでしょうか? ありがとう!

2
Bullet物理エンジンでY軸の動きを無効にする方法
X軸とZ軸に沿って移動するだけでなく、Y軸を無効にしたままオブジェクトを作成したいと思います(2Dでの移動と同じで、オブジェクトが落ちることはありません)。 現在、Y軸の動きを制限するために6自由度の制約を使用していますが、機能しません。 btRigidBody* zeroBody = new btRigidBody(0, NULL, NULL); // Create the body that we attach things to btRigidBody* robot = mCarChassis->getBulletRigidBody(); btGeneric6DofConstraint* constrict = new btGeneric6DofConstraint(*robot, *zeroBody, btTransform::getIdentity(), btTransform::getIdentity(), false); constrict->setLinearLowerLimit( btVector3( 1, 1, 1)); constrict->setLinearUpperLimit( btVector3(-1, 1,-1)); constrict->setAngularLowerLimit( btVector3( 1, 1, 1) ); constrict->setAngularUpperLimit( btVector3(-1, -1, -1) ); …

2
ワールドツープレイヤーインベントリシステムを作成する方法は?
XNA内に在庫システムを実装しようとする問題に直面しています(実際には問題ではなく、どのプラットフォームでもかまいません)。ここに私が頭を抱えようとしている問題があります: どのようにして世界からアイテムを入手し(あなたがモンスターを殺すと鎧を落とすと思います)、それを私のプレイヤーのインベントリに入れることができますか? インベントリが単なるアイテムのリストである場合、技術的には、クラスに複数の処理を行わせずに、世界からスチールソードをプレイヤーのインベントリに入れるにはどうすればよいですか? 私は現在、一意の16進数値、そこにあるアイテムの数(積み重ね可能、矢印など)、インベントリ内のレンダリング用のテクスチャ、およびその他の重要でないプロパティ(名前、説明など)を含むアイテム構造体を持っています。 既存のアイテムクラスを変更して、ワールドポジションと衝突検出(アイテムが地球を通り抜けてほしくない)を格納する必要がある場合は、設計が悪いでしょう。 考慮事項をありがとう!
11 xna  c#  2d 

4
上に移動するプレーヤー、彼はジャンプしていますか、それとも登っていますか?
はしごを含む2D物理ベースのプラットフォーマーゲームで、上に移動するプレーヤーがジャンプによって発生したのか、はしごを登って発生したのかをどのように判断して、どのアニメーションを再生するかを知っていますか? そして一般的に、明らかに方向ベクトルは再生するアニメーションを決定するのに十分ではありません。どのようにして動きの原因も決定するのですか(使用する正しいスプライトを知っているので)?

5
Unityの2Dキャラクターコントローラー(昔ながらのプラットフォーマーを取り戻そうとしています)
この日私は(物理学を使用して)単一性を持つ2Dキャラクターコントローラーを作成しようとしています。私は物理エンジンにかなり慣れていないので、探しているコントロールの感覚を得るのは本当に難しいです。私が見つけた問題の解決策を誰かが提案できれば私は本当に幸せです: これが私のFixedUpdateです。 public void FixedUpdate() { Vector3 v=new Vector3(0,-10000*Time.fixedDeltaTime,0); _body.AddForce(v); v.y=0; if(state(MovementState.Left)) { v.x=-_walkSpeed*Time.fixedDeltaTime+v.x; if(Mathf.Abs(v.x)>_maxWalkSpeed) v.x=-_maxWalkSpeed; } else if(state(MovementState.Right)) { v.x= _walkSpeed*Time.fixedDeltaTime+v.x; if(Mathf.Abs(v.x)>_maxWalkSpeed) v.x=_maxWalkSpeed; } _body.velocity=v; Debug.Log("Velocity: "+_body.velocity); } ここでは、リジッドボディを動かして、重力と線形力を左右に加えます。動いているときに跳ね返ることがなく、摩擦が0、静止した状態で摩擦が1つの物理的マテリアルをセットアップしました。主な問題は、スロープのあるコライダーがあり、速度が上がる(遅い)、スロープを下る(速い)、直線のコライダー(通常)から速度が変化することです。これをどのように修正できますか?ご覧のとおり、x軸には常に同じ速度を適用しています。 プレーヤーのために、力を適用しているリジッドボディである球を足の位置に設定しました。 これで私の人生を楽にするかもしれない他のヒントは大歓迎です:)。 PD帰宅中に、プレイヤーが歩いている表面に平行な一定の力を適用してこれを解決できることに気づきましたが、それが最善の方法であるかどうかはわかりません。

3
純粋なOpenGLまたはGLSLに移行しますか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、ゲーム開発スタック交換のトピックになるようにします。 5年前に閉鎖されました。 私はグラフィックプログラミングの勉強に興味を持ったので、明らかな入り口はOpenGLを学ぶことでした。しかし、フォーラムやサイトの周りに散在する情報を集めると、3.0より前のほとんどのものが非推奨になり、「3.0以降はすべてシェーダーに関するものである」というAmazonのレビューを引用しているため、純粋なOpenGLの実装は消えています。また、私が見た本の中で、新しいバージョンをカバーしているのは優れたものだけのようですが、本の大部分が非推奨の機能を教えており、GLSLに特化した本があるためです。 これが私が最初の問題に遭遇した場所です。使用する予定のIntel統合グラフィックスを備えたノートブックを含め、一部のハードウェアはGLSLをサポートしていません。関数 GLuint vertShader = glCreateShader(GL_VERTEX_SHADER); セグメンテーション違反を引き起こし、その外観から私のドライバーはシェーダーをサポートしていません だから私の質問は、OpenGLだけでゲームを作ることの実行可能性は何ですか?シェーダー言語からのかけがえのない優れた機能はありませんか?また、シェーダーを使用してゲームを適切に実行するには、どのようなハードウェア(旧世代のi3、i5、i7、旧VGA)が必要ですか?
11 opengl  glsl 

1
ネットワーク統合のため、独自の物理エンジンを作成する必要がありますか?
現在、トップダウンのリアルタイムゾンビシューティングゲームを開発しています。これをJavaでコーディングし、物理エンジンとしてJBox2Dを使用しています。私は今週ネットワークをコーディングしており、現在は物理の同期まで行っています。 私は、サーバーが後でそれを承認する限り、クライアントが自由に移動できる予測クライアント/権限のあるサーバーモデルを使用することを計画しています。これには、クライアントが動きのデータを含むパケットをサーバーに送信し、サーバーが待ち時間を計算し、古い状態から世界を再シミュレーションすることが含まれます。 私の問題は、私の現在の物理エンジンであるJBox2D(基本的にはBox2Dのポート)は、ワールドのロールバックをサポートしておらず、ワールドデータをシリアル化するのがそれほど簡単ではないことです。私には2つの解決策があります。現在の物理エンジンを変更または拡張するか、自分で作成することができます。 自分の物理エンジンを作成する理由- 不要な機能を削除できます。トップダウンゲームでは、衝突のメカニズムと力の処理だけが本当に必要です。重力は関係ありません。 私はコードをよりよく理解でき、ロールバック機能を実装する方が[おそらく]簡単です JBox2Dを拡張/変更する理由 私自身の物理エンジンを書くことは、かなりの量の仕事になるでしょう、それは面倒かもしれません JBox2Dには幅広いサポートコミュニティがあり、開発者と協力することができます JBox2Dには、衝突検出など、特定の最適化があり、便利です これについては既に行われているようにいくつかの作業が行われますが、コードはほとんど共有されていません だからあなたの意見は何ですか。これは私の最初のゲームであり、私はプロのゲーム開発者ではありません。誰かがその領域ですでに行われた作業へのリンクを提供できる場合(できればJBox2D / Box2D / Javaを使用)。

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

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