横アクションげーむのジャンプのやりかた
Posted: 2015年1月30日(金) 18:28
c言語とDxライブラリでロックマン風のゲームを作っているのですが、
ジャンプの押し加減によって、ジャンプの強弱が変わるプログラムの
書き方がわかりません。どうするのが良いのでしょうか。
ジャンプの押し加減によって、ジャンプの強弱が変わるプログラムの
書き方がわかりません。どうするのが良いのでしょうか。
#include "DxLib.h"
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
//アプリ初期化
ChangeWindowMode(TRUE); // ウィンドウモードに設定
DxLib_Init(); // DXライブラリ初期化処理
SetDrawScreen(DX_SCREEN_BACK);
//必要な変数
int x; //x座標
int y; //y座標
int size; //プレイヤーのサイズ 今回は正方形とする。
double vx; //x方向への加速度
double vy; //y方向への加速度
int cnt_z; //Zキーの押されたフレーム数
//定数
const double JUMP_P = 16; //プレイヤーのジャンプパワー
const double G_on = 0.4; //キーが押されているときの重力
const double G_off = 1.6; //キーが押されていないときの重力
const int W_WIDTH = 640; //ウィンドウの高さ
const int W_HEIGHT = 480; //ウィンドウの幅
//ゲーム初期化
x = W_WIDTH / 2;
y = W_HEIGHT / 2;
vx = 0;
vy = 0;
cnt_z = 0;
size = 16;
// ループ処理
while (ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0){
//計算
//Zキーの押されたフレーム数を格納する。
if (CheckHitKey(KEY_INPUT_Z) != 0){
cnt_z++;
}else{
cnt_z = 0;
}
//Zキーが押されている間
if (cnt_z > 0){
//Zキーが押された瞬間、かつ地面に接していたら
if (cnt_z == 1 && y == W_HEIGHT - size){
vy = JUMP_P; //ジャンプ力を与える
}
vy -= G_on;//押されてる間は重力を弱めに
}else{
vy -= G_off;//そうでないときは重力を強めに
}
y = y - vy; //実際に座標に対して計算
//めり込み防止
if (y > W_HEIGHT - size){
y = W_HEIGHT - size;
vy = 0;
}
//描画
DrawBox(x, y, x + size, y + size, GetColor(255, 255, 255), true);
}
DxLib_End(); // 後処理
return 0;
}