コードスペランカー

ゲーム開発日誌など

C#

DLLの種類について

DLLにも色々あるようでC#でつかえるDLLとそうじゃないものがあるようだ。 1、Win32 一昔まえの最も一般的なDLLの形だと思われる。何も考えずにC++あたりでDLLをつくるとこの形式になる。しかしこの形式ではC#では参照ができないようで利用することができな…

マルチコア対応のプログラミング

「CPUの数を知る」でCPUの数を見てからマルチスレッドプログラムでどうにかしようとか考えていたが、どうやら.NET4.0ではParallelクラスという便利な並列処理クラスが提供されているようだ。 using System; using System.Collections.Generic; using System.…

ゲーム内でのポリゴンをGPUベースで描画する

DrawPolygonIndexed3D_UseVertexBufferという関数がある。この関数をつかうとGPUベースでのポリゴンの描画が可能だ。DrawPolygonIndexed3DではCPUベースなのでGUPベースより処理速度が劣る感がある。実際には頂点シェーダ2.0に対応したグラボが必要なようで…

日本語でもいけるらしい

C#

namespace 日本語テスト { class テストクラス { public static void 書く(string 文字列) { Console.WriteLine(文字列); } } } このコードが通るので、英語名に困ったら日本語でもいける。 入力補間がうまく働かなかったりするので使わないと思うけど一応メ…

アンセーフコード

C#ではポインタを扱う際には、このコードが危険であることを明示することが必要なようだ。C#単体ではまず使わないが、CやC++で書かれたDLL等を使うときには必要になる処理だ。 unsafe { int i = 0; int* p = &i; } という具合に書いたりする。 特にvoid型の…

ソート処理

C#

Listを使った場合のソート処理だがSortメソッドがよういされててデリゲートしてやれば自分で勝手にクイックソートアルゴリズムをつかいソートしてくれる・・・・・らしい。 // List<MyClass> listの場合 list.Sort(delegate(MyClass obj1, MyClass obj2) { return obj</myclass>…

DXライブラリでのマルチスレッド

以前、DXライブラリを使ってのマルチスレッドプログラムは無理っぽいと書いたが、なんとかいけそうなので、メモしておく。 // マルチスレッドフラグ DX.SetMultiThreadFlag(DX.TRUE); // DXライブラリの初期化 DX.DxLib_Init(); という感じに書いておく…

Listの管理を失敗すると・・・・

Listの中身は配列なのだが、こいつの管理に失敗するとメモリの中身がクラッシュするらしい。クラッシュの規模は配列の中身だけじゃなく、その配列をもつオブジェクトにも影響を与えるようで、どこがどうなったのかよく分からんが、ついさっきまで参照してい…

DXライブラリで好きなフォントを使いたい

DXライブラリを使ってると、システムにインストールされているフォントは使用可能なのだが、されてないフォントは当然使用できない。ユーザーが俺の使って欲しいフォントを持っているをは限らないし、添付したフォントファイルを一々インストールしろとも…

ってなわけで、ソートをすることにしたわけだが

DXライブラリの癖の続き ソートが必要になったので、適当にソートしてみることにした。 手始めに、Listを新たに作って、挿入していく形式だ。当然ながらむちゃくちゃ遅かった。Listは挿入可能だが、元が配列なだけに、むちゃくちゃ遅い、要素数が増えるとさ…

XNAではどこまでポリゴン描けるの?

ってわけで、実験 新規プロジェクトを作成して フィールドに変数を追加 BasicEffect effect; //デバグ用FPS表示 private SpriteFont _font; private double _fps; private double _updateInterval = 1.0; private double _timeSinceLastUpdate = 0.0; privat…

作り捨てても大丈夫そうなオブジェクト

int、floatといった基礎的なオブジェクトは大丈夫っぽい listとかはけっこう気を使う必要がありそう

XNA4.0でのポリゴン描画

とりあえず、単純にポリゴンを描画できるところまで来たのでメモする //頂点データの定義 VertexBuffer vb = new VertexBuffer (_graphics.GraphicsDevice, typeof(VertexPositionColor), _vatexData.Length, BufferUsage.None); //エフェクト宣言 BasicEffe…

描画の重さ

処理の方法や手順をいろいろ変えてみた結果 「表示する」という処理そのものの重さであるような印象を受けるたとえば、4頂点しかもたないビルボード1枚の描画と50頂点ほどのメッシュでも1つを描画する処理にかかる時間的なコストがあまり変わらない印象…

XNAでの描画処理3

前回の続き 前々回で誤解していた部分が判明 重たくなっている原因の処理は、プリミティブを利用したポリゴン描画部分であることが判明。具体的には、ポリゴンを描画するためのエフェクトを宣言している BasicEffect effect = new BasicEffect(Game1.graphic…

XNAでの描画処理2

前回での失敗を解決。 ゲーム内でポリゴンを作って使おうと思うと、設定の重複が激しそうなので、それっぽい板ポリゴンを用意して使うことにした。 これで、速度面は解決したと思う。これで、だいぶソースがすっきりした

なぞの境界線

ビルボードの実装をやってみて、うまくいっているみたいなので 透過PNG画像を張ったところ、透過部分と非透過部分の間に謎の境界線が発生した。この境界線はどうやらGraphicsDevice.Clearで塗りつぶしたときの色なようだが、なぜこんなことが発生するのかま…

XNAでの描画処理

3D関連は、やったことがないに等しい俺が挑戦!!XNAでの描画処理は一律Game1.Drawメソッドに記述することになる 3次元の処理を2次元に描画するためには、いくつかステップを踏む必要があって その中に、カメラの設定とか、材質の設定とかいろいろあって、…

ArrayListを使った自分自身の削除

C#

最近C#をはじめたので、そっちの勉強ArrayListにいっぱい詰め込んで 詰め込んだものを順番に処理 そして、今処理してるやつをArrayListから削除したいと思ったときに foreach (Object it in obj) { obj.Remove(it); } とかやると、エラーが出て使えない。 そ…