2D横スクロールアクションサンプルプログラム2
プレイヤーキャラをジャンプできるようにする


 画面の中心にプレイヤーキャラ( に、見立てた四角形 )を表示して、キーボードの左右キー( 又はゲームパッドの左右ボタン )で
プレイヤーキャラを左右に動かせるように、ボタン1でジャンプできるようにしたプログラムです。

#include "DxLib.h"

// プレイヤーのX座標とY座標
float PlayerPositionX, PlayerPositionY ;

// プレイヤーのY方向の速度
float PlayerSpeedY ;

// プレイヤーがジャンプしているかどうかのフラグ( true:ジャンプしている  false:ジャンプしていない )
bool PlayerIsJump ;

// エントリーポイント
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
	int PadInput = 0 ;
	int PadPrevInput ;
	int PadEdgeInput ;

	// ウインドウモードで起動
	ChangeWindowMode( TRUE ) ;

	// 画面解像度は 1280x720 に設定
	SetGraphMode( 1280, 720, 32 ) ;

	// DXライブラリの初期化
	if( DxLib_Init() < 0 ) return -1 ;

	// プレイヤーのX座標を画面中心に初期化
	PlayerPositionX = 1280.0f / 2.0f ;

	// プレイヤーのY座標を画面中心に初期化
	PlayerPositionY = 720.0f / 2.0f ;

	// プレイヤーのY方向の速度を初期化
	PlayerSpeedY = 0.0f ;

	// プレイヤーがジャンプしているかどうかを「ジャンプしていない」に初期化
	PlayerIsJump = false ;

	// 描画対象を裏画面に変更
	SetDrawScreen( DX_SCREEN_BACK ) ;

	// メインループ
	while( ProcessMessage() == 0 )
	{
		// 画面をクリア
		ClearDrawScreen() ;

		// 一つ前のフレームの入力状態を保存
		PadPrevInput = PadInput ;

		// ゲームパッドとキーボードの入力を取得
		PadInput = GetJoypadInputState( DX_INPUT_KEY_PAD1 ) ;

		// 今回のフレームで押されたボタンだけを抽出
		PadEdgeInput = PadInput & ~PadPrevInput ;

		// ゲームパッドとキーボードの入力を取得
		int PadInput = GetJoypadInputState( DX_INPUT_KEY_PAD1 ) ;

		// 左キー若しくは左ボタンが押されていたら座標を左に動かす
		if( PadInput & PAD_INPUT_LEFT ) PlayerPositionX -= 8.0f ;

		// 右キー若しくは右ボタンが押されていたら座標を右に動かす
		if( PadInput & PAD_INPUT_RIGHT ) PlayerPositionX += 8.0f ;

		// ジャンプ中ではなくて、且つZキー若しくはボタン1が押されていたらジャンプ
		if( PlayerIsJump == false && ( PadEdgeInput & PAD_INPUT_1 ) )
		{
			// ジャンプ中フラグを立てる
			PlayerIsJump = true ;

			// Y方向の速度をセット
			PlayerSpeedY = -20.0f ;
		}

		// ジャンプ中の場合は処理を分岐
		if( PlayerIsJump )
		{
			// プレイヤーのY座標にY方向の速度を加算
			PlayerPositionY += PlayerSpeedY ;

			// プレイヤーのY方向の速度に重力値を加算
			PlayerSpeedY += 0.8f ;

			// プレイヤーのY座標が画面中心以下になったら着地したことにする
			if( PlayerPositionY >= 720.0f / 2.0f )
			{
				// ジャンプ中フラグを倒す
				PlayerIsJump = false ;

				// プレイヤーのY座標を画面の中心にセット
				PlayerPositionY = 720.0f / 2.0f ;
			}
		}

		// プレイヤーの位置に 32x32 の四角形を描画
		DrawBox(
			( int )( PlayerPositionX - 16.0f ), ( int )( PlayerPositionY - 16.0f ),
			( int )( PlayerPositionX + 16.0f ), ( int )( PlayerPositionY + 16.0f ),
			GetColor( 255,255,255 ), TRUE ) ;

		// 裏画面の内容を表画面に反映
		ScreenFlip() ;
	}

	// DXライブラリの後始末
	DxLib_End() ;

	// ソフトの終了
	return 0 ;
}

戻る