#1
by エミリア » 6年前
ctrl+F5を押した際に初期設定されているwindowのサイズの黒画面が出てきてそのあとに私が設定したサイズの画面が出てきて下記の処理が実行されています。
実行してからしばらくすると処理が止まってしまい入力を受け付けずキャラが動かなくなってしまいます。
どうすれば2つの問題を解決できるのでしょうか。
main.cpp↓
コード:
#include "ALL.h"
int WINAPI WinMain(HINSTANCE h1, HINSTANCE hp, LPSTR lpC, int nC)
{
// ウィンドウモードにする
ChangeWindowMode(TRUE);
// DXライブラリの初期化
if (DxLib_Init() == -1) return -1;
SetGraphMode(1280, 720, 32);
// 裏画面を描画対象にする
SetDrawScreen(DX_SCREEN_BACK);
// 正常にDXライブラリが処理されていて、ESCPEキーが押されているときのみループを脱出する
while (ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0)
{
// 画面消去
ClearDrawScreen();
timer++;
// この中に行いたい処理を書いていく
//---------------------------------------------
//初期化
//---------------------------------------------
BGInit();
PlayerInit();
//---------------------------------------------
//更新
//---------------------------------------------
PlayerUpdate();
//---------------------------------------------
//描画
//---------------------------------------------
BGDraw();
PLayerDraw(angle);
// 画面入れ替え
ScreenFlip();
}
// DXライブラリの終了処理
DxLib_End();
return 0;
}
Player.cpp↓
コード:
#include "ALL.h"
#include <math.h>
#define PAI 3.14
int P1Handle;
int P2Handle;
int wHandle;
int p1_pos_x = 170, p1_pos_y =420,Key;
int p2_pos_x = 820, p2_pos_y = 420, Key2;
int w_pos_x = 125, w_pos_y = 550;
char KeyState[256];
int XBuf, YBuf;
float angle = -90;
int X;
bool exist=true;
void PlayerInit(){
P1Handle = LoadGraph("image//Player1.png");
if (exist == true) {
P2Handle = LoadGraph("image//Player2.png");
};
wHandle= LoadGraph("image//sword.png");
};
void PlayerUpdate() {
GetJoypadAnalogInput(&XBuf, &YBuf, DX_INPUT_PAD1);
GetHitKeyStateAll(KeyState);
SetJoypadDeadZone(DX_INPUT_PAD1, 30.0);
X = XBuf+330;
int Y = YBuf;
if (XBuf < 0) {
XBuf = 0;
};
if (XBuf > 350) {
XBuf = 350;
};
float radian = atan2f(Y, X);
angle = radian;
/*angle = radian;*/
//player1
// Dを押していたら右に進む
if (KeyState[KEY_INPUT_D]) {
p1_pos_x += 7;
if (p1_pos_x >= 1130) {
p1_pos_x = 1130;
};
}
// Aを押していたら左に進む
if (KeyState[KEY_INPUT_A]) {
p1_pos_x -= 7;
if (p1_pos_x < 0) {
p1_pos_x = 0;
};
};
//player2
// 右を押していたら右に進む
if (KeyState[KEY_INPUT_RIGHT]) {
p2_pos_x += 7;
if (p2_pos_x > 1280) {
p2_pos_x = 1280;
};
};
// 左を押していたら左に進む
if (KeyState[KEY_INPUT_LEFT]) {
p2_pos_x -= 7;
if (p2_pos_x < 0) {
p2_pos_x = 0;
};
};
};
void PLayerDraw(int angle) {
if (X + 290>1100) {
exist = false;
DeleteGraph(P2Handle);
}
DrawGraph(p1_pos_x, p1_pos_y, P1Handle, TRUE);
DrawGraph(p2_pos_x, p2_pos_y, P2Handle, TRUE);
//DrawRotaGraph2(500, 500, 230, 420, 1.0, angle, wHandle, TRUE, FALSE);
DrawGraph(XBuf+290, w_pos_y, wHandle, TRUE);
};
ctrl+F5を押した際に初期設定されているwindowのサイズの黒画面が出てきてそのあとに私が設定したサイズの画面が出てきて下記の処理が実行されています。
実行してからしばらくすると処理が止まってしまい入力を受け付けずキャラが動かなくなってしまいます。
どうすれば2つの問題を解決できるのでしょうか。
main.cpp↓
[code]
#include "ALL.h"
int WINAPI WinMain(HINSTANCE h1, HINSTANCE hp, LPSTR lpC, int nC)
{
// ウィンドウモードにする
ChangeWindowMode(TRUE);
// DXライブラリの初期化
if (DxLib_Init() == -1) return -1;
SetGraphMode(1280, 720, 32);
// 裏画面を描画対象にする
SetDrawScreen(DX_SCREEN_BACK);
// 正常にDXライブラリが処理されていて、ESCPEキーが押されているときのみループを脱出する
while (ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0)
{
// 画面消去
ClearDrawScreen();
timer++;
// この中に行いたい処理を書いていく
//---------------------------------------------
//初期化
//---------------------------------------------
BGInit();
PlayerInit();
//---------------------------------------------
//更新
//---------------------------------------------
PlayerUpdate();
//---------------------------------------------
//描画
//---------------------------------------------
BGDraw();
PLayerDraw(angle);
// 画面入れ替え
ScreenFlip();
}
// DXライブラリの終了処理
DxLib_End();
return 0;
}
[/code]
Player.cpp↓
[code]
#include "ALL.h"
#include <math.h>
#define PAI 3.14
int P1Handle;
int P2Handle;
int wHandle;
int p1_pos_x = 170, p1_pos_y =420,Key;
int p2_pos_x = 820, p2_pos_y = 420, Key2;
int w_pos_x = 125, w_pos_y = 550;
char KeyState[256];
int XBuf, YBuf;
float angle = -90;
int X;
bool exist=true;
void PlayerInit(){
P1Handle = LoadGraph("image//Player1.png");
if (exist == true) {
P2Handle = LoadGraph("image//Player2.png");
};
wHandle= LoadGraph("image//sword.png");
};
void PlayerUpdate() {
GetJoypadAnalogInput(&XBuf, &YBuf, DX_INPUT_PAD1);
GetHitKeyStateAll(KeyState);
SetJoypadDeadZone(DX_INPUT_PAD1, 30.0);
X = XBuf+330;
int Y = YBuf;
if (XBuf < 0) {
XBuf = 0;
};
if (XBuf > 350) {
XBuf = 350;
};
float radian = atan2f(Y, X);
angle = radian;
/*angle = radian;*/
//player1
// Dを押していたら右に進む
if (KeyState[KEY_INPUT_D]) {
p1_pos_x += 7;
if (p1_pos_x >= 1130) {
p1_pos_x = 1130;
};
}
// Aを押していたら左に進む
if (KeyState[KEY_INPUT_A]) {
p1_pos_x -= 7;
if (p1_pos_x < 0) {
p1_pos_x = 0;
};
};
//player2
// 右を押していたら右に進む
if (KeyState[KEY_INPUT_RIGHT]) {
p2_pos_x += 7;
if (p2_pos_x > 1280) {
p2_pos_x = 1280;
};
};
// 左を押していたら左に進む
if (KeyState[KEY_INPUT_LEFT]) {
p2_pos_x -= 7;
if (p2_pos_x < 0) {
p2_pos_x = 0;
};
};
};
void PLayerDraw(int angle) {
if (X + 290>1100) {
exist = false;
DeleteGraph(P2Handle);
}
DrawGraph(p1_pos_x, p1_pos_y, P1Handle, TRUE);
DrawGraph(p2_pos_x, p2_pos_y, P2Handle, TRUE);
//DrawRotaGraph2(500, 500, 230, 420, 1.0, angle, wHandle, TRUE, FALSE);
DrawGraph(XBuf+290, w_pos_y, wHandle, TRUE);
};
[/code]