ゲーム開発演習:描画処理の実装、背景画像の描画など
テーマ5 描画処理の基礎【再掲載】
・ウィンドウを持つアプリケーションでは、プログラム側からの描画と、システム側からの必要に応じた描画がある
・この両方に対応するために、C#のフォームアプリケーションでは、Formクラスでvoid OnPaint(PaintEventArgs)メソッドを提供
している
・この引数のPaintEventArgsはシステム側が提供する「画面を描くための情報」
・フォームアプリケーションではこのメソッドをオーバーライドして、描画処理を記述する(アクセス修飾子はprotecedにすること)
・この時、フォームの基本再描画処理がFormクラスで与えられるので、オーバーライドの冒頭において、FormクラスのOnPaintメソッドの
内容を実行すること
・この実行には、PaintEventArgsを引数として渡す
・書式例:
protected override void OnPaint(PaintEventArgs e) { //Formのメソッドをオーバーライド
base.OnPaint(e); //まず、Formクラスにおけるメソッドの内容(基本再描画処理)を実行
:自前の描画処理を書くところ
}
演習5 OnPaintメソッドの動作確認
・描画処理の実装の準備として、OnPaintメソッドのオーバーライドを追加しよう ・自前の描画処理を書くところにメッセージボックスの表示を記述して、このオーバーライドがいつ動作するのかを確認しよう
作成例
//演習5 OnPaintメソッドの動作確認
using System; //フォームアプリケーションに必須
using System.Windows.Forms; //フォームアプリケーションに必須
class Program : Form { //Formクラスを継承
protected override void OnPaint(PaintEventArgs e) { //【以下追加】Formのメソッドをオーバーライド
base.OnPaint(e); //まず、Formクラスにおけるメソッドの内容(基本再描画処理)を実行
MessageBox.Show("OK"); //メッセージボックスを表示
}
static void Main() { //publicの指定は任意
Program p = new Program(); //継承したフォームのインスタンスを生成
p.Width = 660; //インスタンスのWidthプロパティに幅を代入
p.Height = 520; //インスタンスのHeightプロパティに高さを代入
p.Text = "Game"; //インスタンスのTextプロパティにフォーム名を代入
p.ControlBox = false; //ControlBoxを非表示にする
Application.Run(p); //インスタンスを画面に出す
}
}
テーマ6 リソースの配置
・プログラムで用いる外部ファイルは、デバッグ用と本番用のそれぞれの配置場所がある ・デバッグ用の配置場所は「プロジェクトのフォルダ\bin\Debug」 ・ここには「デバッグなしで実行」用のexeファイルが生成されているので、ファイル名のみでアクセス可能 ・このフォルダに、画像、音声、動画、テキストデータなどのファイルを配置してプログラム側から読み込める
テーマ7 フォーム上への画像の描画
・静止画像ファイルとしては、主にBMP形式、GIF形式、PNG形式の画像ファイルを用いる
BMP=ビットマップの略でWindows用画像形式。無圧縮または低圧縮で、色数は自由
GIF=グラフィック・インターチェンジ・フォーマットの略で汎用画像形式。低圧縮。色数は128色までだが、
透過色を手軽に指定でき、処理が軽い
PNG=ポータブル・ネットワーク・グラフィクス略で汎用画像形式。高圧縮。色数はフルカラーで高品質だが、処理が重くなりやすい
・このファイル名をSystem.Drawing.ImageクラスのImage FromFile()静的メソッドに文字列として渡すと、
画像を含むImageオブジェクトが生成され、参照が得られる。
例: Image myimage = System.Drawing.Image.FromFile("XEVIUS.bmp");
・描画には、GraphicsクラスのDrawImage()メソッドを用いる。
・この実行に必要なGraphicsオブジェクトを得るためにOnPaintメソッドの引数「PaintEventArgs e」を用いる
※ よって、描画処理にはOnPaintメソッドのオーバーライドが必要
・PaintEventArgsクラスにあるGraphicsプロパティを呼ぶと、DrawImage用のGraphicsオブジェクトが得られる
・DrawImage()メソッドの引数はImageオブジェクトの参照、X座標、Y座標
・なお、X座標、Y座標はウィンドウの左上隅を(0,0)として定める
例: e.Graphics.DrawImage(myimage, 0, 0);
提出:演習6 背景画像の描画
・テスト用画像を下記からダウンロードしてリソースのフォルダに格納 https://ha221.rundog.org/wp-content/uploads/back.bmp ・この画像を表示しよう