Загрузка ресурсов (содержимого)
сводка
Описывает, как импортировать ресурсы, такие как файлы изображений и файлы моделей.
Условия эксплуатации
Необходимые условия
Поддерживаемые версии XNA |
|
Поддерживаемые платформы |
|
Требуемая версия вершинного шейдера Windows | 2.0 |
Требуемая версия пиксельного шейдера Windows | 2.0 |
Условия эксплуатации
платформа |
|
вещество
Файлы изображений, моделей, звуковые файлы и т.д., используемые в игре, должны быть добавлены в проект заранее.
Добавьте файл, который будет ресурсом. Изображения и модели в основном добавляются в проект «Контент». Щелкните правой кнопкой мыши проект «Ресурсы» и выберите «Существующий элемент».
Откроется диалоговое окно Добавить существующий элемент. Выберите файлы, которые вы хотите добавить, и нажмите кнопку «Добавить».
Вы увидите, что файл добавлен в проект, как показано на рисунке.
Если вы не хотите добавлять его из диалогового окна, вы также можете добавить его, перетащив его из проводника. Однако обратите внимание, что в Windows Vista и Windows 7 вы не можете перетаскивать, если разрешения запущенного приложения отличаются.
После того, как вы добавили файл, создайте программу для его чтения. При добавлении ресурса в проект конвейер содержимого использует . .xnb, который отлично подойдет для использования в играх. Для его чтения используйте класс "ContentManager". Класс ContentManager встроен в класс Game.
Для загрузки ресурса (контента) используется метод "ContentManager.Load". На этот раз он читается надлежащим образом и не используется для других целей. Поскольку создаваемый класс различается в зависимости от формата загружаемого файла, класс создается в соответствии с файлом путем указания "Texture2D" или "SpriteFont" в качестве параметра type метода Load. Кроме того, поскольку параметр, передаваемый в аргументе, относится к контентному проекту или папке, указанной в "ContentManager.RootDirectory", необходимо указать имя файла (без расширения), включая имя папки (имя ресурса, если быть точным).
Texture2D texture = this.Content.Load<Texture2D>("Texture");
SpriteFont font = this.Content.Load<SpriteFont>("Font");
Model xModel = this.Content.Load<Model>("XModel");
ContentManager.Load
метод
Считывает ресурс, созданный конвейером содержимого, и создает экземпляр класса, указанного в параметре type. Кроме того, если вы укажете ресурс, который уже был создан, он вернет ссылку на существующий экземпляр.
T | Без ограничений | Укажите тип актива. Классы, которые могут быть указаны по умолчанию, включают "Model", "SpriteFont", "Effect", "Texture2D", "Texture" и "TextureCube", но вы также можете указать сериализуемые классы, такие как "string", "List<T>", и классы, которые вы создали сами. |
assetName (имя_актива) | струна | Укажите имя ресурса, который вы хотите импортировать. Так как это относительный путь из указанного корневого каталога, то нужно записать путь, если есть папка. Кроме того, обратите внимание, что имя ресурса не совпадает с именем файла. |
Возвращаемые значения | T | Возвращает экземпляр (T) загруженного ресурса. Если вы загружали тот же ресурс ранее, он возвращает только ссылки на тот же экземпляр, что и раньше. |
Другие советы предполагают, что вы загружаете контент, поэтому, пожалуйста, обратитесь к этой странице, если вы не уверены.
Все коды
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);
}
}
}