ゲームが作れるようになるまでがんばる日記

ゲーム制作のことを中心にゲームに関することを書いています

VisualC#

コントロールでキー入力の判定

あるコントロールにフォーカスがあるときにキーが押されたかどうかの判定には、KeyDown,KeyPress,KeyUpイベントを使う。 KeyPressは文字以外のキーでは発生しないことに注意。最初、Deleteキーの判定に使おうとして、何故動かないのか悩んでしまった。 KeyPr…

ListBoxでの例外発生その2

またListBoxでの例外発生に悩む。 SelectionModeプロパティの値をOneにして選択可能な個数を1個にしたところ、複数選択可能なときには例外が発生しなかったのに、発生するようになってしまった。 うーむ、詳しくListBoxの動作を知る必要がありそうだ。

ListBoxの項目削除

ListBoxに登録された項目を削除するルーチンを作成。リストの途中のものを削除したら、そこが空白にはならずに詰めてくれた。空いたところを詰めてずらすルーチンを書かなくてはいけないと思っていたので、これは楽だ。

ListBoxでの例外発生

ListBoxを使ったプログラムを書いてテストしていたところ、ListBoxの項目を選択したときに例外が発生。次のようなエラーが。 「この列挙子がバインドされている一覧は変更されています。列挙子は、一覧が変更しない場合に限り使用できます。」 たしかにListB…

書式を指定した文字列の描画

レイアウトを指定して文字列を描画したい場合は、StringFormatクラスを使う。 たとえば、右揃えにしたい場合はStringAlignment.Farを指定して、次の通り。 Graphics graphics; Font drawFont; StringFormat stringFormat = new StringFormat(); stringFormat…

文字列の描画

文字列の描画はGraphicsクラスのDrawStringで出来る。オーバーロードされたいろんなタイプがあるが、フォント、ブラシ、座標を指定する方法は次の通り。 Graphics graphics; Font drawFont = new Font("Arial", 16); graphics.DrawString("test", drawFont, …

Graphicsオブジェクトで円の描画

Graphicsオブジェクトで円の描画をしようと思い、インテリセンスで表示されたメソッドを見てみると、それらしいものが見あたらない。てっきりCircleと名のついたものがあると思ったのに。 ヘルプで見てみると、円ではなく楕円を描くDrawEllipseメソッドを使…

ListBoxで選択項目の取得

ListBoxの項目が選択されたときにはSelectedIndexChangedイベントが発生する。そして、SelectedItemプロパティで取得された項目が取得できる。複数選択されているようなときは試してみたところ、先頭の項目が取得できるようだ。 複数選択されているときそれ…

ListBoxで項目選択

ListBoxの項目を選択する方法を制御するには、SelectionModeプロパティの値を変更すればよい。 Noneにすれば選択できないようになり、Oneなら一つ選択可能。複数選択する場合は、MultiSimpleかMultiExtendedにする。 MultiSimpleにすると、方向キーで項目を…

PictureBoxに線を描く

PictureBoxのImageプロパティにビットマップを作成して割り当て、Graphicsオブジェクトを作成する。このGraphicsオブジェクトを用いて線の描画などの操作を行う。 pictureBox1.Image = new Bitmap(pictureBox1.Width, pictureBox1.Height); Graphics graphic…

invalidate

コントロールの再描画はinvalidateメソッドを使う。ヘルプによると「コントロールの特定の領域を無効にし、そのコントロールに描画メッセージを送信します。 」とある。 しかし、PictureBoxコントロールを見ていると、UpdateやRefreshというメソッドもある。…

ToString()

ListBoxに追加したオブジェクトの表示はToStringメソッドによって行われるので、文字列やintなどを登録したときはそのまま内容が表示されるが、オリジナルの型を登録したときはToStringをオーバーライドして表示したい内容を書けばよい。 たとえば、座標を表…

ListBox

フォームにリストを表示し、ユーザーが選択できるようになるコントロール。 ListBoxへ項目の追加はAddメソッド、任意の位置に追加する場合はInsertメソッドを使う。 ListBox1.Items.Add("Test"); ListBox1.Items.Insert(0,"Test"); 項目の削除はRemoveメソッ…

イベント、KeyDown,KeyPress,KeyUp

コントロールにフォーカスがあるときに、キーが押されたときに発生するイベント。 ボタンにフォーカスがあるときに文字キーやスペースキーを押したら、KeyDown,KeyPress,KeyUpの順にイベントが発生した。Enterの場合はKeyUpのみ。 フォームで受け取るとか、…

コントロール

フォームにいくつかのコントロールを貼り付けて、インターフェース部分の作成中。ぺたぺたと貼り付けていくだけでツールが形になっていくのは楽だし、面白い。 しかし、ライブラリと同様にコントロールもたくさんあり、どんな機能のものがあるか把握していな…

Point構造体

2次元座標のデータを格納するためにPointという名前の構造体を作ったが、ふと宣言を無効にしてみてコードを書いたらインテリセンスでPointが出てきたので、すでにPoint構造体が用意されていることに気が付いた。 ということでヘルプで見てみると、クラスライ…

アプリケーションの終了

プログラムからアプリケーションを終了する方法はApplicationクラスのExitメソッドを呼べばよい。 Application.Exit(); メインフォームをCloseメソッドで閉じてもアプリケーションを終了させることが出来る。 ApplicationクラスのExitメソッドで終了した場合…

ソリューションのクリーン

中間ファイルや出力ファイルを削除するクリーンコマンド(メイクファイルの場合は make clean)が VisualStudio .NET2003 ではビルドのメニューにあったはずなのに Visual C# Express Edition では見当たらない。ヘルプファイルには項目があったのに。 調べて…

フォームのソース

VisualStudioでWindowsアプリケーションを新規作成すると、自動的にForm1という名のフォームが作成され、それはForm1.csに記述されている。 で、このソースでForm1のクラスが記述されている位置より前に別のクラスを宣言するとエラーとなってしまう。VisualS…

キーバインドその後

キーバインドをEmacsに設定できて、これで使いやすくなると思っていたが、使い始めるといろいろな点で気になる点が。行や選択部分のカットをするときの動作が普段使っているものとちょっと挙動が違っていたり、Ctrl+Hが前の文字の削除になっていなかったり。…

キーバインドの変更

VisualStudioの環境で気に入らなかったのがテキスト入力のキーバインド。普段Emacs系のエディタを使っているのでキーバインドがまったく異なるので非常に使いづらかった。たとえば、Emacs系では一つ上の行へ移動するのにCtrl+Pを使うのだが、これがVisualStu…

変数名の変更

コーディングしているときに変数名を変えたくなったので、定義しているところを変更したら見慣れぬアイコンが。クリックしてみると、「名前が変更されたオブジェクトへの参照を更新するオプション」と。これで変数が使われているところも変更することができ…

プロジェクト依存関係

なんのことは無い、プロジェクトの依存関係がただしく設定されていないだけだった。 ソリューションエクスプローラのソリューションで右クリックして"プロジェクト依存関係"を選択。テストプログラムがSDKに依存していることを設定すると、ビルドの順序がSDK…

ソリューションのビルドとデバッグ開始

いろいろテストしていて、VisualC#で少し気になることが。 ソリューションにはYanesdkのソースが追加されていて、SDKのソースを変更しながらテストプログラムをデバッグ実行しているのだけれども、何故か1回目の実行ではSDKに変更した内容が反映されず、2回…

デバッグ出力

VisualC#は統合環境で強力なデバッガがついているため、簡単にブレークポイントを置いてステップ実行やそのときの変数の中身を見ることが出来る。でもやっぱり、ログを取ったりするときのためにデバッグ出力は便利。いわゆるprintfデバッグというやつである…

ウィンドウの作成

まずはゲームのウィンドウを作成。 今回作成するゲームは横長の画面にするつもりなので、ウィンドウサイズはPSPと同じ480×272ドットとした。 タイトルバーに表示されるテキストをTextプロパティに設定。 最小化、最大化ボタンを表示しないように、MaximizeBo…

コメントのドキュメント化

Doxygen: Main Pageのようにプログラムソースに書かれたコメントをドキュメント化できないかと調べたところ、VisualStudioにはXMLのドキュメントファイルを出力する機能があった。 プロジェクトのプロパティを開き、「ビルド」の項目の「XMLドキュメントファ…

バージョン2005

私が以前メインで使っていたVisualStudioはVisualC++5.0のバージョンだったので、VisualStudio2005の変化にびっくり。 コードを打っている途中で間違っているとすぐにエラーが表示されるし、 メソッドの候補などが表示されるインテリセンスはかなり便利。 追…

修復セットアップ

コントロールパネルのプログラムの追加と削除でVisualC#の項目を選択したところ、 修復セットアップのメニューがあったので、それで修復。 無事、VisualC#で新しいプロジェクトを作成することが出来た。

プロジェクト作成できず

VisualC# Express Editon で新しいプロジェクトを作成しようとすると、 「外部コンポーネントが例外をスローしました。」と出て、 プロジェクトの作成すら出来なくなってしまっていた。 インストールしたときには普通にプロジェクトが作成できていたはずなの…