C# でDXライブラリを使って簡単なシューティングをクラス化して標準化 / メインループとプレイヤー (3) で、Game、Player という二つのクラスで、左右の矢印キーでプレイヤーの画像が左右に動く処理を標準化しました。 この Player クラスの機能をそのまま使って、背景を表示する Background クラスを追加します。背景画像はこちらからダウンロードできますが、サイズは 1007x1007 という中途半端なサイズになっています。 この画像はパターン画像で、左端が右端に続き、上端が下端に続く画像で、適当に作ったのでこのようなサイズになっています。ただ、1007 の幅なので、ゲーム画面の幅はこれ以内でないとうまく動作しないので注意して下さい。 Background クラス 背景は、プレイヤーの動きと逆に動くようになっています。また、背景は常に画面いっぱいに表示されるので、DrawRectGraph で描画しています。左端と右端を同時に更新する必要があるのですが、パターン画像なので、二つのエリアに分けて描画します。(矢印キーをずっと押し続けると、プレイヤーは画面の端で止まりますが、背景はずっと横スクロールし続けます) 現在横の動きだけなので二つの DrawRectGraph を使用していますが、縦の動きを入れる場合はさらに二つの DrawRectGraph が必要になる予定です。
// ******************* // コンストラクタ // ******************* public Background(Game game, string name, int offset) { this.game = game; // 画像の読み込み image = DX.LoadGraph(name); // 画像のサイズを取得 int w, h; DX.GetGraphSize(image, out w, out h); graph_w = w; graph_h = h; // 背景の初期位置 x = 0; y = 0; move_offset = offset; } public int image { get; set; } public int graph_w { get; set; } public int graph_h { get; set; } public int x { get; set; } public int y { get; set; } public int move_offset { get; set; } public Game game { get; set; } // ******************* // 描画 // ******************* internal void draw() { DX.DrawRectGraph(0, 0, this.graph_w - this.x, this.y, this.x, this.graph_h - this.y, this.image, 0, 0); DX.DrawRectGraph(this.x, 0, 0, this.y, this.graph_w, this.graph_h - this.y, this.image, 0, 0); } // ******************* // 左移動 // ******************* internal void left() { this.x -= this.move_offset; // 背景は一周する if (this.x < 0) { // 左へ消えた部分は、右から出て来る this.x = this.graph_w; } } // ******************* // 右移動 // ******************* internal void right() { this.x += 5; // 背景は一周する if (this.x >= this.graph_w) { // 右へ消えた部分は、左から出て来る this.x = 0; } } }
Background クラスを追加したメイン処理( Program クラス内 ) は以下のようになります Program 内の処理 処理としては逆向きのメソッドをそれぞれ配置しただけのものになっています
// メインゲームインスタンス作成 Game game = new Game(800, 600); // 初期化 game.init(); // 背景インスタンス作成 Background background = new Background(game, "field.png", 5); // プレイヤーインスタンス作成 Player player = new Player(game, "player.png", 5); game.start( // ******************* // 主処理 // ******************* (int counter) => { // 右矢印キー if (DX.CheckHitKey(DX.KEY_INPUT_RIGHT) == 1) { player.right(); // player と 逆向き background.left(); } // 左矢印キー if (DX.CheckHitKey(DX.KEY_INPUT_LEFT) == 1) { player.left(); // player と 逆向き background.right(); } }, // ******************* // 描画処理 // ******************* () => { background.draw(); player.draw(); } );
|
【VS(C#)の最新記事】
- Replit : cs-list
- C# : Excel の新しいブックのデフォルトのシートのセルに直接値をセットして、オートフィルを Range オブジェクトから実行する
- C#( Form ) : ウインドウ枠の無い吹き出しの作成
- C# のタプル( Visual Studio 2017 でテスト )
- C# : インターネット上の JSON ファイルのフォーマットを クラスとして定義して1行でオブジェクト化して使用する
- C# の文法的文字列処理
- C# : System.Data.Odbc によるデータベースのテーブルからのデータ取得処理( サンプルの SQL は MySQL 用です )
- C# : Excel を データベースとして DataGridView に読み込む
- C# : dynamic 型 による Excel へのアクセス
- C# : フォームを表示せずに、通知領域にアイコンを表示させる常駐プログラム
- Microsoft Access に対してSQLを入力してその結果を DataGridView に表示する最も簡単なコード
- C# : System.Data.Odbc データ取得(SELECT)処理( MySQL ) : ※ using 無し( Dispose 実行 )
- C# : SQL 文を外部テキストにして、String.Format でデータ部分を置き換えて利用する
- C# コンソールアプリを AN HTTPD で実行
- C# : SQLServer( SQLExpress ) の SMO を使用してテーブルの CREATE TABLE 文 を取得する
- C# : DataGridView に TKMP.DLL の IMAP(POP3) で受信したメールを非同期に表示する( 添付ファイルも取得 )
- C# : TKMP.DLLを使った、メール送信テンプレート
- C# と VB.net : TKMP.DLL を使って IMAP でメール本文の一覧を取得する( コンソール )
- C# でDataTable と DataSource を使用して、DataGridView にデータを表示するテンプレート( 行をダブルクリックしてダイアログを表示して行データを処理 )
- (C#) / VS2010 または VS2012 : TKMP.DLL(3.1.2 または 3.1.8)を使った、『さくらインターネット』用メール送信テンプレート