そして再び、ハブラビテスにこんにちは!

ほんの数日前-XNA Frameworkを使用して
クールなゲームを作成する方法に関する一連の記事を
開始しました。自分のスタジオは持っていないので、2Dゲームに限定します。
今回は、Drawを詳しく見て、最初のパーティクルシステムを作成します。
この記事で取り上げるトピック:
- spriteBatch.Begin()およびspriteBatch.Draw()メソッド
- パーティクルシステムの実装
第二部で私は言う:
- ピクセルシェーダーとは何ですか?
- 後処理とは
- RenderTarget2Dとは何ですか?
- Displacemenet-mapを使用したシェーダーの歪み
いつものように、最初は理論、次にコードは
パイです。
SpriteBatch.Begin()メソッド
描画方法については、
以前の記事で説明しました。 これらのメソッドをもう少し詳しく見てみましょう。
spriteBatch.Begin()
spriteBatch.Begin(SpriteSortMode, BlendState, SamplerState, DepthStencilState, RasterizerState, Effect, Matrix);
これが画面上に何かを描き始める方法です。これが最後のメソッドのオーバーロードです。ここですべてを検討します。
SpriteSortMode-スプライトをソートする方法。 面白くない。
BlendStateに含まれるもの:
添加剤 -「添加剤ブレンド」の設定。 スプライトアルファチャネルを使用して、スプライトを別のスプライトと混合します。
AlphaBlend- 「アルファブレンド」の設定。 スプライトアルファチャネルを使用して、あるスプライトを別のスプライトに重ね合わせます。
NonPremultiplied- 「非
多重化アルファなしのブレンド」の設定。アルファ線の描画を使用して、スプライトを別のスプライトに重ね合わせます。
不透明 -「不透明ブレンド」に設定すると、あるスプライトを別のスプライトに「上書き」するように強制します。
SamplerStateに含まれるもの:
AnisotropicClamp-異方性フィルタリングとTextureUVのデフォルト状態を含みます-クランプ
AnisotropicWrap-異方性フィルタリングとTextureUVのデフォルト状態を含む-ラップ
...
大まかに言えば、
クランプ -テクスチャを引き伸ばし、タイルを
ラップ (繰り返し)します。
テクスチャ55x20を使用し、それを5回ストレッチ(クランプ)します。違いは
異方性/線形、ポイント :
異方性/線形 :
ポイント :
DepthStencilState-再度並べ替え、必要ありません。
RasterizerState -2Dでは、実際には必要ありません。
効果 -描画されたオブジェクトを処理するシェーダー(効果)。
マトリックス -オブジェクト変換マトリックス(たとえば、2Dカメラを実装できます)
BeginとEndの間に含まれるメソッドを検討してください。
SpriteBatch.Draw()メソッド
spriteBatch.Draw(Texture2D texture, Vector2D position, Rectangle sourceDest, Color color, float angle, Vector2D origin, Vector2D scale, SpriteEffects effects, float layerDepth);
texture-描画するテクスチャ自体。
position-画面上の位置(変換マトリックスがある場合は世界、つまり「カメラ」)。
sourceDest-テクスチャの長方形(テクスチャのどの部分を描画するか、すべての場合は
新しいRectangle(0、0、width_texture、height_texture) )
color-オブジェクトの色。
angle-回転角。
origin-テクスチャのいわゆるオフセットまたは「重心」。 つまり、テクスチャの中心をNxMピクセルだけシフトします。
スケール -XおよびYのテクスチャサイズ
効果 -テクスチャを表示するさまざまな効果。たとえば、鏡像を描くことができます。
layerDepth-レイヤーの深さ。
描画を担当する主な機能のパラメータ-把握。
パーティクルシステム
粒子の単純なシステムを書きましょう。この場合、それはトレイル(トレイル、トレイン、テール)であり、マウスの動きから残ります。
次はコードです。
新しいParticleクラスを作成します。これは単一のパーティクル(smoke、spark、
money )になり、コメント付きでリストされます。
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; using System.Diagnostics; namespace ParticleSystem { public class Particle { public Texture2D Texture { get; set; }
次に、ゲーム内のすべてのパーティクルを管理するクラスを作成する必要があります。これをParticleControllerというコメント付きのリストと呼びましょう。
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; using System.Diagnostics; namespace ParticleSystem { class ParticleController { public List<Particle> particles; private Texture2D dot;
メインクラスでは、適切な場所にLoadContent、Update、Drawを記述し、同時に各更新に対してパーティクルの生成を追加します。
particleController.EngineRocket(new Vector2(Mouse.GetState().X, Mouse.GetState().Y));
開始し、マウスを動かして、感心します:

ご存知のように、このようなシステムはさらに美しくすることができます。シェーダーを追加します。 しかし、記事の量は十分なままにしておきましょう。 記事の第2部では、独自の目的でシェーダーを使用する方法を説明します。
ソースコードと
デモを適用します。
次回まで;)UPD:記事の
2番目の部分。