#1
by Ouxiy » 4年前
以下のプログラムにおいて背景をバックにキャラを移動させたいのですが、なぜか背景しか映りません。
キャラを背景の後に書いたはずなのですが、どうもうまくいきません。
環境は
- Windows10、DXライブラリ、visual studio 2019
です。
コード:
#include "DxLib.h"
// プログラムは WinMain から始まります
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
ChangeWindowMode(true); // ウィンドウモードにする
SetGraphMode(640, 480, 0); // ウィンドウの大きさを指定
SetMainWindowText("背景と移動"); // ウィンドウのタイトルを指定
SetOutApplicationLogValidFlag(FALSE); // ログの出力を無効化
if (DxLib_Init() == -1) // DXライブラリ初期化処理
{
ChangeWindowMode(TRUE);
return -1; // エラーが起きたら直ちに終了
}
int imgBack = LoadGraph("back.bmp");
while (!ProcessMessage()) {
// 画面をクリア
ClearDrawScreen();
// 背景の画像を描画
DrawGraph(0, 0, imgBack, false);
// 画面に出力
ScreenFlip();
}
//キー取得用配列
char key[256];
//x座標
int x = 0, y = 0;
//グラフィックハンドル格納用配列
int gh[12];
//画像読み込み
// プレイヤーの画像を読み込む
int imgChara = LoadDivGraph("charall.png", 12, 3, 4, 49, 66, gh);
while (!ProcessMessage()) {
//ClearDrawScreen();
// キャラの画像を描画
DrawGraph(0, 0, imgChara, true);
// 画面に出力
ScreenFlip();
}
WaitKey(); // 結果を見るためにキー待ち(『WaitKey』を使用)
//移動係数
float move = 1.0f;
//横方向と縦方向のカウント数。
int xcount = 0, ycount = 0;
//添字用変数
int ix = 0, iy = 0, result = 0;
while (ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0 && GetHitKeyStateAll(key) == 0) {
if (key[KEY_INPUT_LEFT] == 1 || key[KEY_INPUT_RIGHT] == 1) {
if (key[KEY_INPUT_UP] == 1 || key[KEY_INPUT_DOWN] == 1) {
//移動係数を0.71に設定
move = 0.71f;
}
else {
//斜めじゃなければ1.0に設定
move = 1.0f;
}
}
else if (key[KEY_INPUT_UP] == 1 || key[KEY_INPUT_DOWN] == 1) {
move = 1.0f;
}
if (key[KEY_INPUT_LEFT] == 1) {
x -= (int)4 * move;
}
if (key[KEY_INPUT_RIGHT] == 1) {
x += (int)4 * move;
}
if (key[KEY_INPUT_UP] == 1) {
y -= (int)4 * move;
}
if (key[KEY_INPUT_DOWN] == 1) {
y += (int)4 * move;
}
//左キーが押されてて、かつxcountが0以上なら0にしてから1引く。
//それ以外は1引く
if (key[KEY_INPUT_LEFT] == 1) {
if (xcount > 0)
xcount = 0;
--xcount;
}
//右キーが押されてて、かつxcountが0以下なら0にしてから1足す。
//それ以外は1引く
if (key[KEY_INPUT_RIGHT] == 1) {
if (xcount < 0)
xcount = 0;
++xcount;
}
//上キーが押されてて、かつycountが0以上なら0にしてから1引く。
//それ以外は1引く
if (key[KEY_INPUT_UP] == 1) {
if (ycount > 0)
ycount = 0;
--ycount;
}
//下キーが押されてて、かつycountが0以下なら0にしてから1足す。
//それ以外は1足す
if (key[KEY_INPUT_DOWN] == 1) {
if (ycount < 0)
ycount = 0;
++ycount;
}
//カウント数から添字を求める。
ix = abs(xcount) % 30 / 10;
iy = abs(ycount) % 30 / 10;
//xカウントがプラスなら右向きなので2行目の先頭添字番号を足す。
if (xcount > 0) {
ix += 3;
result = ix;
}
else if (xcount < 0) {
//マイナスなら左向きなので、4行目の先頭添字番号を足す。
ix += 9;
result = ix;
}
//yカウントがプラスなら下向きなので、3行目の先頭添字番号を足す。
if (ycount > 0) {
iy += 6;
result = iy;
}
else if (ycount < 0) {
//1行目の先頭添字番号は0なので何もする必要なし。(分かりやすくするために書いときました)
iy += 0;
result = iy;
}
//斜め移動の場合は横顔を優先
if (move == 0.71f)
result = ix;
//描画
DrawGraph(x, y, gh[result], TRUE);
//押されてなければカウントをゼロにする。
if (key[KEY_INPUT_LEFT] != 1 && key[KEY_INPUT_RIGHT] != 1) {
xcount = 0;
}
if (key[KEY_INPUT_UP] != 1 && key[KEY_INPUT_DOWN] != 1) {
ycount = 0;
}
if (key[KEY_INPUT_ESCAPE] == 1) {
break;
}
}
DxLib_End(); // DXライブラリ使用の終了処理
return 0; // ソフトの終了
}
以下のプログラムにおいて背景をバックにキャラを移動させたいのですが、なぜか背景しか映りません。
キャラを背景の後に書いたはずなのですが、どうもうまくいきません。
環境は[list]Windows10、DXライブラリ、visual studio 2019[/list] です。
[code]#include "DxLib.h"
// プログラムは WinMain から始まります
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
ChangeWindowMode(true); // ウィンドウモードにする
SetGraphMode(640, 480, 0); // ウィンドウの大きさを指定
SetMainWindowText("背景と移動"); // ウィンドウのタイトルを指定
SetOutApplicationLogValidFlag(FALSE); // ログの出力を無効化
if (DxLib_Init() == -1) // DXライブラリ初期化処理
{
ChangeWindowMode(TRUE);
return -1; // エラーが起きたら直ちに終了
}
int imgBack = LoadGraph("back.bmp");
while (!ProcessMessage()) {
// 画面をクリア
ClearDrawScreen();
// 背景の画像を描画
DrawGraph(0, 0, imgBack, false);
// 画面に出力
ScreenFlip();
}
//キー取得用配列
char key[256];
//x座標
int x = 0, y = 0;
//グラフィックハンドル格納用配列
int gh[12];
//画像読み込み
// プレイヤーの画像を読み込む
int imgChara = LoadDivGraph("charall.png", 12, 3, 4, 49, 66, gh);
while (!ProcessMessage()) {
//ClearDrawScreen();
// キャラの画像を描画
DrawGraph(0, 0, imgChara, true);
// 画面に出力
ScreenFlip();
}
WaitKey(); // 結果を見るためにキー待ち(『WaitKey』を使用)
//移動係数
float move = 1.0f;
//横方向と縦方向のカウント数。
int xcount = 0, ycount = 0;
//添字用変数
int ix = 0, iy = 0, result = 0;
while (ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0 && GetHitKeyStateAll(key) == 0) {
if (key[KEY_INPUT_LEFT] == 1 || key[KEY_INPUT_RIGHT] == 1) {
if (key[KEY_INPUT_UP] == 1 || key[KEY_INPUT_DOWN] == 1) {
//移動係数を0.71に設定
move = 0.71f;
}
else {
//斜めじゃなければ1.0に設定
move = 1.0f;
}
}
else if (key[KEY_INPUT_UP] == 1 || key[KEY_INPUT_DOWN] == 1) {
move = 1.0f;
}
if (key[KEY_INPUT_LEFT] == 1) {
x -= (int)4 * move;
}
if (key[KEY_INPUT_RIGHT] == 1) {
x += (int)4 * move;
}
if (key[KEY_INPUT_UP] == 1) {
y -= (int)4 * move;
}
if (key[KEY_INPUT_DOWN] == 1) {
y += (int)4 * move;
}
//左キーが押されてて、かつxcountが0以上なら0にしてから1引く。
//それ以外は1引く
if (key[KEY_INPUT_LEFT] == 1) {
if (xcount > 0)
xcount = 0;
--xcount;
}
//右キーが押されてて、かつxcountが0以下なら0にしてから1足す。
//それ以外は1引く
if (key[KEY_INPUT_RIGHT] == 1) {
if (xcount < 0)
xcount = 0;
++xcount;
}
//上キーが押されてて、かつycountが0以上なら0にしてから1引く。
//それ以外は1引く
if (key[KEY_INPUT_UP] == 1) {
if (ycount > 0)
ycount = 0;
--ycount;
}
//下キーが押されてて、かつycountが0以下なら0にしてから1足す。
//それ以外は1足す
if (key[KEY_INPUT_DOWN] == 1) {
if (ycount < 0)
ycount = 0;
++ycount;
}
//カウント数から添字を求める。
ix = abs(xcount) % 30 / 10;
iy = abs(ycount) % 30 / 10;
//xカウントがプラスなら右向きなので2行目の先頭添字番号を足す。
if (xcount > 0) {
ix += 3;
result = ix;
}
else if (xcount < 0) {
//マイナスなら左向きなので、4行目の先頭添字番号を足す。
ix += 9;
result = ix;
}
//yカウントがプラスなら下向きなので、3行目の先頭添字番号を足す。
if (ycount > 0) {
iy += 6;
result = iy;
}
else if (ycount < 0) {
//1行目の先頭添字番号は0なので何もする必要なし。(分かりやすくするために書いときました)
iy += 0;
result = iy;
}
//斜め移動の場合は横顔を優先
if (move == 0.71f)
result = ix;
//描画
DrawGraph(x, y, gh[result], TRUE);
//押されてなければカウントをゼロにする。
if (key[KEY_INPUT_LEFT] != 1 && key[KEY_INPUT_RIGHT] != 1) {
xcount = 0;
}
if (key[KEY_INPUT_UP] != 1 && key[KEY_INPUT_DOWN] != 1) {
ycount = 0;
}
if (key[KEY_INPUT_ESCAPE] == 1) {
break;
}
}
DxLib_End(); // DXライブラリ使用の終了処理
return 0; // ソフトの終了
}[/code]