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

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


6
ビデオゲームで弾丸はどのように機能しますか?
C#でビデオゲームを設計しているときに、この質問に出会いました。 BattlefieldやCall of Dutyなどのゲームを考慮すると、数百または数千の弾丸が同時に飛んでいます。イベントは絶えずトリガーされますが、私が知っている限りでは、これは処理能力を大量に消費します。さまざまなゲーム開発者が(2Dおよび3D)箇条書きをどのように管理し、それぞれにとって最も効率的な方法は何かを知りたいです。 私は質問読ん弾丸はビデオゲームでシミュレートされているどのように?ただし、プログラムの設計の観点からは、箇条書きがどのように機能するかについては触れません。 いくつかのアイデアがありましたが、それぞれに欠点があります。 私が考えることができる最も効率的な方法(2Dゲームの場合): Bulletと呼ばれるクラスを作成し、ユーザーがボタンを長押ししても、0.01秒ごとにBulletオブジェクトが作成されるとします。この箇条書きの内容: 1速度 2ショットの開始位置 3スプライトテクスチャ 4ヒットエフェクト 箇条書きは独自のクラスになるため、描画、移動、およびアクションリスナー自体を管理できます。 インスタンス化されたこれらのオブジェクトの数千個を処理してから破棄するのは、プロセッサ上で難しいのではないでしょうか?RAMスペース? 3Dゲームの効率的な方法-私が考えていたもう1つの考えは: 武器クラスを作成するとしましょう。この武器にはさまざまな機能があり、そのうちのいくつかは次のとおりです。 1武器の照準を検出し、ターゲットを見ているかどうかを判断します 2銃撃のアニメーションをトリガーする 3 doDamage()メソッドがあります。これは、銃が向けられているものからヘルスを差し引くものを示します 4ボタンが押されたときに弾丸アニメーションクラスに通知する 次に、BulletAnimationなどの静的クラスを作成して、それがトリガーされた銃の場所、その銃が向けられている場所(弾丸の宛先)、および弾丸に使用する適切なスプライトと速度に関する情報を取得できます。次に、このクラスは、位置と目的のスプライトの両方に基づいてスプライトを描画し(おそらく新しいスレッドにidk)、銃から発射される弾丸をシミュレートします。 後者はコーディングがはるかに難しいようで、一度に何千もの弾丸に対してこれを行うために静的関数を絶えず呼び出すには、多くの処理能力が必要ではないでしょうか?開始位置と終了位置の両方で絶えず更新を取得することも困難です。 私の質問は、ゲームクリエーターが最も効率的に行う方法は何ですか?この方法は2Dゲームから3Dゲームに変わりますか?

1
コンポーネントベースのエンティティシステムを実際に使用する
昨日、私はGDCカナダから、属性/行動エンティティシステムに関するプレゼンテーションを読みました。ただし、理論上だけでなく、実際に使用する方法もわかりません。まず、このシステムの仕組みを簡単に説明します。 各ゲームエンティティ(ゲームオブジェクト)は、属性(=データ、動作によってアクセスできるだけでなく、「外部コード」によってもアクセス可能)および動作(= OnUpdate()およびを含むロジック)で構成されますOnMessage()。したがって、たとえば、ブレイクアウトクローンでは、各ブリックは(例!)で構成されます:PositionAttribute、ColorAttribute、HealthAttribute、RenderableBehaviour、HitBehaviour。最後の例は次のようになります(C#で書かれた単なる機能しない例です)。 void OnMessage(Message m) { if (m is CollisionMessage) // CollisionMessage is inherited from Message { Entity otherEntity = m.CollidedWith; // Entity CollisionMessage.CollidedWith if (otherEntity.Type = EntityType.Ball) // Collided with ball { int brickHealth = GetAttribute<int>(Attribute.Health); // owner's attribute brickHealth -= otherEntity.GetAttribute<int>(Attribute.DamageImpact); SetAttribute<int>(Attribute.Health, brickHealth); // owner's attribute // …


7
自習型ゲーム開発の危険性は何ですか?[閉まっている]
ゲーム開発への旅に出かけようとしています。最後の質問への回答に続いて、C#とXNAを使用します。 しかし、私は他のゲーム開発者を個人的に知りませんし、業界で働いていないので、独学です。これの例外は明らかに質問をすることとオンライン/印刷された情報を読むことですが、私はこれを独学だと分類します。 それに伴い、「私を翼の下に置いておく」誰かがいないことで遭遇するかもしれない問題に備えたいと思います。 類推として、ギターを弾くように自分自身を教えるとき、私は後で学んだ和音への移行をより困難にするような方法でAメジャーコードを演奏しました。 学んだ教訓と、ゲーム開発の学習で何がうまくいかないかについてのアドバイスを共有できれば、ありがたいです。 間違いを犯すことは学習の最大の部分であることをよく知っていますが、間違いがあれば準備できますので、喜んでいます。
58 c#  xna  books 

9
浮動小数点の非決定論に直面して決定論的ゲームはどのように可能ですか?
ネットワーク化されたRTSのようなゲームを作成するために、ここでゲームを完全に決定論的にすることを提案する多くの回答を見ました。次に、ユーザーのアクションを相互に転送するだけで、次のフレームがレンダリングされる前にすべてのユーザーの入力を「ロック」するために、表示されているものを少し遅らせるだけで済みます。その場合、ユニットの位置、ヘルスなどのようなものは、ネットワーク上で常に更新される必要はありません。すべてのプレイヤーのシミュレーションはまったく同じだからです。また、リプレイを行うために提案された同じことを聞いたことがあります。 ただし、浮動小数点の計算はマシン間、または同じマシン上の同じプログラムの異なるコンパイル間でも非決定的であるため、これは本当に可能ですか?その事実が、ゲーム全体に波及するプレイヤー(またはリプレイ)間の小さな違いを引き起こすのをどのように防ぐのでしょうか? 一部の人々は、浮動小数点数を完全に避けint、分数の商を表すために使用することを提案することを聞いたことがありますが、それは私には実用的ではありません-たとえば、角度の余弦を取る必要がある場合はどうなりますか?数学ライブラリ全体を真剣に書き直す必要がありますか? 私は主にC#に興味があることに注意してください。私が知る限り、この点ではC ++とまったく同じ問題があります。

7
2D Platformer AABBの衝突問題
AABBの衝突解決に問題があります。 最初にX軸を解決し、次にY軸を解決して、AABB交差を解決します。これは、このバグを防ぐために行われます:http : //i.stack.imgur.com/NLg4j.png 現在のメソッドは、オブジェクトがプレーヤーに移動し、プレーヤーを水平方向に押す必要がある場合に正常に機能します。.gifでわかるように、水平スパイクはプレーヤーを正しく押します。 ただし、垂直スパイクがプレーヤーに移動しても、X軸が最初に解決されます。これにより、「スパイクをリフトとして使用する」ことができなくなります。 プレーヤーが垂直スパイクに移動すると(重力の影響を受けて落下します)、最初はX軸にオーバーラップがなかったため、Y軸に押し込まれます。 私が試したのは、このリンクの最初の回答で説明した方法でした:2D長方形オブジェクト衝突検出 ただし、スパイクと移動オブジェクトは、速度ではなく位置を変更することで移動します。Update()メソッドが呼び出されるまで、次の予測位置を計算しません。言うまでもなく、このソリューションも機能しませんでした。:( 上記の両方のケースが意図したとおりに機能するように、AABBの衝突を解決する必要があります。 これは私の現在の衝突ソースコードです:http : //pastebin.com/MiCi3nA1 このバグは最初からずっとエンジンに存在していたので、誰かがこれを調べることができれば本当に感謝しています。これは真剣に衝突コードを見て夜を過ごし、「楽しい部分」に到達してゲームロジックをコーディングするのを妨げています:( XNA AppHubプラットフォーマーデモと同じ衝突システムを実装しようとしました(ほとんどのものをコピーアンドペーストします)。ただし、私のゲームでは「ジャンプ」バグが発生しますが、AppHubデモでは発生しません。[ジャンプバグ:http : //i.stack.imgur.com/NLg4j.png ] ジャンプするには、プレーヤーが「onGround」であるかどうかを確認し、Velocity.Yに-5を追加します。 プレーヤーのVelocity.XはVelocity.Yよりも高いため(図の4番目のパネルを参照)、onGroundは本来あるべきではないときにtrueに設定され、プレーヤーを空中でジャンプさせます。 プレーヤーのVelocity.XがVelocity.Yよりも高くなることはないので、AppHubデモではこれは起こらないと思いますが、間違っている可能性があります。 これを解決する前に、まずX軸で解決し、次にY軸で解決しました。しかし、それは私が上で述べたようにスパイクとの衝突を台無しにします。

4
Unityでプレイヤーから文字列を完全に非表示にして保護するにはどうすればよいですか?
私はUnityを使用して完全にオフラインになる2Dゲームを作成しました(これが問題です)、ゲームプレイでは特定のレベルで特定の文字列を入力する必要があり、UnityはDLLにコンパイルされます。これは簡単にリバースエンジニアリングできますそれらの文字列を保護する方法はありますか(ゲームはオフラインなので、他のソースから取得できません)? ゲームはこれらの文字列に大きく依存しており、はい、私は難読化に気付いていますが、もっと堅牢なものが欲しいです。そして、私は簡単な方法はデータソースからすべてをオンラインで行うことであることを知っていますが、それが可能かどうか疑問に思っていました。 次のように逆コンパイルできます。
47 unity  c#  anti-cheat 

5
ゲームの俳優は自分自身を描く責任がありますか?
私はゲーム開発は初めてですが、プログラミングは初めてです。 私は(再び)JavaScriptのcanvas要素を使用してPongタイプのゲームで遊んでいます。 Paddle次のプロパティを持つオブジェクトを作成しました... width height x y colour 次のPongようなプロパティを持つオブジェクトもあります... width height backgroundColour draw()。 draw()現在、メソッドはをリセットしてcanvasおり、そこで問題が発生しました。 必要があるPaddleオブジェクトが持つdraw()その描画方法は責任、または必要があるdraw()のPongオブジェクトがその役者を描くための責任がある(私が間違ってる場合、私はそれが正しい用語であると仮定し、私を修正してください)。 私はのためにそれがadvantagousだろうと考え出しPaddle自体を描画するために、私は2つのオブジェクトをインスタンス化するように、PlayerとEnemy。それはでなかった場合Pongのdraw()、私は二度同様のコードを記述する必要があると思います。 ここでのベストプラクティスは何ですか? ありがとう。

1
このビート検出コードがいくつかのビートを適切に登録できないのはなぜですか?
私はこのSoundAnalyzerクラスを作成して、曲のビートを検出しました。 class SoundAnalyzer { public SoundBuffer soundData; public Sound sound; public List<double> beatMarkers = new List<double>(); public SoundAnalyzer(string path) { soundData = new SoundBuffer(path); sound = new Sound(soundData); } // C = threshold, N = size of history buffer / 1024 B = bands public void PlaceBeatMarkers(float C, int N, …
38 c#  audio 

9
Unityで、シングルトンパターンを正しく実装するにはどうすればよいですか?
主に、Unityでシングルトンオブジェクトを作成するためのいくつかのビデオとチュートリアルを見てきましたGameManager。これらは、シングルトンのインスタンス化と検証にさまざまなアプローチを使用しているようです。 これに対する正しい、またはむしろ好ましいアプローチはありますか? 私が遭遇した2つの主な例は次のとおりです。 最初 public class GameManager { private static GameManager _instance; public static GameManager Instance { get { if(_instance == null) { _instance = GameObject.FindObjectOfType<GameManager>(); } return _instance; } } void Awake() { DontDestroyOnLoad(gameObject); } } 第二 public class GameManager { private static GameManager _instance; public static GameManager Instance …

4
なぜオブジェクトが90度よりも45度で速く動くのですか?
ゲームには、90度ではなく45度でより速く動くオブジェクトがあります。 各オブジェクトには ポイント(x、y)位置 Vector2D(x、y)方向 Int速度 そして、更新中に私がすることは、新しい位置が次のように計算されるということです。 position.x += direction.x * speed position.y += direction.y * speed これを修正するにはどうすればよいですか?どんな角度でも同じ速度で動くようにしたい。
32 c#  2d  geometry 

3
標準のC#/ Windows Formsゲームループとは何ですか?
昔ながらのWindowsフォームとSlimDXやOpenTKなどのグラフィックAPIラッパーを使用するC#でゲームを作成する場合、メインゲームループはどのように構成する必要がありますか? 正規のWindowsフォームアプリケーションには、次のようなエントリポイントがあります public static void Main () { Application.Run(new MainForm()); } そして、クラスのさまざまなイベントをフックすることで必要なものを達成することはできますがForm、それらのイベントは、ゲームロジックオブジェクトへの一定の定期的な更新を実行したり、レンダリングを開始および終了するためのコードのビットを置く明確な場所を提供しませんフレーム。 そのようなゲームは、標準に似た何かを達成するためにどのようなテクニックを使用する必要がありますか while(!done) { update(); render(); } ゲームループ、そしてパフォーマンスとGCへの影響を最小限に抑えますか?

5
ゲームリソース(wood、iron、gold)にインスタンスまたはクラスを使用する
そこで、木材、鉄、金などの資源を売買する場所に船を送ることができるゲームを作っています。 今、私はゲーム内でリソースをどのように作成すべきか疑問に思っていました。私は2つのオプションを思いつきました リソースごとにクラスを作成します。 public class ResourceBase { private int value; // other base properties } public class Gold : ResourceBase { public Gold { this.value = 40 // or whatever } } リソースクラスのインスタンスを作成する public class Resource { string name; int value; public Resource(string name, int value) { this.name = name; …

5
グリッドベースの液体シミュレーションでの圧力のシミュレーション
XNAゲームには2Dグリッドベースの水システムがあり、セルオートマトンを使用して水の落下と広がりをシミュレートする方法があります。 斜面を流れる水の例: 各タイルには、0〜255の値の液体を1バイトで格納できます。私が使用していfloatsた古い水道システムは使用しませんが、複雑さを増し、パフォーマンスに打撃を与えました。 各水タイルは、単純なルールセットで自動的に更新されます。 下のタイルにスペースがある場合は、可能な限り現在のタイルから下のタイルに移動します(フローダウン) 2つの側面が同じでなく、ゼロでなく、両方とも通過可能である場合、3つのタイルの合計(左+現在+右)を取得し、3で除算して残りを中央(現在の)タイルに残します 上記のルールが合計として2の数を与えた場合、タイルを2つの側面(1、0、1)に分割する必要があります ルール2が合計として1を与えた場合、流入するランダムな側を選択します ルール2が失敗した場合、一方が合格でもう一方が合格でないかどうかを確認する必要があります。それが当てはまる場合、2つのタイルに対して現在のタイルを半分に分割します このロジックを拡張してプレッシャーを含めるにはどうすればよいですか?圧力がかかると、液体が「Uベンド」を超えて上昇し、エアポケットが満たされます。 これが現在どのように失敗するかの例: 水はUベンドの両側で流れ、均等化されるはずです。さらに、ウォーターブロックがどれくらい下にあるか、したがってどの程度の圧力が発生しているかを調べるためのメソッドを作成しました。ここで、これらの数値を取得して他の領域に適用し、圧力を均等化できるようにする必要があります。
30 xna  c#  physics  grid  water 

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