
初心者のゲーム開発者のみなさん、そして素敵な人々のみなさん、こんにちは。 今日は、すばらしいXNAフレームワーク(dotNetランタイムランタイムツールキット)を紹介します。 C#でプログラムします。
XNAをより詳しく紹介するために、単純な「音楽的な」2Dおもちゃを書くことをお勧めします。 残りはカットの下にあります。
ウィキペディアの簡単な説明
Microsoft XNA (English
XNA's Acronymed )
-Microsoftによって作成され、コンピューターゲームの開発と管理を容易にする、制御されたランタイム(.NET)を備えたツールのセット。 XNAは「ボイラープレートコードの繰り返し」の記述からゲーム開発を解放するよう努めています
これには何が必要ですか?
1)Fresh DirectX(
例:2010年6月 )
2)Microsoft Visual C#2010 EXPRESS(
無料ライセンス )
3)
Microsoft XNA Game Studio 4.0このレッスンで分解して実行するものは何ですか?
- XNA Frameworkアセンブリを接続する
- 空白の背景ペイントアプリケーションを作成する
- コンテンツのアップロードを学ぶ
- サウンドの操作方法を学びます。
- グラフィックスの使用方法を学ぶ
どのゲームを実装しますか?
ゲームの仕組みは狂気に単純です。 このゲームの場合、意味は音楽に基づいて構築され、Isaac Shepard-Leaves in the Windの構成が使用されます。 マウスで「ノート」をキャッチする必要があります。マウスの速度と数は、おおよそゲームの「ビジュアライザー」と言えば、音楽の現在の位置に依存します。 変更には、
通常 、
赤 (敵)、
紫 (力)、
点滅 (すべてが黄色に変わる)、
黄色 (スコア付けとサイズの速度を上げる)の5種類のノートがあります。
空のプロジェクトをまとめる
まず、必要なすべてのコンポーネントを順番に配置してから、Microsoft Visual C#2010 EXPRESSを起動し、Windows Game(4.0)プロジェクトを作成してmusic_catchと呼びます。
空のプロジェクトが作成されます。これは、コンパイル時にアプリケーションの「画面」をクリアするだけなので、新しいプロジェクトの構造を詳しく見てみましょう。
music_catchプロジェクトは、アプリケーションの「ロジック」です。
Game1.cs-アプリケーションのメインクラス
。Microsoft.Xna.Framework.Gameから継承され
ます。Program.csは、アプリケーションへの「エントリポイント」であり、私たちにとって興味深いものではありません。
music_catchContentプロジェクトはアプリケーションの「コンテンツ」であり、リソースをそこに配置します。
Game1.csを詳しく見てみましょ
うその中で、次のような主な機能を強調表示できます。
Game1()は、クラスのコンストラクターです。
Initialize() -アプリケーションの初期化。
LoadContent() -コンテンツのロード。
UnloadContent() -コンテンツを
アップロードします。
更新(GameTime gameTime) -アプリケーションロジック(物理など)を更新します
Draw(GameTime gameTime) -ゲームをレンダリングします。 注意、描画の操作はここでのみ実行する必要があります。
空のプロジェクトが組み立てられました。先に進み、アプリケーションにリソースを追加し、必要なすべてのリソースをmusic_catch \ music_catchContentフォルダーに「スロー」します。 この場合、5つのPNGファイルと1つの音楽伴奏です。 これをすべてプロジェクトに追加します。
同じ場所でフォントを作成し、SpriteFont1.spritefontの本体で名前とサイズを指定します。
<FontName>Segoe UI Mono</FontName> <Size>14</Size>
将来のコンテンツの変数を作成します。
private List<Texture2D> MelList; private Texture2D mouse; private Song song; private SpriteFont font;
そして、それをLoadContent()にロードします:
MelList = new List<Texture2D>(); for(int a = 1; a <= 5; a++) MelList.Add(Content.Load<Texture2D>("mel" + a)); mouse = Content.Load<Texture2D>("mouse"); song = Content.Load<Song>("Leaves_in_the_Wind"); font = Content.Load<SpriteFont>("SpriteFont1");
ところで、コンテンツは次のようにロードされます。Content.Load<>( "asset")を呼び出します。
コンテンツプロセッサは三角形の括弧で示されています。この場合、Texture2D、Song、SpriteFontです。 プロセッサを使用できます。これについては後で説明します。
コンテンツが読み込まれ、Game1()コンストラクターに移動して、以下を記述します。
graphics = new GraphicsDeviceManager(this); graphics.PreferredBackBufferWidth = 800;
アプリケーションが初期化されます。
「ゲームロジック」を書く
次に、パーティクルシステムのコントローラーとパーティクル自体(注)を作成する必要があります。これらをマウスで見事にキャッチします。
Catcher(パーティクル自体)とCatcherHolder(パーティクルシステム)の2つのクラスを作成します。
コメント付きのキャッチャーリスト:
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; namespace MusicCatch { public class Catcher { public Texture2D Texture { get; set; }
コメント付きのCatcherHolderリスト:
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; namespace MusicCatch { class CatcherHolder { private Random random;
Constant.csのリスト:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace MusicCatch { public class Constanst { public const float BEAT_COST = .4f;
神秘的なバッテリーとは何か、なぜ必要なのかを説明します。 「音楽」のスペクトルについて話しましょう。
音楽信号は、オーディオシステムにとって重要な要素です。 より正確に-そうではありません。 スピーカーは音楽を聴かないで、脳によって復元され、多くの周波数成分を含む複雑な信号を受け取ります。
ダック、アイデアは、各更新プログラムの「頻度」を聞いて、たとえばVisualizationDataなどに書き込むことです。 単純に、0fから1fの範囲の128要素の配列に入れます。
これはどのように使用できますか?各更新:配列の値は音楽に従って変化します。要素の値が0.6fを超える場合、128個の要素すべてをチェックし、Beat関数を呼び出してWave(イベントが発生した配列要素のインデックス)を渡す必要があります。 すべてが良好です。Beatでメモを作成できます。 しかし、同じインデックスで値が0.6fを超える3つの更新が連続しており、その結果、1秒あたり100500個のパーティクルがあると想像してください。 このようなことが起こらないようにするには、バッテリーを使用します。 その意味は単純です:ビート中、定数BEAT_COSTは対応するWaveインデックスのバッテリーアレイのセルから削除されます。 各アップデートは、すべてのバッテリーセルにACCUMULATE_SPEEDを追加します。 Beatを呼び出す前に、条件が満たされているかどうかが確認されます-バッテリー値> ACCOMULATOR_REACTION、もしそうなら、Beatを呼び出します。 これにより問題が解決します。
ところで、BEAT_REACTIONは値です。その後、Beatを呼び出す価値があるかどうかを確認する必要があります。
以下は、GameLogic(Game1)の完全なリストです。 たくさんのコードがありますが、コメントに書いてみます。
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; namespace MusicCatch { public class Game1 : Microsoft.Xna.Framework.Game { GraphicsDeviceManager graphics; SpriteBatch spriteBatch; private List<Texture2D> MelList; private Texture2D mouse; private CatcherHolder m_cHolder; MediaLibrary mediaLibrary;
これはとても簡単なおもちゃです。
XNA 4.0および
.NETは、ユーザーのエンドマシンにインストールする必要があり
ます 。
リンク:
ゲーム自体 (
直接 )|
ソースコード (
直接 )|
XNA Frameworkエンドユーザースクリーンショット:
PSアイデアは私のものではなく、そのようなゲームはすでにフラッシュの下でリリースされています。 このゲームは記事専用に作成されたため、これ以上の開発は行われません。PSSまた、私はXNA /レッスンを理解するのに役立ちます。これは、個人のhabrまたはプロファイル内の連絡先に書いてください。