見出し画像

ジャンプ(3D):3Dサンプルプログラム

実装イメージ

・上キーを押すことでプレイヤーが画面上に進むようにY移動量に値を設定しています。
・その移動量は常に画面下方向に向かうように移動量を減らすようにしています。
・プレイヤー座標には常にそのスピードの値を足し続けています。

#include "DxLib.h"
#include <math.h>

// 度をラジアンに変換する
#define D2R(deg) ((deg)*DX_PI_F/180.0f)

// ステージモデルハンドル
int StageHandle;

// プレイヤーモデルハンドル
int PlayerHandle;
// プレイヤーの座標
VECTOR PlayerPos;
// 移動量
VECTOR PlayerMove;
// プレイヤーの向き
VECTOR PlayerAngle;

// キーの状態を取得する変数
int KeyState[256] = { 0 };

// ==============================
// *** 初期化処理 ***
// ==============================
void Game_Init()
{
	// カメラ距離設定
	SetCameraNearFar( 1.0f, 100.0f );

	// 3Dモデルの読み込み
	StageHandle = MV1LoadModel( "stage.mqo" );
	PlayerHandle = MV1LoadModel( "player.mqo" );

	// プレイヤー座標は原点から
	PlayerPos = VGet( 0.0f, 0.0f, 0.0f );
	PlayerMove = VGet( 0.0f, 0.0f, 0.0f );
	// 回転なしの状態から開始
	PlayerAngle = VGet( 0.0f, D2R( 180.0f ), 0.0f );
}
// ==============================
// *** 更新処理 ***
// ==============================
void Game_Update()
{
	// キーの状態を取得
	GetHitKeyStateAllEx( KeyState );
	// 上キーを押した瞬間
	if( KeyState[KEY_INPUT_UP] == 1 ){
		// Y移動量を画面上方向に行くように値を設定
		PlayerMove.y = 0.5f;
	}

	// 座標に移動量を足す
	PlayerPos = VAdd( PlayerPos, PlayerMove );

	// Y移動量を減らす
	PlayerMove.y -= 0.02f;

	// 画面下で止まるように
	if (PlayerPos.y < 0.0f) {
		PlayerPos.y = 0.0f;
		PlayerMove.y = 0.0f;
	}
}
// ==============================
// *** 描画処理 ***
// ==============================
void Game_Draw()
{
	// カメラの位置と注視点をセット
	SetCameraPositionAndTarget_UpVecY( VGet( 0.0f, 5.0f, -10.0f ), VGet( 0.0f, 5.0f, 0.0f ) );

	// ステージモデルの描画
	MV1DrawModel( StageHandle );

	// プレイヤーモデルの座標をセットする
	MV1SetPosition( PlayerHandle, PlayerPos );
	// プレイヤーモデルの回転値をセットする
	MV1SetRotationXYZ( PlayerHandle, PlayerAngle );
	// プレイヤーモデルを描画する
	MV1DrawModel( PlayerHandle );
}
// ==============================
// *** 終了処理 ***
// ==============================
void Game_End()
{
	MV1DeleteModel( StageHandle );
	MV1DeleteModel( PlayerHandle );
}

サンプルプログラムで記述している描画や操作関係はDXライブラリを使っていますが、DXライブラリを使わない開発でも処理としては同じような実装で動作すると思います。

いいなと思ったら応援しよう!