ページ 11

キャラを一区間歩かせたいのですができません。

Posted: 2016年6月04日(土) 17:23
by あおいだよ
キャラを一区間歩かせたいのですが自分が歩いてほしい画像が表示しません
21節をコピペしてプログラムの館のchar.pngなら一区間に歩いてくれるのですが、自分が歩いてほしい画像は表示しません。
表示して歩かせる方法を知りたいです。
21節の説明もちゃんと見て色々試してみたのですができなかったので教えてほしいです。
画像を張っておきます><

Re: キャラを一区間歩かせたいのですができません。

Posted: 2016年6月04日(土) 18:24
by みけCAT
正しいコードを書き、コンパイルして実行すればいいでしょう。
今のソースコードを載せていただければ、どこを修正すればいいかわかるかもしれません。

Re: キャラを一区間歩かせたいのですができません。

Posted: 2016年6月04日(土) 19:05
by あおいだよ
間違っていると思いますが張っておきます。

コード:

#include "DxLib.h"

typedef struct {
	int x, y, img;
}ch_t;

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {

	int image[12];
	char Key[256];
	ch_t ch;

	if (ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1) return -1; //ウィンドウ化と初期化処理

	ch.x = 320;
	ch.y = 240;

	SetDrawScreen(DX_SCREEN_BACK);                                                 //描画先を裏画面に設定
	LoadDivGraph("けい.png", 12, 3, 4, 64, 64, image);//画像を分割してimage配列に保存

	while (!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll(Key) && !Key[KEY_INPUT_ESCAPE]) {
		//↑メッセージ処理        ↑画面をクリア         ↑キーボード入力状態取得       ↑ESCが押されると終了

		if (Key[KEY_INPUT_RIGHT] == 1)      //右ボタンが押されたら
			ch.x++;                        //xの値を1増やす

		else if (ch.x % 64 != 0)
			ch.x++;

		ch.img = image[(ch.x % 64) / 8 + 12];          //現在のx座標にあった画像を指定     

		DrawGraph(ch.x, ch.y, ch.img, TRUE);//画像を描画

		ScreenFlip();//裏画面を表画面に反映
	}

	DxLib_End();
	return 0;
}

Re: キャラを一区間歩かせたいのですができません。

Posted: 2016年6月04日(土) 19:09
by みけCAT
あおいだよ さんが書きました:

コード:

		ch.img = image[(ch.x % 64) / 8 + 12];          //現在のx座標にあった画像を指定     
全力で確保された範囲の外にアクセスしていますね…
右に歩く画像は6番目~8番目(0-origin)なので、例えば

コード:

		ch.img = image[(ch.x % 64) * 3 / 64 + 6];          //現在のx座標にあった画像を指定
とか

コード:

		ch.img = image[((ch.x % 64) / 7) % 3 + 6];          //現在のx座標にあった画像を指定
とかにするといいかもしれません。

Re: キャラを一区間歩かせたいのですができません。

Posted: 2016年6月04日(土) 20:12
by みけCAT
みけCAT さんが書きました:右に歩く画像は6番目~8番目(0-origin)なので、例えば

コード:

		ch.img = image[(ch.x % 64) * 3 / 64 + 6];          //現在のx座標にあった画像を指定
とか

コード:

		ch.img = image[((ch.x % 64) / 7) % 3 + 6];          //現在のx座標にあった画像を指定
とかにするといいかもしれません。
座標が負になる可能性がある場合は、負の数を正の数で割った余りは負の数になることがあるので、この計算式ではまずいですね。
(C++03では処理系定義、C++11では負の数を正の数で割った余りは0以下になる)
C++の剰余の定義 - ここは匣

Re: キャラを一区間歩かせたいのですができません。

Posted: 2016年6月04日(土) 23:01
by あおいだよ
みけCATさんが教えてくれたコードをすべて試してみましたができませんでした
どうすればいいでしょうか・・・

Re: キャラを一区間歩かせたいのですができません。

Posted: 2016年6月04日(土) 23:40
by みけCAT
こちらで試した所、どちらもうまく動きました。
作りたい挙動と、観測される挙動を具体的に教えてください。

Re: キャラを一区間歩かせたいのですができません。

Posted: 2016年6月05日(日) 00:34
by あおいだよ
みけCATさんありがとうございます!できました!
何が原因で出来なかったは分かりませんがコピペをやり直したらできました。
挙動はみけCATさんが教えてくれた

コード:

 ch.img = image[((ch.x % 64) / 7) % 3 + 6]; 
がとても良かったです。
気になる所があるのですがどうやって計算をしたのか教えてほしいです。
プログラミング館の説明を見ても理解できませんでした。

Re: キャラを一区間歩かせたいのですができません。

Posted: 2016年6月05日(日) 15:52
by あおいだよ
あとは自分で頑張ります・・・