DXライブラリ ゲーム作成について
Posted: 2016年1月10日(日) 16:13
DXライブラリを使って横スクロールのゲームを作成しています
ポインタを使ってキャラクターを表示して左右に動かすことはできます
実行してもエラーはでないのですが、ジャンプ処理がうまくいきません
何が間違っているのか教えてください
よろしくお願いします。
#define _USE_MATH_DEFINES
#define _CRT_SECURE_NO_WARNINGS
#include "DxLib.h"
#include <math.h>
#include <string.h>
// ショットの最大数
#define MAX_SHOT 10000
typedef struct
{
int x;
int y;
char filename[128];
int img;
}Player;
//プロトタイプ宣言
void GameInit(Player *pz, int x, int y, char *name);
void Update(Player *pz);
void Jump(Player *pz, int x, int y);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow)
{
//変数宣言
Player marimo2;
SetGraphMode(640, 480, 16);
if (DxLib_Init() == -1) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
//ゲームの初期化
GameInit(&marimo2, 30, 400, "marimo2.jpg");
Jump(&marimo2, 30, 400);
// ループ
while (ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0)
{
ClsDrawScreen();//画面消去
//ジャンプ処理
Jump(&marimo2, 30, 400);
//キャラクター更新(位置、速度、球数etc)
Update(&marimo2);
//待ち時間
WaitTimer(10);
}
WaitKey();
DxLib_End();// DXライブラリ使用の終了処理
return 0;// ソフトの終了
}
//初期化
void GameInit(Player *pz, int x, int y, char *name)
{
//初期値を設定
pz->x = x;
pz->y = y;
strcpy(pz->filename, name);
//画像ファイルの読み込み
pz->img = LoadGraph(pz->filename);
}
//更新
void Update(Player *pz)
{
//位置の更新
if (CheckHitKey(KEY_INPUT_RIGHT) == 1)
{
//右が押されたら
pz->x++;
}
else if (CheckHitKey(KEY_INPUT_LEFT) == 1)
{
pz->x--;
}
//描画処理
DrawGraph(pz->x, pz->y, pz->img, TRUE);
}
//ジャンプ処理
void Jump(Player *pz, int x, int y)
{
int JumpPower = 0;
// キー入力取得
int Key = 0;
int OldKey = Key;
Key = GetJoypadInputState(DX_INPUT_KEY_PAD1);
if (Key & PAD_INPUT_RIGHT) x += 3; // 右を押していたら右に進む
if (Key & PAD_INPUT_LEFT) x -= 3; // 左を押していたら左に進む
//落下処理
y -= JumpPower;
//落下速度を与える
JumpPower -= 1;
// もし地面についていたら止まる
if (y > 400){
y = 400;
JumpPower = 0;
}
// ジャンプボタンを押していて、地面についていたらジャンプ
if ((Key & PAD_INPUT_B) && y == 400) JumpPower = 20;
}
ポインタを使ってキャラクターを表示して左右に動かすことはできます
実行してもエラーはでないのですが、ジャンプ処理がうまくいきません
何が間違っているのか教えてください
よろしくお願いします。
#define _USE_MATH_DEFINES
#define _CRT_SECURE_NO_WARNINGS
#include "DxLib.h"
#include <math.h>
#include <string.h>
// ショットの最大数
#define MAX_SHOT 10000
typedef struct
{
int x;
int y;
char filename[128];
int img;
}Player;
//プロトタイプ宣言
void GameInit(Player *pz, int x, int y, char *name);
void Update(Player *pz);
void Jump(Player *pz, int x, int y);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow)
{
//変数宣言
Player marimo2;
SetGraphMode(640, 480, 16);
if (DxLib_Init() == -1) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
//ゲームの初期化
GameInit(&marimo2, 30, 400, "marimo2.jpg");
Jump(&marimo2, 30, 400);
// ループ
while (ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0)
{
ClsDrawScreen();//画面消去
//ジャンプ処理
Jump(&marimo2, 30, 400);
//キャラクター更新(位置、速度、球数etc)
Update(&marimo2);
//待ち時間
WaitTimer(10);
}
WaitKey();
DxLib_End();// DXライブラリ使用の終了処理
return 0;// ソフトの終了
}
//初期化
void GameInit(Player *pz, int x, int y, char *name)
{
//初期値を設定
pz->x = x;
pz->y = y;
strcpy(pz->filename, name);
//画像ファイルの読み込み
pz->img = LoadGraph(pz->filename);
}
//更新
void Update(Player *pz)
{
//位置の更新
if (CheckHitKey(KEY_INPUT_RIGHT) == 1)
{
//右が押されたら
pz->x++;
}
else if (CheckHitKey(KEY_INPUT_LEFT) == 1)
{
pz->x--;
}
//描画処理
DrawGraph(pz->x, pz->y, pz->img, TRUE);
}
//ジャンプ処理
void Jump(Player *pz, int x, int y)
{
int JumpPower = 0;
// キー入力取得
int Key = 0;
int OldKey = Key;
Key = GetJoypadInputState(DX_INPUT_KEY_PAD1);
if (Key & PAD_INPUT_RIGHT) x += 3; // 右を押していたら右に進む
if (Key & PAD_INPUT_LEFT) x -= 3; // 左を押していたら左に進む
//落下処理
y -= JumpPower;
//落下速度を与える
JumpPower -= 1;
// もし地面についていたら止まる
if (y > 400){
y = 400;
JumpPower = 0;
}
// ジャンプボタンを押していて、地面についていたらジャンプ
if ((Key & PAD_INPUT_B) && y == 400) JumpPower = 20;
}