キャラクターのジャンプ実装
以下の記事を参考にさせて頂きました。
アクションゲームのジャンプを滑らかにしよう with Siv3D その1 - 空飛ぶサトイモの書
キャラをジャンプさせよう | ゲームプログラミング入門~bituse~
【Unity】マリオっぽいゲームを作るのに必要な5つのこと - おもちゃラボ
【Visual C#でゲームを作る】ブロック崩し編 その1 - おもちゃラボ
あらかじめpictureBoxとtimerを準備しておく。
・pictureBox⇒ツールボックスからpictureBoxを選択しForm内にドラッグ&ドロップ(nameは初期値を使用) ・timer⇒プロパティからEnabledを選択しTrueに変更。Intervalを25に設定。(nameは初期値を使用)
Form1のイベント内keyDownをダブルクリックしForm1_KeyDownメソッドを用意して下さい。
ボタン入力は各ボタンのフラグを用意しtrueの場合に動作する処理を記述します。
気分でVector型を使用しましたが、個別に変数を設定してもいけるはずです。 Vector型を使用するにはある手順が必要なので以下の記事を参考にして下さい。 プロジェクト名⇒参照の追加⇒WindowsBaseを追加
namespace ジャンプ { public partial class Form1 : Form { Boolean SpaceKeyCondition; // スペースキーのフラグ設定 Vector speed; Vector kasokudo; Vector grav; public Form1() { InitializeComponent(); this.speed = new Vector(0, 0); this.kasokudo = new Vector(0.5, -6.0); this.grav = new Vector(0, 0.3); } private void movePlayer() { if (SpaceKeyCondition) { pictureBox1.Top += (int)kasokudo.Y; kasokudo.Y += grav.Y; pictureBox1.Top += (int)kasokudo.Y; if (pictureBox1.Bottom > ClientSize.Height) { // pictureBox1のY座標がクライアントの高さに到達したら停止 pictureBox1.Top = ClientSize.Height - pictureBox1.Height; } } } private void timer1_Tick(object sender, EventArgs e) { if (SpaceKeyCondition || LeftKeyCondition || RightKeyCondition) { movePlayer(); } } private void Form1_KeyDown (object sender, KeyEventArgs e) { // キー入力 if (e.KeyCode == System.Windows.Forms.Keys.Space) { SpaceKeyCondition = true; } else if (e.KeyCode == System.Windows.Forms.Keys.Left) { LeftKeyCondition = true; } else if (e.KeyCode == System.Windows.Forms.Keys.Right) { RightKeyCondition = true; } } } }