Зареждане на ресурси (съдържание)
резюме
Описва как да импортирате ресурси, като например файлове с изображения и файлове с модели.
Работна среда
Предпоставки
Поддържани XNA версии |
|
Поддържани платформи |
|
Необходима версия на шейдъра за върхове на Windows | 2.0 |
Необходима версия на засенчващия пиксел на Windows | 2.0 |
Работна среда
платформа |
|
вещество
Файлове с изображения, файлове с модели, звукови файлове и т.н., използвани в играта, трябва да бъдат добавени към проекта предварително.
Добавете файл, който ще бъде ресурс. Изображенията и моделите основно се добавят към проекта "Съдържание". Щракнете с десния бутон върху проекта "Съдържание" и изберете Съществуващ елемент.
Отваря се диалоговият прозорец Добавяне на съществуващ елемент. Изберете файловете, които искате да добавите, и щракнете върху бутона Добави.
Можете да видите, че файлът е добавен към проекта, както е показано.
Ако не искате да го добавите от диалоговия прозорец, можете също да го добавите чрез плъзгане и пускане от изследователя. Имайте предвид обаче, че в Windows Vista и Windows 7 не можете да плъзгате и пускате, ако разрешенията на стартираното приложение са различни.
След като добавите файла, създайте програма, която да го прочете. Когато добавяте ресурс към проект, тръбопроводът за съдържание използва . .xnb файл, който е идеален за използване в игри. За да го прочетете, използвайте класа "ContentManager". Класът ContentManager е вграден в класа на играта.
За да заредите ресурс (съдържание), използвайте метода "ContentManager.Load". Този път тя се чете по подходящ начин и не се използва за друга цел. Тъй като класът, който ще бъде създаден, се различава в зависимост от файловия формат, който ще се зарежда, се създава клас според файла, като се посочва "Texture2D" или "SpriteFont" като параметър на типа на метода 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>" и класове, които сте създали сами. |
име на актив | низ | Задайте името на актива, който искате да импортирате. Тъй като това е относителен път от указаната главна директория, трябва да напишете пътя, ако има папка. Също така имайте предвид, че името на актива не е същото като името на файла. |
Върнати стойности | 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);
}
}
}