差分

ナビゲーションに移動 検索に移動

リセットマラソン

6,413 バイト除去, 2018年2月7日 (水) 04:52
ページの作成:「'''リセットマラソン'''とは、ゲームにおいて、初期キャラクターなどが乱数で決定する場合に、目標物が出現するまでリセッ...」
IndexBufferクラスは、[[ポリゴン]]を表示するのに使う[[頂点バッファ]]の無駄を省く[[インデックスバッファ]]を効率的に管理するクラスである。[[MonoGame/クラスライブラリ/VertexBufferクラス|VertexBufferクラス]]と同様に[[グラフィックボード]]上の[[VRAM]]に事前に展開しておくなどの機能を持つ。'''リセットマラソン'''とは、ゲームにおいて、初期キャラクターなどが乱数で決定する場合に、目標物が出現するまでリセットしまくることをいう。
== 継承 ==* System.Object** [[MonoGame/クラスライブラリ/GraphicsResourceクラス|Microsoft.Xna.Framework.Graphics.GraphicsResource]]*** [[MonoGame/クラスライブラリ/IndexBufferクラス|Microsoft.Xna.Framework.Graphics.IndexBuffer]]**** [[MonoGame/クラスライブラリ/DynamicIndexBufferクラス|Microsoft.Xna.Framework.Graphics.DynamicIndexBuffer]]リセットマラソンはウィザードリィなどで有名で、高いボーナスポイントが得られるまで延々とキャラクター作成を繰り返し数時間を擁するなどということもあった。
== 名前空間 ==* [[MonoGame/クラスライブラリ/Microsoft.Xna.Framework.Graphics名前空間|Microsoft.Xna.Framework.Graphics名前空間]] == 構文 == public class IndexBuffer : GraphicsResource == コンストラクタ =={| class="wikitable"|+!! 名称! 概要|-| protected! style="white-space:nowrap;text-align:left" | IndexBuffer(GraphicsDevice, Type, int, BufferUsage, bool)| |-| protected! style="white-space:nowrap;text-align:left" | IndexBuffer(GraphicsDevice, IndexElementSize, int, BufferUsage, bool)| |-| public ! style="white-space:nowrap;text-align:left" | IndexBuffer(GraphicsDevice, IndexElementSize, int, BufferUsage)| |-| public ! style="white-space:nowrap;text-align:left" | IndexBuffer(GraphicsDevice, Type, int, BufferUsage)| |} == プロパティ =={| class="wikitable"|+!! 名称! 概要|-| public ! style="white-space:nowrap;text-align:left" | BufferUsage ||-| public! style="white-space:nowrap;text-align:left" | GraphicsDevice| (GameResourceクラスから継承)|-| public! style="white-space:nowrap;text-align:left" | IndexCount||-| public! style="white-space:nowrap;text-align:left" | IndexElementSize||-| public! style="white-space:nowrap;text-align:left" | IsDisposed| (GameResourceクラスから継承)|-| public! style="white-space:nowrap;text-align:left" | Name| (GameResourceクラスから継承)|-| public ! style="white-space:nowrap;text-align:left" | Tag| (GameResourceクラスから継承)|} == メソッド =={| class="wikitable"|+!! 名称! 概要|-| public! style="white-space:nowrap;text-align:left" | Dispose()| (GameResourceクラスから継承)|-| protected! style="white-space:nowrap;text-align:left" | Dispose(bool)| 派生クラスを作る場合は自前管理のリソースの破棄を実装する必要がある。|-| protected! style="white-space:nowrap;text-align:left" | Finalize| (GameResourceクラスから継承)|-| public! style="white-space:nowrap;text-align:left" | GetData<T>(int, T[], int, int)| このインデックスバッファからインデックスを取得する。|-| public! style="white-space:nowrap;text-align:left" | GetData<T>(T[], int, int)| |-| public! style="white-space:nowrap;text-align:left" | GetData<T>(T[])| |-| protected internal! style="white-space:nowrap;text-align:left" | GraphicsDeviceResetting| GraphicsDeviceがリセットされGPU上のリソースを再作成する必要があるときに呼ばれる。|-| public! style="white-space:nowrap;text-align:left" | SetData<T>(T[], int, int)| この頂点バッファに頂点データを設定する。大雑把に言えば頂点データの配列をメインメモリからVRAMにコピーする。|-| public! style="white-space:nowrap;text-align:left" | SetData<T>(T[])| |-| public! style="white-space:nowrap;text-align:left" | SetData<T>(int, T[], int, int)| |-| protected! style="white-space:nowrap;text-align:left" | SetDataInternal<T>| |-| public ! style="white-space:nowrap;text-align:left" | ToString| (GameResourceクラスから継承)|} == イベント =={| class="wikitable"|+!! 名称! 概要|-| public| Disposing| (GameResourceクラスから継承)|} == 使用例 ==まず[[MonoGame/クラスライブラリ/VertexBufferクラス|VertexBuffer]]を作ってSetDataする。次にIndexBufferを作ってSetDataする。IndexBufferは配列型と[[MonoGame/クラスライブラリ/IndexElementSize列挙体|IndexElementSize列挙体]]が食い違わないように注意すること。また[[配列]]の[[オーバーフロー]]にも注意。<source lang="csharp"> // 頂点データを作成する var vertices = new VertexPositionColor[4]; vertices[0] = new VertexPositionColor(new Vector3(-10, -10, 0), Color.Red); vertices[1] = new VertexPositionColor(new Vector3(-10, +10, 0), Color.Green); vertices[2] = new VertexPositionColor(new Vector3(+10, +10, 0), Color.White); vertices[3] = new VertexPositionColor(new Vector3(+10, -10, 0), Color.Blue);  // 頂点データをGPUに送り込む _vertexBuffer = new VertexBuffer(_graphics.GraphicsDevice, VertexPositionColor.VertexDeclaration, vertices.Length, BufferUsage.None); _vertexBuffer.SetData(vertices);  // 16ビット配列のインデックスバッファを作成する var indeces = new short[6]; indeces[0] = 0; indeces[1] = 1; indeces[2] = 2; indeces[3] = 0; indeces[4] = 2; indeces[5] = 3;  // インデックスデータをGPUに送り込む _indexBuffer = new IndexBuffer(_graphics.GraphicsDevice, IndexElementSize.SixteenBits, indeces.Length, BufferUsage.None); _indexBuffer.SetData(indeces);</source> 描画するときは、GraphicsDeviceクラスのSetVertexBufferメソッドでVertexBufferを読み出し、続いてGraphicsDevice.Indicesプロパティに[[インデックスバッファ]]を設定し、DrawIndexedPrimitivesメソッドで描画する。<source lang="csharp"> // 描画  _graphics.GraphicsDevice.SetVertexBuffer(_vertexBuffer); _graphics.GraphicsDevice.Indices = _indexBuffer;  foreach (var pass in _effect.CurrentTechnique.Passes) { pass.Apply(); _graphics.GraphicsDevice.DrawIndexedPrimitives( PrimitiveType.TriangleList, // 三角形の秘密はね… baseVertex: 0, // vertex側のはじまり startIndex: 0, // index側のはじまり primitiveCount: _indexBuffer.IndexCount / 3 // 全部三角形なので単純に3で割る ); }</source> == 関連項目 ==* [[インデックスバッファ]]* [[MonoGame/クラスライブラリ/GraphicsResourceクラス]]** [[MonoGame/クラスライブラリ/VertexBufferクラス]]** [[MonoGame/クラスライブラリ/IndexBufferクラス]]* [[MonoGame/クラスライブラリ/IVertexTypeインターフェイス]]** [[MonoGame/クラスライブラリ/VertexPositionColor構造体]]** [[MonoGame/クラスライブラリ/VertexPositionTexture構造体]]** [[MonoGame/クラスライブラリ/VertexPositionColorTexture構造体]]** [[MonoGame/クラスライブラリ/VertexPositionNormalTexture構造体]] [[category: MonoGame]]最近のiOSやAndroid向けのスマホゲームでのリセットは「アプリを消して再インストール」が基本となるため、リセマラ大前提の作りにするとアプリストアにおけるダウンロード数が伸びる(Androidではデータ全消しでもいける)。ただし、あまりの面倒臭さに利用者がゲーム本編を始めるまえに離れる原因にもなる両刃の剣である。
匿名利用者

案内メニュー