#1
			
									
						
					
								by さか » 7年前
			
			
			DXライブラリを使ってゲームを作成しているのですが、プレイヤーの移動処理がうまくいかなくて困っています。
落下処理が処理されず、左右のキーを押してもプレイヤーの座標が変わりません。
どうすればいいのでしょうか?
コード:  
#include "All.h"
#include "DxLib.h"
//プレイヤーの初期化
void Player_Init(Player_t *pl, int x, int y, int img)
{
	pl->Image = img;
	pl->x = x;
	pl->y = y;
	pl->muki = 0;
	pl->JumpFlag = FALSE;
	pl->DownSp = 0.0;
	pl->Movex = 0.0;
	pl->Movey = 0.0;
	pl->life = 3;
	pl->score = 0;
	pl->combo = 0;
}
//動きを計算する
void Player_Update(Player_t *pl) {
	// 左右の移動を見る
	if (Keyboard_Get(KEY_INPUT_LEFT) != 0) {
		pl->Movex -= SPEED;
		pl->muki = 0;
	}
	if (Keyboard_Get(KEY_INPUT_RIGHT) != 0) {
		pl->Movex += SPEED;
		pl->muki = 1;
	}
	//ジャンプ処理(デバッグ用)
	if (Keyboard_Get(KEY_INPUT_Z) != 0)
	{
		pl->DownSp = -JUMP_POWER;
	}
	// 落下処理
	pl->DownSp += G;
	// 落下速度を移動量に加える
	pl->Movey = pl->DownSp;
	//	移動制限
	if (pl->x < 0)					pl->x = 0;
	if (pl->x >= SCREEN_WIDTH - 64)	pl->x = SCREEN_WIDTH - 64;
	if (pl->y < 90)					pl->y = 90;
	if (pl->y >= SCREEN_HEIGHT)		pl->y = SCREEN_HEIGHT - 64;
	// 移動量に基づいてキャラクタの座標を移動
	CharMove(pl->x, pl->y, pl->DownSp, pl->Movex, pl->Movey, CHAR_SIZE);
}
void Player_Draw(Player_t *pl) {
	// キャラクタの描画
	DrawBox((int)(pl->x - CHAR_SIZE * 0.5F), (int)(pl->y - CHAR_SIZE * 0.5F),
		(int)(pl->x + CHAR_SIZE * 0.5F) + 1, (int)(pl->y + CHAR_SIZE * 0.5F) + 1,
		GetColor(255, 0, 0), TRUE);
 
コード:  
#include "All.h"
#include "DxLib.h"
//extern char MapData[x][y];
// キャラクタをマップとの当たり判定を考慮しながら移動する
int CharMove(float plx, float ply, float DownSp,
	float Movex, float Movey, float Size)
{
	float Dummy = 0.0F;
	float hsize;
	// 半分のサイズを算出
	hsize = Size * 0.5F;
	// 左下と右下のチェック、もし当たっていればジャンプ処理をする
	if (MapHitCheck(plx - hsize, ply + hsize, Dummy, Movey) == 4 || MapHitCheck(plx + hsize, ply + hsize, Dummy, Movey) == 4)
	{
		if (Keyboard_Get(KEY_INPUT_SPACE) != 0) {
			Movey = -HIGH_JUMP_POWER;
		}
		// ジャンプ処理
		Movey = -JUMP_POWER;
		//スコアとコンボの処理
		//pl->combo++;
		//pl->score += 100;
	}
	// 左下と右下のチェック、もし当たっていればジャンプ処理をする
	if (MapHitCheck(plx - hsize, ply + hsize, Dummy, Movey) == 3 || MapHitCheck(plx + hsize, ply + hsize, Dummy, Movey) == 3)
	{
		if (Keyboard_Get(KEY_INPUT_SPACE) != 0) {
			Movey = -HIGH_JUMP_POWER;
		}
		// ジャンプ処理
		Movey = -JUMP_POWER;
		//スコアとコンボの処理
		//pl->combo = 0;
	}
	//Movey = 1.0f;
	// 上下移動成分を加算
	ply += Movey;
	plx += Movex;
	// 終了
	return 0;
}
// マップとの当たり判定
int MapHitCheck(float x, float y,
	float Movex, float Movey)
{
	float afX, afY;
	// 移動量を足す
	afX = x + Movex;
	afY = y + Movey;
	// 当たり判定のあるブロックに当たっているかチェック
	if (GetChipParam(afX, afY) == 2 || GetChipParam(afX, afY) == 3)
	{
		float bby;
		// ブロックの下の座標を算出
		bby = (float)((int)afY / CHIP_SIZE + 1) * CHIP_SIZE;    // 下辺の Y 座標
		// 下辺に当たっていた場合
		if (Movey < 0.0F)
		{
			//移動量の補正
			Movey = bby - y + 1.0F;
			// 風船に当たったと返す
			return 4;
		}
	}
	if (GetChipParam(afX, afY) == 4)
	{
		float bby;
		// ブロックの下の座標を算出
		bby = (float)((int)afY / CHIP_SIZE + 1) * CHIP_SIZE;    // 下辺の Y 座標
																// 下辺に当たっていた場合
		if (Movey < 0.0F)
		{
			//移動量の補正
			Movey = bby - y + 1.0F;
			// ドクロに風船に当たったと返す
			return 3;
		}
	}
	if (GetChipParam(afX, afY) == 1)
	{
		//GameClear();
	}
	// どこにも当たらなかったと返す
	return 0;
}
 
			
							DXライブラリを使ってゲームを作成しているのですが、プレイヤーの移動処理がうまくいかなくて困っています。
落下処理が処理されず、左右のキーを押してもプレイヤーの座標が変わりません。
どうすればいいのでしょうか?
[code]
#include "All.h"
#include "DxLib.h"
//プレイヤーの初期化
void Player_Init(Player_t *pl, int x, int y, int img)
{
	pl->Image = img;
	pl->x = x;
	pl->y = y;
	pl->muki = 0;
	pl->JumpFlag = FALSE;
	pl->DownSp = 0.0;
	pl->Movex = 0.0;
	pl->Movey = 0.0;
	pl->life = 3;
	pl->score = 0;
	pl->combo = 0;
}
//動きを計算する
void Player_Update(Player_t *pl) {
	// 左右の移動を見る
	if (Keyboard_Get(KEY_INPUT_LEFT) != 0) {
		pl->Movex -= SPEED;
		pl->muki = 0;
	}
	if (Keyboard_Get(KEY_INPUT_RIGHT) != 0) {
		pl->Movex += SPEED;
		pl->muki = 1;
	}
	//ジャンプ処理(デバッグ用)
	if (Keyboard_Get(KEY_INPUT_Z) != 0)
	{
		pl->DownSp = -JUMP_POWER;
	}
	// 落下処理
	pl->DownSp += G;
	// 落下速度を移動量に加える
	pl->Movey = pl->DownSp;
	//	移動制限
	if (pl->x < 0)					pl->x = 0;
	if (pl->x >= SCREEN_WIDTH - 64)	pl->x = SCREEN_WIDTH - 64;
	if (pl->y < 90)					pl->y = 90;
	if (pl->y >= SCREEN_HEIGHT)		pl->y = SCREEN_HEIGHT - 64;
	// 移動量に基づいてキャラクタの座標を移動
	CharMove(pl->x, pl->y, pl->DownSp, pl->Movex, pl->Movey, CHAR_SIZE);
}
void Player_Draw(Player_t *pl) {
	// キャラクタの描画
	DrawBox((int)(pl->x - CHAR_SIZE * 0.5F), (int)(pl->y - CHAR_SIZE * 0.5F),
		(int)(pl->x + CHAR_SIZE * 0.5F) + 1, (int)(pl->y + CHAR_SIZE * 0.5F) + 1,
		GetColor(255, 0, 0), TRUE);
[/code]
[code]
#include "All.h"
#include "DxLib.h"
//extern char MapData[x][y];
// キャラクタをマップとの当たり判定を考慮しながら移動する
int CharMove(float plx, float ply, float DownSp,
	float Movex, float Movey, float Size)
{
	float Dummy = 0.0F;
	float hsize;
	// 半分のサイズを算出
	hsize = Size * 0.5F;
	// 左下と右下のチェック、もし当たっていればジャンプ処理をする
	if (MapHitCheck(plx - hsize, ply + hsize, Dummy, Movey) == 4 || MapHitCheck(plx + hsize, ply + hsize, Dummy, Movey) == 4)
	{
		if (Keyboard_Get(KEY_INPUT_SPACE) != 0) {
			Movey = -HIGH_JUMP_POWER;
		}
		// ジャンプ処理
		Movey = -JUMP_POWER;
		//スコアとコンボの処理
		//pl->combo++;
		//pl->score += 100;
	}
	// 左下と右下のチェック、もし当たっていればジャンプ処理をする
	if (MapHitCheck(plx - hsize, ply + hsize, Dummy, Movey) == 3 || MapHitCheck(plx + hsize, ply + hsize, Dummy, Movey) == 3)
	{
		if (Keyboard_Get(KEY_INPUT_SPACE) != 0) {
			Movey = -HIGH_JUMP_POWER;
		}
		// ジャンプ処理
		Movey = -JUMP_POWER;
		//スコアとコンボの処理
		//pl->combo = 0;
	}
	//Movey = 1.0f;
	// 上下移動成分を加算
	ply += Movey;
	plx += Movex;
	// 終了
	return 0;
}
// マップとの当たり判定
int MapHitCheck(float x, float y,
	float Movex, float Movey)
{
	float afX, afY;
	// 移動量を足す
	afX = x + Movex;
	afY = y + Movey;
	// 当たり判定のあるブロックに当たっているかチェック
	if (GetChipParam(afX, afY) == 2 || GetChipParam(afX, afY) == 3)
	{
		float bby;
		// ブロックの下の座標を算出
		bby = (float)((int)afY / CHIP_SIZE + 1) * CHIP_SIZE;    // 下辺の Y 座標
		// 下辺に当たっていた場合
		if (Movey < 0.0F)
		{
			//移動量の補正
			Movey = bby - y + 1.0F;
			// 風船に当たったと返す
			return 4;
		}
	}
	if (GetChipParam(afX, afY) == 4)
	{
		float bby;
		// ブロックの下の座標を算出
		bby = (float)((int)afY / CHIP_SIZE + 1) * CHIP_SIZE;    // 下辺の Y 座標
																// 下辺に当たっていた場合
		if (Movey < 0.0F)
		{
			//移動量の補正
			Movey = bby - y + 1.0F;
			// ドクロに風船に当たったと返す
			return 3;
		}
	}
	if (GetChipParam(afX, afY) == 1)
	{
		//GameClear();
	}
	// どこにも当たらなかったと返す
	return 0;
}
[/code]