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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
あおいだよ
記事: 11
登録日時: 9年前
住所: 日本

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

#1

投稿記事 by あおいだよ » 9年前

キャラを一区間歩かせたいのですが自分が歩いてほしい画像が表示しません
21節をコピペしてプログラムの館のchar.pngなら一区間に歩いてくれるのですが、自分が歩いてほしい画像は表示しません。
表示して歩かせる方法を知りたいです。
21節の説明もちゃんと見て色々試してみたのですができなかったので教えてほしいです。
画像を張っておきます><
添付ファイル
けい.png
けい.png (4.11 KiB) 閲覧数: 3932 回

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

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

#2

投稿記事 by みけCAT » 9年前

正しいコードを書き、コンパイルして実行すればいいでしょう。
今のソースコードを載せていただければ、どこを修正すればいいかわかるかもしれません。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

あおいだよ
記事: 11
登録日時: 9年前
住所: 日本

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

#3

投稿記事 by あおいだよ » 9年前

間違っていると思いますが張っておきます。

コード:

#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;
}

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

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

#4

投稿記事 by みけCAT » 9年前

あおいだよ さんが書きました:

コード:

		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座標にあった画像を指定
とかにするといいかもしれません。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

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

#5

投稿記事 by みけCAT » 9年前

みけ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++の剰余の定義 - ここは匣
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

あおいだよ
記事: 11
登録日時: 9年前
住所: 日本

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

#6

投稿記事 by あおいだよ » 9年前

みけCATさんが教えてくれたコードをすべて試してみましたができませんでした
どうすればいいでしょうか・・・

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

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

#7

投稿記事 by みけCAT » 9年前

こちらで試した所、どちらもうまく動きました。
作りたい挙動と、観測される挙動を具体的に教えてください。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

あおいだよ
記事: 11
登録日時: 9年前
住所: 日本

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

#8

投稿記事 by あおいだよ » 9年前

みけCATさんありがとうございます!できました!
何が原因で出来なかったは分かりませんがコピペをやり直したらできました。
挙動はみけCATさんが教えてくれた

コード:

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

あおいだよ
記事: 11
登録日時: 9年前
住所: 日本

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

#9

投稿記事 by あおいだよ » 9年前

あとは自分で頑張ります・・・

閉鎖

“C言語何でも質問掲示板” へ戻る