横アクションげーむのジャンプのやりかた

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
jorujo

横アクションげーむのジャンプのやりかた

#1

投稿記事 by jorujo » 9年前

c言語とDxライブラリでロックマン風のゲームを作っているのですが、
ジャンプの押し加減によって、ジャンプの強弱が変わるプログラムの
書き方がわかりません。どうするのが良いのでしょうか。

アバター
Hiragi(GKUTH)
記事: 167
登録日時: 13年前
住所: 大阪府
連絡を取る:

Re: 横アクションげーむのジャンプのやりかた

#2

投稿記事 by Hiragi(GKUTH) » 9年前

これだ!といった書き方は無いので、それっぽく見せるしかありません。 以前私もソレをしてみようとしました。完全に参考にならないかと思われますが、
一応おいておきます。
http://climbi.com/b/3527/0

そもそもボタンの押し具合によってジャンプ力が変化するというのは現実の物理法則に反しているので、完全な再現はありません。
それっぽく見えればいいのです。

ジャンプボタンが押されている時とそうでないときで、落下速度を変化させるなどで対応すると良いかもしれません。
だいがくせい!

jorujo

Re: 横アクションげーむのジャンプのやりかた

#3

投稿記事 by jorujo » 9年前

なるほど・・されっぽく見えればいいのですね!
参考になります。ありがとうございました。

アバター
Hiragi(GKUTH)
記事: 167
登録日時: 13年前
住所: 大阪府
連絡を取る:

Re: 横アクションげーむのジャンプのやりかた

#4

投稿記事 by Hiragi(GKUTH) » 9年前

適当ですが、とりあえずボタンの押す時間によってジャンプ力が変わるようなモノを作ってみました。 コピペで動きます。

ただし、左右移動はできませんし、何しろこのままでは見た目が不自然すぎます。 もっと改善する必要があるでしょう。
それに、このコードは考え方の一つに過ぎませんので、もっと別の方法、効率のいい方法もあるかと思います。そこらへんは調べるなり考えるなりして頑張ってください。

コード:

#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;
}
だいがくせい!

jorujo

Re: 横アクションげーむのジャンプのやりかた

#5

投稿記事 by jorujo » 9年前

サンプルコードまで!ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る