:キーボードの状態を得る、画像の左右移動、簡易アニメーション など テーマ24 背景画像のスクロール【再掲載】 ・背景画像を2枚用意して、1枚目の描画開始位置を少しずつずらし、空いた部分にもう1枚をつながるように描画すれば、 背景画像のスクロールが可能 ・なお、C#のGDI+では描画位置を示す座標を負の数や描画範囲外にできる。これにより、画像の一部を表示することが可能 ・画像全体が描画範囲の外になったら、描画対象から外すか、描画位置を変えると良い ・背景画像の縦スクロールの場合、描画開始位置が下端を超えたら0に戻すと良い ・背景画像は2枚になるが、画像オブジェクトは1つで良く、2つの参照変数で扱えば良い 提出フォロー:演習24 背景画像の縦スクロール ・背景画像のつなぎ目のY座標を示す変数backyを0で初期化しておき、タイマーによってインクリメントする (背景画像.Heightを超えたら0に戻す) ・背景画像の描画を2回に増やし、(0, backy)からと、(0, backy – 背景画像.Height)から描画する ・タイマーのインターバルは10ミリ秒に変更すると良い ・プレイ画面の背景もシームレスにスクロールしたいので、タイマーのインクリメントはシーンに限らず行うように変更 作成例 //テーマ24 背景画像のスクロール using System; //C#標準クラス用 using System.Windows.Forms; //Application、Formクラス用 using System.Drawing; //Size、Graphics、Image、Penクラス、Color構造体用 class Program : Form { //Formクラスの派生クラス enum mode { TITLE, PLAY, OVER }; //タイトル画面、プレイ画面、ゲームオーバー画面 mode scene = mode.TITLE; //シーンをタイトル画面とする Image backi; //画像ファイル用変数 Timer t = new Timer(); //タイマーを生成 int sec = 0; //経過秒数 int backy = 0; //【追加】背景画像のつなぎ目のY座標 protected override void OnPaint(PaintEventArgs e) { //描画処理のオーバライド //全画面に共通の描画処理 base.OnPaint(e); //元のメソッドの内容を呼び出す e.Graphics.DrawImage(backi, 0, backy); //【変更】背景画像①を描画 e.Graphics.DrawImage(backi, 0, backy – backi.Height); //【追加】背景画像②を①の直上に描画 Font fm24 = new Font("メイリオ", 24, FontStyle.Bold); //フォントを生成 Brush bcyan = new SolidBrush(Color.Cyan); //シアン色のソリッドブラシを生成 switch (scene) { //シーンにより分岐 case…
Read the full article