2012-05-08 14 views
0

私はXNAを初めて使いました。これは哲学的な質問です。私が見たほとんどの例では、ゲームアセットはプライベートクラス変数として定義され、LoadContentメソッドでロードされ、次にDrawメソッドで描画されます。たくさんのスクリーンを持った大規模なゲームをしているなら、このクラスのトップにかなりの宣言があります。私はTexture2D.FromFile(オーバーコンテンツパイプラインを使用する必要があることは言ってxna /コンテンツのパイプライン/資産と画面管理

は、ここに私の質問は)

  1. です。

  2. 高速読み込み以外の利点は何ですか?

  3. LoadContent()サブセクションの外部でContent.Load(Of T)([some asset name])を呼び出す必要があります。

さまざまな画面の読み込みアセットをどのように処理していますか?すべての資産をトップに宣言していますか?コンテンツパイプラインを使用して高度で

おかげで、

エリック

答えて

1

はあなたがスペース、ロード時間を節約し、あなたのバイナリ、とあなたのテクスチャをコンパイルすることができます、あなたが気にしている場合、編集/不正使用からあなたの資産を保護しますそのことについて。フリップサイドで、アセットを編集可能(テクスチャパックなど)にしたい場合は、FromFile()が有効です。このファイルは、通常の使用方法で期待通りのディレクトリに存在していなければなりません。

最終的には、コンテンツをロードする場所を決定することをお勧めします。コンテンツの読み込みには、ディスクからの読み込みが必要であることを覚えておいてください。これは、すべてのフレームを確実に実行したいものではなく、ゲーム中にやってみたいことではありません。あなたはゲームの状態管理を設定して、画面やゲームの起動中にコンテンツを完全に読み込むことができます。もちろん、これはどのレベルのローディング画面が対象ですか?あなたが非常に巧みであれば、Metroid Primeの「ドアローディング」のゲームプレイ中の一時停止中に読み込まれることがあります。しかし、あなたのゲームの範囲と資産によっては、そうしたように動的にロードする必要はありません。

最後に、資産をダンプすることについての答えは、オブジェクト指向プログラミングの偉大な洞察です:抽象化。メンバーの整理に問題がある場合は、必要に応じて継承されたクラスまたはサブクラスに移動してください。私のゲームデザインでは、2つ以上のゲームがほとんどありません。Texture2D、1 SoundBank、おそらくVertexBuffer/IndexBufferです。私がうまく設計していれば、これらは、すべてのビジュアルオブジェクトが継承する「スプライト」のような基本クラスに格納されます。私の最新のツールでは、レベルが1つ上がりましたので、実際のテクスチャにアクセスしたい場合は(スプライト).Animation.Textureのように見えますが、すべてのアニメーション/、Animationクラスによって完全に処理し、PositionRotationScaleBoundingとともにスプライトによって更新される描画など

ので、オブジェクトにあなたのゲームを打破します。 とVector2 PlayerPosGameクラスに格納し、DrawPlayerTexを描画する場合は、PlayerPosに描画するので、オブジェクト指向プログラミングを利用できません。PlayerTexPlayerPosPlayerクラスに格納します。これは、プレーヤのその他のアスペクトや動作(メソッド)もすべて定義します。 Gameに必要なのはPlayer myPlayerDrawの場合はmyPlayer.Draw(SpriteBatch .. etc)となります。さらにそれを取ることができます!ここではいくつかのクラスは、すべてのゲームがありますほとんどです:Entity(すべての動的オブジェクトの基本クラス)、Level(店舗の風景と各レベルのEntitiesとそれらの相互作用を扱う)、GameScreen(店舗は、それぞれの完了時にそのLevelメンバーをインクリメント)、 ScreenManagerGameScreenのように更新するためにScreenのスタックを格納しますが、MenuScreenPauseScreenLoadingScreen)...リストが続きます。この時点で、すべてのあなたのGame1クラスが更新ScreenManagerでない、とあなたはIDrawableGameComponentからScreenManagerを継承する場合は、あなたもそれを行う必要はありません。

は、私はOO 101の奥にすぎ潜っていないと思っているが、あなたはあなたのメインクラスのすべてのメンバーを追跡する問題を抱えているなら、あなたは物事を打破するために開始する必要があります。それは基本的なオブジェクト指向のスキルです。

その他すべてが失敗した場合は、#region <name>/#endregionタグを自由に使用する方法を学んでください。正直言って、とにかくそれらを使用して、すべてをより良くします。

+0

ありがとうございます。私は地域を使っていますが、それはちょうど1つの場所でコードの大量のように思えます。私はscreenmanagerと呼ばれるものを見つけました。私はそれを調べなければならないもののようです。 –

関連する問題