Wczytywanie zasobów (zawartość)
streszczenie
Opisuje sposób importowania zasobów, takich jak pliki obrazów i pliki modelu.
Środowisko pracy
Warunki wstępne
Obsługiwane wersje XNA |
|
Obsługiwane platformy |
|
Wymagana wersja cieniowania wierzchołków systemu Windows | 2.0 |
Wymagana wersja Pixel Shader dla systemu Windows | 2.0 |
Środowisko pracy
podest |
|
substancja
Pliki graficzne, pliki modeli, pliki dźwiękowe itp. użyte w grze należy wcześniej dodać do projektu.
Dodaj plik, który będzie zasobem. Obrazy i modele są w zasadzie dodawane do projektu "Content". Kliknij prawym przyciskiem myszy projekt zawartości i wybierz polecenie Istniejący element.
Otworzy się okno dialogowe Dodaj istniejący element. Wybierz pliki, które chcesz dodać, i kliknij przycisk Dodaj.
Widać, że plik został dodany do projektu, jak pokazano.
Jeśli nie chcesz dodawać go z okna dialogowego, możesz go również dodać, przeciągając i upuszczając z eksploratora. Należy jednak pamiętać, że w systemach Windows Vista i Windows 7 nie można przeciągać i upuszczać, jeśli uprawnienia uruchomionej aplikacji są różne.
Po dodaniu pliku utwórz program do jego odczytu. Podczas dodawania zasobu do projektu potok zawartości używa . .xnb, który idealnie nadaje się do wykorzystania w grach. Aby go odczytać, użyj klasy "ContentManager". Klasa ContentManager jest wbudowana w klasę Game.
Aby załadować zasób (zawartość), użyj metody "ContentManager.Load". Tym razem jest on odpowiednio odczytywany i nie jest wykorzystywany do innych celów. Ponieważ klasa, która ma zostać utworzona, różni się w zależności od formatu pliku, który ma zostać załadowany, klasa jest tworzona zgodnie z plikiem, określając "Texture2D" lub "SpriteFont" jako parametr typu metody Load. Ponadto, ponieważ parametr przekazany w argumencie jest względny w stosunku do projektu zawartości lub folderu określonego w "ContentManager.RootDirectory", należy określić nazwę pliku (bez rozszerzenia), w tym nazwę folderu (dokładnie nazwę zasobu).
Texture2D texture = this.Content.Load<Texture2D>("Texture");
SpriteFont font = this.Content.Load<SpriteFont>("Font");
Model xModel = this.Content.Load<Model>("XModel");
ContentManager.Load
metoda
Odczytuje zasób utworzony przez potok zawartości i tworzy wystąpienie klasy określonej w parametrze type. Ponadto, jeśli określisz zasób, który został już utworzony, zwróci odwołanie do istniejącego wystąpienia.
T | Bez limitu | Określ typ zasobu. Klasy, które można określić domyślnie, to "Model", "SpriteFont", "Effect", "Texture2D", "Texture" i "TextureCube", ale można również określić klasy serializowalne, takie jak "string", "List<T>" i klasy, które zostały utworzone przez użytkownika. |
assetName (Nazwa zasobu) | struna | Określ nazwę zasobu, który chcesz zaimportować. Ponieważ jest to ścieżka względna z określonego katalogu głównego, musisz zapisać ścieżkę, jeśli istnieje folder. Należy również pamiętać, że nazwa zasobu nie jest taka sama jak nazwa pliku. |
Wartości zwracane | T | Zwraca wystąpienie (T) załadowanego zasobu. Jeśli wcześniej załadowano ten sam zasób, zwraca on tylko odwołania do tego samego wystąpienia co wcześniej. |
Pozostałe wskazówki zakładają, że ładujesz zawartość, więc jeśli nie masz pewności, zapoznaj się z tą stroną.
Wszystkie kody
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
#if WINDOWS_PHONE
using Microsoft.Xna.Framework.Input.Touch;
#endif
namespace LoadResource
{
<summary>
ゲームメインクラス
</summary>
public class GameMain : Microsoft.Xna.Framework.Game
{
<summary>
グラフィックデバイス管理クラス
</summary>
private GraphicsDeviceManager graphics = null;
<summary>
スプライトのバッチ化クラス
</summary>
private SpriteBatch spriteBatch = null;
<summary>
GameMain コンストラクタ
</summary>
public GameMain()
{
// グラフィックデバイス管理クラスの作成
this.graphics = new GraphicsDeviceManager(this);
// ゲームコンテンツのルートディレクトリを設定
this.Content.RootDirectory = "Content";
#if WINDOWS_PHONE
// Windows Phone のデフォルトのフレームレートは 30 FPS
this.TargetElapsedTime = TimeSpan.FromTicks(333333);
// バックバッファサイズの設定
this.graphics.PreferredBackBufferWidth = 480;
this.graphics.PreferredBackBufferHeight = 800;
// フルスクリーン表示
this.graphics.IsFullScreen = true;
#endif
}
<summary>
ゲームが始まる前の初期化処理を行うメソッド
グラフィック以外のデータの読み込み、コンポーネントの初期化を行う
</summary>
protected override void Initialize()
{
// TODO: ここに初期化ロジックを書いてください
// コンポーネントの初期化などを行います
base.Initialize();
}
<summary>
ゲームが始まるときに一回だけ呼ばれ
すべてのゲームコンテンツを読み込みます
</summary>
protected override void LoadContent()
{
// テクスチャーを描画するためのスプライトバッチクラスを作成します
this.spriteBatch = new SpriteBatch(this.GraphicsDevice);
Texture2D texture = this.Content.Load<Texture2D>("Texture");
SpriteFont font = this.Content.Load<SpriteFont>("Font");
Model xModel = this.Content.Load<Model>(@"XModel");
}
<summary>
ゲームが終了するときに一回だけ呼ばれ
すべてのゲームコンテンツをアンロードします
</summary>
protected override void UnloadContent()
{
// TODO: ContentManager で管理されていないコンテンツを
// ここでアンロードしてください
}
<summary>
描画以外のデータ更新等の処理を行うメソッド
主に入力処理、衝突判定などの物理計算、オーディオの再生など
</summary>
<param name="gameTime">このメソッドが呼ばれたときのゲーム時間</param>
protected override void Update(GameTime gameTime)
{
// Xbox 360 コントローラ、Windows Phone の BACK ボタンを押したときに
// ゲームを終了させます
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
{
this.Exit();
}
// TODO: ここに更新処理を記述してください
// 登録された GameComponent を更新する
base.Update(gameTime);
}
<summary>
描画処理を行うメソッド
</summary>
<param name="gameTime">このメソッドが呼ばれたときのゲーム時間</param>
protected override void Draw(GameTime gameTime)
{
// 画面を指定した色でクリアします
this.GraphicsDevice.Clear(Color.CornflowerBlue);
// TODO: ここに描画処理を記述します
// 登録された DrawableGameComponent を描画する
base.Draw(gameTime);
}
}
}