<?xml version="1.0" encoding="utf-8" ?><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/" 
			xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" 
			xmlns:cc="http://web.resource.org/cc/" xml:lang="ja">
<channel rdf:about="http://alsil.blog65.fc2.com/?xml">
<title>銀色瓦版</title>
<link>http://alsil.blog65.fc2.com/</link>
<description>絵が趣味の管理人がだらだら書く日記。</description>
<dc:language>ja</dc:language>
<items>
<rdf:Seq>
<rdf:li rdf:resource="http://alsil.blog65.fc2.com/blog-entry-346.html" />
<rdf:li rdf:resource="http://alsil.blog65.fc2.com/blog-entry-345.html" />
<rdf:li rdf:resource="http://alsil.blog65.fc2.com/blog-entry-344.html" />
<rdf:li rdf:resource="http://alsil.blog65.fc2.com/blog-entry-343.html" />
<rdf:li rdf:resource="http://alsil.blog65.fc2.com/blog-entry-342.html" />
<rdf:li rdf:resource="http://alsil.blog65.fc2.com/blog-entry-341.html" />
<rdf:li rdf:resource="http://alsil.blog65.fc2.com/blog-entry-340.html" />
</rdf:Seq>
</items>
</channel>
<item rdf:about="http://alsil.blog65.fc2.com/blog-entry-346.html">
<link>http://alsil.blog65.fc2.com/blog-entry-346.html</link>
<title>なんとなくゲームプログラミング#14</title>
<description> 前回のプログラムの最終形となったもの結局ゲーム部分は完成せず、ただの落下物シミュレーションになったひたすら球が落ちてきて跳ね返るだけ地面は1時間で適当に作った3Dモデル。ボールが当たると傾くボールの衝突時の力を地面とか他のボールとかに伝播させようとしたらなんかすごいややこしくなった中央にプレイヤーキャラクターとしてののワさんを置いておいたのだが、結局ののワさんがこのシミュレーションに物体として加わる
 </description>
<content:encoded>
<![CDATA[ <img src="http://blog-imgs-35-origin.fc2.com/a/l/s/alsil/prog14.png" alt="prog14.png" border="0" width="400" height="300" /><br /><br />前回のプログラムの最終形となったもの<br />結局ゲーム部分は完成せず、ただの落下物シミュレーションになった<br /><br />ひたすら球が落ちてきて跳ね返るだけ<br />地面は1時間で適当に作った3Dモデル。ボールが当たると傾く<br />ボールの衝突時の力を地面とか他のボールとかに伝播させようとしたらなんかすごいややこしくなった<br />中央にプレイヤーキャラクターとしてののワさんを置いておいたのだが、結局ののワさんがこのシミュレーションに物体として加わる事はなかった<br /><br />結論：素人がゲームに独学でリアルな物理演算組み込もうとしても無駄 ]]>
</content:encoded>
<dc:subject>プログラム</dc:subject>
<dc:date>2009-11-23T01:29:34+09:00</dc:date>
<dc:creator>銀之助</dc:creator>
<dc:publisher>FC2-BLOG</dc:publisher>
</item>
<item rdf:about="http://alsil.blog65.fc2.com/blog-entry-345.html">
<link>http://alsil.blog65.fc2.com/blog-entry-345.html</link>
<title>なんとなくゲームプログラミング#13 また新しいゲーム</title>
<description> 学祭展示用ゲームの開発中当然XNA製Xbox360上で動かせればいいなと考えている今回のスクリーンショットは実験として作った、質量・重力・弾性係数を定義した落下物シミュレーション3次元ベクトルの反射は、入射ベクトルと接触面の法線ベクトルを与えると反射ベクトルを計算してくれるReflectメソッドがあるので超便利動いている様子をGIFアニかなにかで載せられればよかったのだけど、面倒だったので中止何も考えずに組むと、境界
 </description>
<content:encoded>
<![CDATA[ <img src="http://blog-imgs-12-origin.fc2.com/a/l/s/alsil/prog13.png" alt="prog13.png" border="0" width="400" height="300" /><br /><br />学祭展示用ゲームの開発中<br />当然XNA製<br />Xbox360上で動かせればいいなと考えている<br /><br />今回のスクリーンショットは実験として作った、質量・重力・弾性係数を定義した落下物シミュレーション<br />3次元ベクトルの反射は、入射ベクトルと接触面の法線ベクトルを与えると反射ベクトルを計算してくれるReflectメソッドがあるので超便利<br />動いている様子をGIFアニかなにかで載せられればよかったのだけど、面倒だったので中止<br />何も考えずに組むと、境界線付近で振動する。きもい<br /><br />こういうのは大抵誤差とかなんとかで単純な計算式だけでは収束しないから、まあ適当に誤差範囲でも定義して、収束するようし向ければいいのではないだろうか<br /><br />それでも振動したり突然停止する……とか思っていたら、重大な欠陥があった<br />とりあえずMSDNのチュートリアルに書かれていたことを丸々転載してみる<br /><br /><i>> なぜ、将来の位置を計算してそれをテストするのではなく、単に現在の位置で有効性をテストできないのかと疑問に思われたかもしれません。その答えは、現在の位置のみをテストした場合、無効な動きを防ぐには遅すぎるためです。テストが行われる時点で、乗り物の位置は既に更新されています。新しい位置が無効 (境界を越えるケース) であったとします。これにより、以降のテストが失敗し、結果として乗り物は現在の位置で動かなくなります。どう考えても、これはプレイヤーが制御する乗り物の最適な動作ではありません。<br />> 将来の位置を確認し、無効な動きを防止するべきでしょう。この確認により、プレーヤーは現時点では有効な位置にいるため、別のこと (バックなど) を試みることができ、動かなくなることはありません。</i><br /><br />ということで次フレームの位置を計算して判別するようプログラムを組むと、だいたいうまくいった ]]>
</content:encoded>
<dc:subject>プログラム</dc:subject>
<dc:date>2009-10-18T11:50:37+09:00</dc:date>
<dc:creator>銀之助</dc:creator>
<dc:publisher>FC2-BLOG</dc:publisher>
</item>
<item rdf:about="http://alsil.blog65.fc2.com/blog-entry-344.html">
<link>http://alsil.blog65.fc2.com/blog-entry-344.html</link>
<title>なんとなくゲームプログラミング#12</title>
<description> 1時間でできるビジュアルノベルソフトサークルの合宿でのプレゼン用フリーで出回ってるスクリプタや専用言語などによるプログラムに比べると面倒かもしれない。しかしXNAの導入としては割といい部類かも。気が向いたら詳細は後で。
 </description>
<content:encoded>
<![CDATA[ <img src="http://blog-imgs-12-origin.fc2.com/a/l/s/alsil/ss2.png" alt="ss2.png" border="0" width="400" height="300" /><br /><br />1時間でできるビジュアルノベルソフト<br />サークルの合宿でのプレゼン用<br /><br />フリーで出回ってるスクリプタや専用言語などによるプログラムに比べると面倒かもしれない。<br />しかしXNAの導入としては割といい部類かも。<br /><br />気が向いたら詳細は後で。<br /> ]]>
</content:encoded>
<dc:subject>プログラム</dc:subject>
<dc:date>2009-09-18T07:36:09+09:00</dc:date>
<dc:creator>銀之助</dc:creator>
<dc:publisher>FC2-BLOG</dc:publisher>
</item>
<item rdf:about="http://alsil.blog65.fc2.com/blog-entry-343.html">
<link>http://alsil.blog65.fc2.com/blog-entry-343.html</link>
<title></title>
<description> メタセコイア無料版ではテクスチャ貼り付けなどができないので、3Dポリゴン制作をBlenderに移行。また一から操作を覚える作業が始まる……
 </description>
<content:encoded>
<![CDATA[ メタセコイア無料版ではテクスチャ貼り付けなどができないので、3Dポリゴン制作をBlenderに移行。<br />また一から操作を覚える作業が始まる…… ]]>
</content:encoded>
<dc:subject>日記</dc:subject>
<dc:date>2009-09-16T10:21:36+09:00</dc:date>
<dc:creator>銀之助</dc:creator>
<dc:publisher>FC2-BLOG</dc:publisher>
</item>
<item rdf:about="http://alsil.blog65.fc2.com/blog-entry-342.html">
<link>http://alsil.blog65.fc2.com/blog-entry-342.html</link>
<title>なんとなくゲームプログラミング#11</title>
<description> スパロボを作っていたと思っていたら、いつのまにかダンジョン探索ゲーになっていたでござる　の巻
 </description>
<content:encoded>
<![CDATA[ スパロボを作っていたと思っていたら、いつのまにかダンジョン探索ゲーになっていたでござる　の巻<br /><img src="http://blog-imgs-29-origin.fc2.com/a/l/s/alsil/prog11.jpg" alt="prog11.jpg" border="0" width="400" height="300" /><br /> ]]>
</content:encoded>
<dc:subject>プログラム</dc:subject>
<dc:date>2009-09-10T12:09:28+09:00</dc:date>
<dc:creator>銀之助</dc:creator>
<dc:publisher>FC2-BLOG</dc:publisher>
</item>
<item rdf:about="http://alsil.blog65.fc2.com/blog-entry-341.html">
<link>http://alsil.blog65.fc2.com/blog-entry-341.html</link>
<title>なんとなくゲームプログラミング#10 グラフィクス系の話</title>
<description> お前は複数の3Dモデルを描画するために深度によるソートが必要だと思っていたようだが、別にしなくても描ける3D画面の上に、2Dのキャラの顔だったりメッセージウィンドウだったりを表示するためにSpriteBatchを使うのだが、一旦SpriteBatch.Begin()を呼び出してしまうと、GraphicsDeviceのRenderStateが変更されてしまうようで、要するに次に3Dを表示しようとしたときバグったようになる。これを解決するために、RenderStateプロパ
 </description>
<content:encoded>
<![CDATA[ お前は複数の3Dモデルを描画するために深度によるソートが必要だと思っていたようだが、別にしなくても描ける<br /><br />3D画面の上に、2Dのキャラの顔だったりメッセージウィンドウだったりを表示するためにSpriteBatchを使うのだが、一旦SpriteBatch.Begin()を呼び出してしまうと、GraphicsDeviceのRenderStateが変更されてしまうようで、要するに次に3Dを表示しようとしたときバグったようになる。<br />これを解決するために、RenderStateプロパティに値を設定し直す。<br /><br /><i><pre style="border:1px solid; padding:10px;">GraphicsDevice.RenderState.DepthBufferEnable = true;<br />GraphicsDevice.RenderState.AlphaBlendEnable = false;<br />GraphicsDevice.RenderState.AlphaTestEnable = false;<br />GraphicsDevice.SamplerStates[0].AddressU = TextureAddressMode.Wrap;<br />GraphicsDevice.SamplerStates[0].AddressV = TextureAddressMode.Wrap;<br /></pre></i><br />MSDNのサンプルを眺め回したところ、これだけ設定すれば元に戻るっぽい。 ]]>
</content:encoded>
<dc:subject>プログラム</dc:subject>
<dc:date>2009-09-04T19:47:18+09:00</dc:date>
<dc:creator>銀之助</dc:creator>
<dc:publisher>FC2-BLOG</dc:publisher>
</item>
<item rdf:about="http://alsil.blog65.fc2.com/blog-entry-340.html">
<link>http://alsil.blog65.fc2.com/blog-entry-340.html</link>
<title>なんとなくゲームプログラミング#9 シーン遷移の話</title>
<description> 深夜更新でもなんともないぜタイトル画面からゲーム本編に移ったり、フィールド画面から戦闘に移行したりすることを勝手にシーン遷移とか呼んでる。これを実現するには、なにか適当にフラグの変数を作ってswitch文で分岐させれば簡単だし、MSDNに載っているXNAを使ったゲームのサンプルでもそうなっているのだけど、以前偉大なる先輩が分岐を使いまくって階層が深くなるのはエレガントでなくてイクナイ、とおっしゃっていたので、
 </description>
<content:encoded>
<![CDATA[ 深夜更新でもなんともないぜ<br /><br />タイトル画面からゲーム本編に移ったり、フィールド画面から戦闘に移行したりすることを勝手にシーン遷移とか呼んでる。<br />これを実現するには、なにか適当にフラグの変数を作ってswitch文で分岐させれば簡単だし、MSDNに載っているXNAを使ったゲームのサンプルでもそうなっているのだけど、以前偉大なる先輩が分岐を使いまくって階層が深くなるのはエレガントでなくてイクナイ、とおっしゃっていたので、デリゲートを使って実現してみる。<br /><br />最近忘れっぽいのでメモしておく<br /><i><pre style="border:1px solid; padding:10px;">// デリゲートの名前と引数を定義するでござる<br />delegate void デリゲート(int 引数);<br /><br />class hoge<br />{<br />    // デリゲート型変数を宣言するでござる<br />    デリゲート　イベント;<br /><br />    public hoge()<br />    {<br />        // デリゲート型変数にメソッドを代入するでござる<br />        イベント = 実行するメソッド;<br />    }<br /><br />    public void イベントを呼び出すメソッド()<br />    {<br />        // デリゲートでイベントを呼び出すでござる<br />        イベント(引数);<br />    }<br /><br />    public void 実行するメソッド(int 引数)<br />    {<br />        // 実行内容を書くでござる<br /><br />        // デリゲートに次のメソッドを代入し直すでござる<br />        イベント = 次に実行するメソッド;<br />    }<br /><br />    public void 次に実行するメソッド(int 引数)<br />    {<br />        // 次に実行する内容を書くでござる<br />    }<br />}<br /></pre></i><br /><br />不思議なことにデリゲート型変数には二つ以上のメソッドも代入できるらしい。<br />すでにメソッドが代入されたデリゲート型変数に+=演算子を使って新たに代入するだけ。<br />この状態のデリゲートを呼び出すと、登録されたメソッドが順に全て実行されるとか。<br /><br />匿名メソッドやラムダ式を使うとあらかじめメソッドを宣言してなくてもデリゲートが使えるので楽。<br />定義済みデリゲートを使うとデリゲートを定義する必要もないのでさらに楽。<br /><br /><i><pre style="border:1px solid;padding:10px">// デリゲートの定義が要らないでござる<br />class hogehoge<br />{<br />    // Action&lt;T&gt;ジェネリックデリゲートは.NET Framework 2.0から使えるでござる<br />    Action&lt;int&gt; イベント;<br /><br />    public hogehoge()<br />    {<br />        // ラムダ式をデリゲート型変数に代入するでござる<br />        イベント = (引数) =><br />            {<br />                // 実行する内容を書くでござる<br /><br />                // デリゲート型変数にラムダ式を代入し直すでござる<br />                イベント = (引数) =><br />                    {<br />                        // 次に実行する内容を書くでござる<br />                    }<br />            };<br />    }<br /><br />    public void イベントを呼び出すメソッド()<br />    {<br />        イベント(引数);<br />    }<br />}<br /></pre></i><br />あれ、微妙にカオスに ]]>
</content:encoded>
<dc:subject>プログラム</dc:subject>
<dc:date>2009-09-04T03:59:15+09:00</dc:date>
<dc:creator>銀之助</dc:creator>
<dc:publisher>FC2-BLOG</dc:publisher>
</item>
</rdf:RDF>