ゲーム開発演習(2):フォームサイズの固定化とコントールボックスの非表示、背景画像の表示 など
演習4 フォームの初期位置の指定:再掲載
・フォームの初期位置を(300, 0)にしよう
作成例
//演習4 フォームの初期位置の指定
using System; //C#標準クラス用
using System.Windows.Forms; //C#が提供するApplication、Formクラス用
using System.Drawing; //Sizeクラス用
class Program {
static void Main() { //実行用メソッド(publicはなくてOK)
Form f = new Form(); //Formクラスのインスタンスを生成
f.Text = "Game"; //Form名を設定
Size s = new Size(640, 480); //幅と高さの大きさのSizeインスタンスを生成
f.Size = s; //インスタンスプロパティで大きさを設定
f.StartPosition = FormStartPosition.Manual; //「手動設定」を設定
Point p = new Point(300,0); //X座標とY座標のPointインスタンスを生成
f.Location = p; //インスタンスプロパティで初期位置を設定
Application.Run(f); //生成済のインスタンスを実行
}
}
テーマ5 フォームサイズの固定化とコントロールボックスの非表示
・特に指定のないフォームはフォームサイズの変更や最大化が可能 ・これは固定サイズで開発したいゲームプログラムの場合、弊害を起こすので、フォームサイズを固定化すると良い ・フォームサイズの固定化には、FormのインスタンスプロパティFormBorderStyleに、 FormBorderStyle列挙体のFixedSingle列挙子などを代入すると良い → https://learn.microsoft.com/ja-jp/dotnet/api/system.windows.forms.formborderstyle ・フォームの最大化を防止するには、コントロールボックスを非表示にすると良い ・コントロールボックスを非表示にするには、FormのインスタンスプロパティControlBoxにfalseを代入すればOK ・ただし、フォームの閉じる「×」も非表示になるので、プログラム内にフォームのクローズ処理を記述していない場合は、 タスクバーで右クリックし「ウィンドウを閉じる」を用いること ・そして、フォームサイズを固定化により、フォームの枠の大きさが変わるので、フォームの大きさの指定方法を変更する必要がある ・FixedSingle等を指定した後に、FormのインスタンスプロパティSizeではなく、CliantSizeに幅と高さの大きさの Sizeインスタンスを代入すると良い
演習5 フォームサイズの固定化とコントールボックスの非表示
・フォームのボーダーをFixedSingleにしよう ・コントロールボックスを非表示にしよう ・フォームのSizeではなくClientSizeを640×480にしよう
作成例
//演習5 フォームサイズの固定化とコントールボックスの非表示
using System; //C#標準クラス用
using System.Windows.Forms; //C#が提供するApplication、Formクラス用
using System.Drawing; //Sizeクラス用
class Program {
static void Main() { //実行用メソッド(publicはなくてOK)
Form f = new Form(); //Formクラスのインスタンスを生成
f.Text = "Game"; //Form名を設定
//Size s = new Size(640, 480); //【削除】幅と高さの大きさのSizeインスタンスを生成
//f.Size = s; //【削除】インスタンスプロパティで大きさを設定
f.StartPosition = FormStartPosition.Manual; //「手動設定」を設定
Point p = new Point(300,0); //X座標とY座標のPointインスタンスを生成
f.Location = p; //インスタンスプロパティで初期位置を設定
f.FormBorderStyle = FormBorderStyle.FixedSingle; //【追加】フォームサイズの固定化
f.ControlBox = false; //【追加】コントールボックスの非表示
f.ClientSize = new Size(640, 480); //【追加】クライアントサイズの幅と高さを指定
Application.Run(f); //生成済のインスタンスを実行
}
}
テーマ6 フォーム上の描画の基礎
・フォームアプリケーションにおいては、プログラム側からの描画だけでなく、システム側からの必要に応じた再描画を行う必要がある ・例えば、フォームの一部が画面の外部になってから内部に戻された場合、システム側で再描画を行う ・C#のフォームアプリケーションはこのことに対応するメソッド protected void OnPaint(PaintEventArgs)メソッドを提供している ・このメソッド内に記述された内容が、システム側からの必要に応じた再描画で自動的に用いられる ・プログラム側からの描画内容をこのメソッド内に記述するには: ① プログラムのクラスをFormクラスの派生クラスにする ② protected void OnPaint(PaintEventArgs e)メソッドをオーバライドする ③ オーバライドの冒頭で、元のメソッドの内容を「base.OnPaint(e);」で呼び出して、基本的な描画処理を行う ④ ③の後に、プログラム側からの描画内容を記述する
演習6 プログラム側からの描画内容を記述する準備
・下記の手順。なお、実行結果は(まだ)変わらない ① ProgramクラスをFormクラスの派生クラスにする ② protected void OnPaint(PaintEventArgs e)メソッドのオーバライドメソッドを追記 ③ ②の中に、元のメソッドの内容を呼び出す「base.OnPaint(e);」を記述
作成例
//演習6 プログラム側からの描画内容を記述する準備
using System; //C#標準クラス用
using System.Windows.Forms; //C#が提供するApplication、Formクラス用
using System.Drawing; //Sizeクラス用
class Program : Form { //【変更】Formクラスの派生クラス
protected override void OnPaint(PaintEventArgs e) { //【以下追加】描画処理のオーバライド
base.OnPaint(e); //元のメソッドの内容を呼び出す
}
static void Main() { //実行用メソッド(publicはなくてOK)
Program f = new Program(); //【変更】自クラスのインスタンスを生成
f.Text = "Game"; //Form名を設定
f.StartPosition = FormStartPosition.Manual; //「手動設定」を設定
Point p = new Point(300,0); //X座標とY座標のPointインスタンスを生成
f.Location = p; //インスタンスプロパティで初期位置を設定
f.FormBorderStyle = FormBorderStyle.FixedSingle; //フォームサイズの固定化
f.ControlBox = false; //コントールボックスの非表示
f.ClientSize = new Size(640, 480); //クライアントサイズの幅と高さを指定
Application.Run(f); //生成済のインスタンスを実行
}
}
提出:演習6 プログラム側からの描画内容を記述する準備