.NET

C#2.0時代のゲームプログラミング(21)

次に、.NETで画面解像度を切り替える場合を見ていこう。 ChangeDisplaySettingsExを呼び出すところは同じだが、この第一パラメータで指定するディスプレイ名。これと、global::System.Windows.Forms.Screen.DeviceNameで表されるディスプレイ名とは同一なの…

C#2.0時代のゲームプログラミング(20)

解像度変更のためにはディスプレイを列挙する必要がある。 普通はEnumDisplayDevicesを呼び出すのだが、EnumDisplayDevicesは、NT4.0で非対応。(cf.→http://forums.belution.com/ja/vc/000/080/80.shtml) よって、このAPIを用いるのならばNT4.0かどうかのチ…

C#2.0時代のゲームプログラミング(19)

Form.LocationプロパティでLocationを変更すると内部的にはuser32.MoveWindowSetWindowPosが呼び出されるようだ。まあ、移動はもとよりさほど問題ではなくて、Form.WindowStyleをFormWindowState.Maximizedに変更したあとは、ウィンドゥの移動は一切行なえな…

C#2.0時代のゲームプログラミング(18)

仮想スクリーンでの座標を指定してウィンドゥを移動させるには、user32.MoveWindowを呼び出せば良い。 MoveWindow(form.Handle , x , y , width , height , 0);→すまん。コメント欄で教えてもらったように、Form.Locationプロパティで十分だった。 仮想スク…

C#2.0時代のゲームプログラミング(17)

まず、multi displayの座標系から調べていこう。 multi displayの仕組みは、それなりにうまく出来ている。multi displayにおいて、それぞれの画面は、画面のプロパティで見ればわかるように仮想スクリーン上に配置されている。この仮想スクリーン座標でウィ…

C#2.0時代のゲームプログラミング(16)

# sisya 『中心点のあるディスプレイで最大化してもいいかな位におもってました。 ウインドウの基点はシステムの都合(別に左下でもいいはずだし)だから、対応してあげたい機能ですね。』# yaneurao 『中心点がどの画面にも属さないということがあるんだけ…

C#2.0時代のゲームプログラミング(15)

# kcrt 『「そのアプリケーションウィンドゥが存在する画面」ってどう判定するんですか?実際デュアルディスプレイ使っているとウィンドウの(0, 0)位置で判定しているものが多いですね。でも、それだとほとんどの面積が右ディスプレイで表示されててもちょっ…

Yanesdk.NET 1.00正式リリース

YaneuraoGameSDK.NETを正式リリースした。サイトも更新した。使ってみてくれい(`ω´) Yanesdkとは?(はてなキーワードより)

C#2.0時代のゲームプログラミング(14)

今一度、前提条件を整理しておこう。これが正しく伝わっていないと、ぐだぐだな議論になってしまう。 ・multi display環境下で特定の画面をフルスクリーン化したい。 ・フルスクリーン化とは、「画面解像度の変更」+「アプリケーションの保有しているウィン…

C#2.0時代のゲームプログラミング(13)

いまどき、1万円ぐらいのビデオカードですら、dual display対応になっているので、dual displayを避けて通るわけにはいかない。かくいう私も、開発効率upのためtriple display(3台)ならぬ、quadruple display(4台)にしていたのだが、ついでなので、先日、qui…

C#でビジネスアプリ

知り合いのid:taosさん*1が、Vindというプレゼンツールを開発した。C# + Managed Direct3Dで動いている。「C# + Managed Direct3Dでここまで出来るのだ」というのを知らしめるのに十分なソフトである。 そんなわけで、そろそろC#に乗り換えてみてはどうか? …

intelli-sense

C#で開発しているとVisual Studio2005のintelli senseやsnipetは、それなりに便利だが、私の理想にはほど遠い。 「foreach」と入力してtab keyを2回押す。私の考えでは、この時点でcollectionのほうにカーソルが行かなければならない。collectionが決まれば…

C#2.0時代のゲームプログラミング(12)

OpenGLをWindowsプラットフォームで動かすのにwglほにゃららというAPIだけに頼るのは、いかにも心もとない。たとえば、texture自体のHDCが取れない。これは、textureに文字を描こうと思った場合、OpenGL自体の文字を描く機能を用いるのでなければ、いったん…

C#2.0時代のゲームプログラミング(11)

実は、この問題には、特効薬がある。あまり知られていないAPIだが(そもそもWindows環境でOpenGLを複数のウィンドゥの描画に使っているケース自体がレアなのだが)、wglShareListsというのがある。 これは、二つのRCを結びつける。これを使えば、glGenTexture…

C#2.0時代のゲームプログラミング(10)

pure C#でOpenGLのPictureBoxへの描画に成功した。C++で書かれたOpenGLのwrapper等は一切不要だ。OpenGLで描画した経験さえあれば、描画自体は出来るだろう。だけど難しいのはここからだ。 先にも説明した通り、RC(Rendering Context)をHWndに対して生成して…

C#2.0時代のゲームプログラミング(9)

.NET Frameworkのpicture boxに描画したいとすれば、このpicture boxのHandleを取得する。Handleの実体はHWNDなので(C#1.0/2.0にはtypedefがないのでIntPtrの実体が何なのかサッパリな上に間違って違うところに代入してしまいそうなのだけれど)、Win32APIのG…

C#2.0時代のゲームプログラミング(8)

描画にはOpenGL/DirectXを使う。二次元の描画をするときでも三次元の描画システムを利用するようにすれば、affine変換(上下反転、左右反転、拡大縮小etc..)が自由に行なえるようになる。 Yanesdkではlinux/MacではOpenGLを使うことにするので、Window環境で…

C#2.0時代のゲームプログラミング(7)

file systemの話が出たので、ついでにdllのpathの設定の話。 yanesdk.dllから利用しているsdl関連のdllだけで、sdl.dll , sdl_image.dll , sdl_mixer.dll , libpng.dll , zlib.dll , sdl_ttf.dllなど多数必要になる。これらが実行フォルダに入っていると邪魔…

C#2.0時代のゲームプログラミング(6)

file systemの話があがったついでに、zipファイルの話をしておこう。 Yanesdkではzipファイルをシームレスに読み込むために、このArchiverを提供する必要があった。.NET Framework2.0からはzip stream(?)をデコードするためのクラスGZipStreamが存在するので…

C#2.0時代のゲームプログラミング(5)

続いて、file system。 ゲームで使う素材をbmpやらpngやら、生のファイルを配備するわけにはいかない。例えば、アダルトゲームでCGが bmp/ フォルダにbmp形式で格納されていたら、ユーザーはゲームをする気を無くすかも知れない。 そこで、ファイルは独自の…

C#2.0時代のゲームプログラミング(4)

次に、リソースの解放をいつ行なうかについて考えていこう。 GCの挙動が嫌らしいのは、私が思うにGCが実行されているスレッドがGC専用のスレッドであることだ。つまり、非同期で、しかもそのclassをnewしたスレッドとは異なるスレッドからそのclassのfinaliz…

C#2.0時代のゲームプログラミング(3)

unmanagedなリソースに対して、GCが無力であることは、前回説明した。実際のところ、ビデオメモリやサウンドメモリ上に存在するようなmanagedなリソースに対しても前回と同様の理由によりGCは無力なのである。「managedな世界に居れば、快適に暮らせる」とい…

C#2.0時代のゲームプログラミング(2)

C++からC#になりGC*1が搭載されて、メモリ管理は楽になったように思われる。普通のコード(managed code)の世界ではそうなのだが、unmanaged codeの世界はそうとも言えない。 たとえば、サウンドやテクスチャと言ったリソースはGCに管理されたくない。なぜな…

C#2.0時代のゲームプログラミング(1)

YaneuraoGameSDK.NET(以下Yanesdk)のサイトを長らく放置していたが、実はYanesdk自体はほぼ出来上がっている。 YaneuraoGameSDK.NET version 0.11 (α1) http://yaneu.com/yaneurao/yanesdkdotnet/yanesdkdotnet0603080305.zip YaneuraoGameSDK.NET version 0…

.NET Expert #02

お情けで記事を書かせてもらった(id:yaneurao:20060111)ので、見本誌いただきました。アマゾンのデータでは3月9日発売になってますが、そろそろ書店に並んでいるのではないでしょうか。 Excel(VSTO)の有効利用、クラスライブラリの歩き方、TeamSystemによるT…

NDoc 1.3.1 in VisualStudio 2005

VisualStudioでソースのドキュメントを生成すると言えばNDocが標準だと言えるだろう。ところが、VisualStudio2005(.NET 2.0)は、NDocがまだ対応していない。*1 NDocをVisual Studio 2005 に、解決策が書かれているので、以下にまとめておく。 *1:Microsoftは…

.NETの描画が遅い理由

.NETの標準コントロールは非常に重い。id:yaneurao:20051109#cでも書いたが、Microsoft MVPの間でも度々そういう議論を見かける。 id:ladybug:20060206 id:NyaRuRu:20060203#p2 早い話、現時点では、どうしようもない。私の場合、自前でコントロールを作って…

mixin in C#2.0

どや!(`ω´)っ http://blogs.wankuma.com/yaneurao/archive/2006/01/12/20523.aspx

VisualStudio 2005 Express Edition

いま、技術評論社の「.NET Expert #02」向けにC#2.0でmix-inを行なう記事を書いているのだけど、VisualStudio 2005自体、あまり触ってなくて使いかた自体よくわからんのだよ!(`ω´) まず、Debug/Releaseを切り替えられなくて困った。ツール→オプション→「す…

mix-in in C#2.0(予告編)

C#1.0/2.0のようにinterface継承しか出来ない言語系においてmix-inは必要不可欠な機能なのだがC#2.0ではmix-inは実装されていない。これをどう解決するか?という記事を技術評論社の(2006年1〜2月発売の)「.NET Expert #02」に書く予定だ。 近々、Web上で、a…