ページ 11

分割した画像を歩かせたいのですが、サイズ(?)が分からないためできない。

Posted: 2016年5月23日(月) 22:34
by あおいだよ
分割した画像を歩かせたいです。
ですが、サイズと言うのでしょうか、それが分からないので不自然に歩きます。
LoadDivGraph("ゲーム素材.png", 12, 3, 4, 49, 66, gh);
4,49,66サイズを指定すると思うのですがそのサイズが分からなくてどうすればいいか分かりません。
一応プログラムコードを記載しておきます><。
code
#include "DxLib.h"

// プログラムは WinMain から始まります
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
ChangeWindowMode(TRUE);

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

//キー取得用配列
char key[256];

//x座標
int x = 300, y = 240;



//グラフィックハンドル格納用配列
int gh[12];


//画像読み込み
LoadDivGraph("ゲーム素材.png", 12, 3, 4, 49, 66, gh);

//移動係数
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

Re: 分割した画像を歩かせたいのですが、サイズ(?)が分からないためできない。

Posted: 2016年5月23日(月) 22:39
by あおいだよ
初めての質問で説明が意味不明ですが、お願いします><

Re: 分割した画像を歩かせたいのですが、サイズ(?)が分からないためできない。

Posted: 2016年5月23日(月) 22:54
by みけCAT
画像をもとにサイズを調べて正しい値を入れればいいでしょう。
その画像が見えない私には、正しいサイズを当てるのは不可能に近いです。
もしくは、あきらめる、という選択肢もあります。

Re: 分割した画像を歩かせたいのですが、サイズ(?)が分からないためできない。

Posted: 2016年5月23日(月) 23:00
by みけCAT
コードに不自然な点があるので、まずそこを解消するのもいいかもしれません。
あおいだよ さんが書きました:

コード:

		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;

		}
キャストの優先順位は掛け算や複合代入より高いので、(int)4 * moveは4 * moveと同じ意味であり、(int)を書く意味がありません。
ただし、書いても意味が無いだけで間違いではありません。
あおいだよ さんが書きました:

コード:

		//左キーが押されてて、かつ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;
		}
コメントは「0以上なら」や「0以下なら」なのに、コードは「0より大きいなら」や「0未満なら」になっており、一致していません。(0とわかっているならわざわざ0を代入しなくてよいという考え方もありますが…)
また、右キーが押されてて、かつxcountが0より大きい場合は、コメントでは「1引く」なのに、コードは「1足す」になっており、これは明らかに一致していません。
そもそも、例えば上キーが押されていない場合は「上キーが押されてて、かつycountが0以上」以外なので1引くはずなのに、引いていないので、これも一致していません。
下、左、右キーについても同様に一致していません。

Re: 分割した画像を歩かせたいのですが、サイズ(?)が分からないためできない。

Posted: 2016年5月24日(火) 06:50
by あおいだよ
コードの修正 コードの不一致を直しました。コードはちゃんと動いていたので、コメントを直しました。
ですが画像の表示はおかしいままです。
サイズの問題だと思うのでサイズの求め方を教えてほしいです。

Re: 分割した画像を歩かせたいのですが、サイズ(?)が分からないためできない。

Posted: 2016年5月24日(火) 16:17
by Ketty
LoadDivGraphの引数の意味が分からないのでしょうか。
↓これらを読んでみても分からないですか?
http://dxlib.o.oo7.jp/function/dxfunc_graph1.html#R3N3
http://dixq.net/g/02_08.html

"けい.png"をみると、
 ・ヨコに3コマ並んでいる
 ・タテに4コマ並んでいる
のと分かるので、

LoadDivGraphには以下のように引数を渡します。
第1引数:ファイル名="けい.png"
第2引数:コマの合計の数=3×4の12
第3引数:ヨコのコマ数=3
第4引数:タテのコマ数=4
第5引数:1コマのヨコpx=けい.pngのヨコpx÷3
第6引数:1コマのタテpx=けい.pngのタテpx÷4
第7引数:ハンドルバッファ

Re: 分割した画像を歩かせたいのですが、サイズ(?)が分からないためできない。

Posted: 2016年5月25日(水) 03:00
by shira211
もしかして何コマごとに分割すればいいか数えるのが面倒という意味ですか?

EDGEとかGIMPみたいなグリッド表示できるエディタを使えばいいんじゃないんですかね

Re: 分割した画像を歩かせたいのですが、サイズ(?)が分からないためできない。

Posted: 2016年5月26日(木) 16:28
by あおいだよ
解決しました!ありがとうございます!
第5引数と第6引数のサイズの求め方が分からなかったのですが。
Kettyさんの回答で求め方が分かったので、それを見たらできました。