タグ付けされた質問 「c#」

C#は、Microsoftが.NETプラットフォームと組み合わせて作成した、マルチパラダイムで管理され、強く型付けされ、ガベージコレクションされたプログラミング言語です。

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

5
空間ハッシュと四分木に代わる2D空間分割
私はゲームに空間分割アルゴリズムを実装しようとしましたが、空間ハッシュと四分木の両方が私が探しているものではありません。 私のレベルサイズには制限がないことになっています(Int32制限のみ)。「レベル幅」と「レベル高さ」を必要としない空間分割アルゴリズムが必要です。 動いている物体がたくさんあります。500以上のオブジェクトをサポートできるほど高速なアルゴリズムが必要です。 代替案はありますか?

5
イベント駆動型システムの入れ子になった入力
イベントとデリゲートを使用したイベントベースの入力処理システムを使用しています。例: InputHander.AddEvent(Keys.LeftArrow, player.MoveLeft); //Very simplified code しかし、「ネストされた」入力を処理する方法について疑問に思い始めました。たとえば、Half-Life 2(または実際には任意のソースゲーム)では、でアイテムをピックアップできますE。アイテムを拾ったら、で発砲することはできませんLeft Mouseが、代わりにオブジェクトを投げます。まだジャンプできSpaceます。 (入れ子になった入力とは、特定のキーを押す場所であり、実行できるアクションが変わるものです。メニューではありません。) 3つのケースは次のとおりです。 以前と同じアクションを実行できる(ジャンプなど) 同じアクションを実行できない(発砲など) 別のアクションを完全に実行する(NetHackのように、ドアを開くキーを押すと、移動せずにドアを開く方向を選択する) 私の最初のアイデアは、入力が受信された後でそれを変更することでした: Register input 'A' to function 'Activate Secret Cloak Mode' In 'Secret Cloak Mode' function: Unregister input 'Fire' Unregister input 'Sprint' ... Register input 'Uncloak' ... これは、大量の結合、反復的なコード、およびその他の悪い設計兆候の影響を受けます。 他のオプションは、ある種の入力状態システムを維持することだと思います-おそらく、レジスタ関数の別のデリゲートが、これらの多数のレジスタ/デレジスタをよりクリーンな場所にリファクタリングして(入力システムにある種のスタックがある場合)、または多分守るべきこととすべきでないこと。 ここの誰かがこの問題に遭遇したに違いない。どのように解決しましたか? tl; drイベントシステムで特定の入力の後に受信した特定の入力をどのように処理できますか?


1
SDL.NET/Tao.SDLで8ビットサーフェスのパレットを取得するにはどうすればよいですか?
可能であればSDL.NETで8ビットサーフェスのパレットを取得するか、または(おそらく)Tao.SDLを使用してください。これは、32ビットサーフェスで行うように色を置き換えるためにサーフェスを一緒にブリットするのではなく、パレットと直接パレットスワップを実行したいためです。 SDL_SurfaceとSDL_PixelFormatを取得しましたが、同じ方法でパレットを取得しようとすると、System.ExecutionEngineExceptionが発生します。 private Tao.Sdl.Sdl.SDL_Palette GetPalette(Surface surf) { // Get surface. Tao.Sdl.Sdl.SDL_Surface sdlSurface = (Tao.Sdl.Sdl.SDL_Surface)System.Runtime.InteropServices.Marshal.PtrToStructure(surf.Handle, typeof(Tao.Sdl.Sdl.SDL_Surface)); // Get pixel format. Tao.Sdl.Sdl.SDL_PixelFormat pixelFormat = (Tao.Sdl.Sdl.SDL_PixelFormat)System.Runtime.InteropServices.Marshal.PtrToStructure(sdlSurface.format, typeof(Tao.Sdl.Sdl.SDL_PixelFormat)); // Execution exception here. Tao.Sdl.Sdl.SDL_Palette palette = (Tao.Sdl.Sdl.SDL_Palette)System.Runtime.InteropServices.Marshal.PtrToStructure(pixelFormat.palette, typeof(Tao.Sdl.Sdl.SDL_Palette)); return palette; } 安全でないコードを使用してパレットを取得すると、「アドレスを取得できない、サイズを取得できない、またはマネージ型へのポインターを宣言できない( 'Tao.Sdl.Sdl.SDL_Palette')」というコンパイル時エラーが発生しました。 パレットを取得するための安全でないコードは次のとおりです。 unsafe { Tao.Sdl.Sdl.SDL_Palette* pal = (Tao.Sdl.Sdl.SDL_Palette*)pixelFormat.palette; } 私が読んだことから、この場合のマネージ型は、構造体がフィールドとしてその中に何らかの参照を持っている場合です。SDL_Palette構造体にはSDL_Colorの配列が含まれているため、問題の原因となっているのはそれが参照型であると想定しています。ただし、基になるパレットを取得するためにそれを回避する方法はまだわかりません。 したがって、安全なコードでも安全でないコードでも、8ビットサーフェイスからパレットを取得する方法を知っている人がいれば、助力をいただければ幸いです。
11 c#  image  palette 

5
XNAフレームワークはサーバー側プログラミングに適していますか?
テキストベースのMUDを作成しようとしているので、XNAフレームワークの要素の多くは、必要なものに適しているように見えます。特に一般的なゲームループ、ネットワーキングなどのようなものです。XNAはUIとオーディオを備えたインタラクティブな環境に密接に結合されているようです。そのため、適切な方法かどうかはわかりません。 これらの種類の側面を自分で再作成する方が簡単ですか、XNAフレームワークを必要なものに曲げようとするのですか、それともこのタイプの作業に適したフレームワークはありますか?
11 c#  xna 


1
Unityでオブジェクトのスプライトを変更する
ヒーロー(オブジェクト)のスクリプトコード内で、スプライトを変更する可能性を追加します。 プレーヤーがスペースボタンを押すと、スプライトはプロジェクトに既に追加されている他のスプライトに変わります。 これを行うためのサンプルコードを提供してもらえますか?
11 c#  2d  unity  sprites 

3
等尺性衝突検出
2つのアイソメトリックタイルの衝突を検出しようとすると問題が発生します。 タイルの各ポイント間のラインをプロットしてからラインインターセプトを確認しようとしましたが、機能しませんでした(おそらく間違った式が原因です)。 今日しばらくこれを調べた後、私は多くのことを検討していると思います。もっと簡単な方法があるはずです。 私はコードを探していませんが、オーバーラップの検出を達成するための最良の方法に関するいくつかのアドバイス

4
ポイントが回転した長方形の内側にあるかどうかを効率的に確認するにはどうすればよいですか?
最適化のための部分、学習目的のための部分、私は敢えて質問します:C#またはC ++を使用して、2DポイントPが2D回転長方形の中にあるかどうかを最も効率的に確認するにはどうすればよいXYZWですか? 現在、私がやっていることは、本の「リアルタイム衝突検出」にある「ポイントイントライアングル」アルゴリズムを使用して、それを2回実行しています(長方形を構成する2つの三角形、たとえばXYZとXZW)。 bool PointInTriangle(Vector2 A, Vector2 B, Vector2 C, Vector2 P) { // Compute vectors Vector2 v0 = C - A; Vector2 v1 = B - A; Vector2 v2 = P - A; // Compute dot products float dot00 = Vector2.Dot(v0, v0); float dot01 = Vector2.Dot(v0, v1); float dot02 …

2
携帯電話を別の方向に移動させるために、どのようなステアリング動作またはロジックを使用できますか?
ゲームでパスファインディングを使用して、暴徒を別のプレーヤーに誘導しています(追跡するため)。これはそれらをプレーヤーの上に乗せるために機能しますが、目的地の少し前に停止させたいので(最後から2番目のノードを選択しても問題ありません)。 ただし、複数のMobがモバイルを追跡している場合、「互いの上に積み重なる」ことがあります。これを回避する最良の方法は何ですか?モブを不透明でブロックされたものとして扱いたいわけではありません(そうでないため、ウォークスルーすることができます)が、モブに構造的な感覚を持たせたいです。 例: それぞれのヘビが私を案内し、「セツナ」を囲んでいると想像してください。両方のヘビが私を突き刺すことをどのように選んだかに注意してください?これは厳密な要件ではありません。少しずれていても大丈夫です。しかし、彼らはセツナを「取り囲む」べきです。

4
LinuxのC#でゲームを作成できるフレームワークはありますか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、ゲーム開発スタック交換のトピックになるようにします。 5年前に閉鎖されました。 XNAの代替のようなものを探しています。2Dエンジンか3Dエンジンかは関係ありません。それは、私がWindowsが嫌いだったり、マイクロソフトに反対しているからではありません。それは、私がLinuxを実行するのが好きで、Linuxで完全にコード化する(C#の場合は明らかにMonoを使用する)ためです。ビデオカードが6歳であるという理由だけで、XNAでのプログラミングを実際にサポートするためのハードウェアがないわけです。また、DirectX 10用のWindows 7 / Vista CDも持っていません。 したがって、ゲーム開発に関しては、私は一種の石器時代に行き詰まっています。しかし、私はC#を非常に気に入っており、このため、C#を言語としてドロップする必要はありません。 何か私にできることはありますか?
10 xna  c# 

1
オーディオクリップの音量を確認する
GetSpectrumDataAudioSourceから曲を再生するために使用するコードがあり、プレーヤーが再生するためのレベルレイアウトを作成します。プレイヤーが自分の曲をアップロードし、これらの曲のデータで作成されたレベルを再生できる機能を追加したいと思います。残念ながら、異なるオーディオファイルを比較すると、次のような問題が発生しました。 ご覧のように、振幅はクリップごとに大幅に異なり、その結果、作成するのが簡単またはほとんど不可能であるレベルが作成されます。この「ラウドネス」を決定する方法を見つけたいので、曲からデータを取得した後、トーンを下げるか、乗数で増幅できます。また、曲を再生せずにこのデータを抽出する方法はありますか?
10 unity  c#  audio 

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