ページ 11

ジャンプが分からない

Posted: 2011年7月21日(木) 00:14
by lib
DXライブラリ置き場のサンプルプログラムで疑問になったことがあります
初心者です
ジャンプ処理の項目なのですが

コード:


// ジャンプ
#include "DxLib.h"

int PlayerX , PlayerY ;
int JumpPower ;
int PlayerGraph ;

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
						 LPSTR lpCmdLine, int nCmdShow )
{
	int Key ;

	SetGraphMode( 640 , 480 , 16 ) ;
	if( DxLib_Init() == -1 )	// DXライブラリ初期化処理
	{
		 return -1;				// エラーが起きたら直ちに終了
	}

	// 描画先画面を裏画面にセット
	SetDrawScreen( DX_SCREEN_BACK ) ;

	// グラフィックのロード
	PlayerGraph = LoadGraph( "Player.bmp" ) ;

	// キャラクターの初期データをセット
	PlayerX = 0 ;
	PlayerY = 0 ;
	JumpPower = 0 ;

	// ループ
	while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 )
	{
		// キー入力取得
		Key = GetJoypadInputState( DX_INPUT_KEY_PAD1 ) ;

		if( Key & PAD_INPUT_UP ) PlayerY -= 3 ;		// 上を押していたら上に進む
		if( Key & PAD_INPUT_DOWN ) PlayerY += 3 ;	// 下を押していたら下に進む
		if( Key & PAD_INPUT_RIGHT ) PlayerX += 3 ;	// 右を押していたら右に進む
		if( Key & PAD_INPUT_LEFT ) PlayerX -= 3 ;	// 左を押していたら左に進む

		// 落下処理
		PlayerY -= JumpPower ;

		// 落下加速度を加える
		JumpPower -= 1 ;

		// もし地面についていたら止まる
		if( PlayerY > 300 )
		{
			PlayerY = 300 ;
			JumpPower = 0 ;
		}

		// ジャンプボタンを押していて、地面についていたらジャンプ
		if( ( Key & PAD_INPUT_A ) && PlayerY == 300 ) JumpPower = 20 ;
 
		// 画面を初期化する
		ClearDrawScreen() ;

		// プレイヤーを描画する
		DrawGraph( PlayerX , PlayerY , PlayerGraph , TRUE ) ;

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

	DxLib_End() ;				// DXライブラリ使用の終了処理

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


このようなコードでした
ジャンプボタンが押されたらy座標から数がひかれてどんどん上昇していくんですよね
でも20が代入されたら、いきなり座標が‐20されちゃってワープしちゃう気がするんです
何か根本的なことが間違っていたら指摘してください

どのように処理がなされていっているのか教えてください

Re: ジャンプが分からない

Posted: 2011年7月21日(木) 10:23
by non
縦PlayerY方向の座標は、0が画面の上で、一番下が480で、300を地面にしています。PlayerYが300より小さくなれば、上にジャンプします。ジャンプキーを押すと、300-20=280になり、上にジャンプを始めます。この後、JumpPower -= 1 なので19になり、次のループでは280-19=261、次のループでは243になります。
以下、
226,210,195,181,168,156,145,135,126,118,111,105,100,96,93,91,90
ここまでで、JumpPower = 0が0になり、最高点になります。画面からは消えませんよね。
この後は落下です。先ほどと、逆の数値になります。
300になれば、地面に着いたので終わり。

Re: ジャンプが分からない

Posted: 2011年7月23日(土) 16:53
by lib
なるほど
私の疑問はいきなり20が代入されればキャラクターがワープしてしまうと思ったのですが
そもそも1ずつ上がっていかなければワープになってしまうという考え方がおかしかったです

何度もコードをみていたら気づきました
ともあれnonさんが言ってくれたおかげで気づけたと思います
多謝多謝です

Re: ジャンプが分からない

Posted: 2011年7月23日(土) 16:54
by lib
解決