21. キャラを一区間歩かせる。 の単元において

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
kerotan0820
記事: 91
登録日時: 13年前
住所: 東京都
連絡を取る:

21. キャラを一区間歩かせる。 の単元において

#1

投稿記事 by kerotan0820 » 13年前

/*****************************************************************************
一区を32ピクセルとし、一区間移動するたびに4つの画像データをループさせます。 一回の移動範囲は32ピクセルなので、それを8で割って表示すべき画像を求めるとのことらしいです
*****************************************************************************/

表示する画像を求める計算が


ch.img=image[(ch.x%32)/8 +12];
これで求められるとのことですが、理解ができません

その時のx座標、xh.x を 32 で割ったあまりから 32ピクセルを一区としたときにいくつ目の区間にいるかが求められるのはわかります。
そのあまりをなぜ8で割るのでしょうか

32を4つに分けたいので、8で割ると書いてありますが、なぜ4つにわけるのに8つに分けるのでしょうか…
[(割ったあまり)/8+12] ということですよね

割ったあまりが、丸めて4だったとしたら、4/8は小数点以下なので、切り捨てられて0。 0+12で12の画像が表示

いくつめの区間なのか、という数字をなぜ割ったところでいくつ目の画像を表示できるのかもわかりません。

どうかご教示願います

■追記■
http://dixq.net/g/23.html
上記URLです
けろけろにゃー (」・ω・)」うー!

アバター
kimuchi
記事: 163
登録日時: 13年前
住所: 東京

Re: 21. キャラを一区間歩かせる。 の単元において

#2

投稿記事 by kimuchi » 13年前

まずキャラクターの画像は、
上を向いているキャラ画像:image[0]〜image[3]
左を向いているキャラ画像:image[4]〜image[7]
下を向いているキャラ画像:image[8]〜image[11]
右を向いているキャラ画像:image[12]〜image[15]
となっています。

仮に右に1マス進む場合を考えることにします。
つまり使用したいキャラ画像は「image[12]〜image[15]」です。
32ピクセル分で1マスの扱いですから、
キーを押すと「ch.x」→「ch.x+32」までキャラのx座標が進みます。

ここからが本題ですが、
image[(ch.x%32)/8 +12];

「ch.x%32」の取り得る値は「0〜31」です。これが現在のマスからの現在位置となっています。
現在のマスから目的地マスまで、4つの歩行画像を表示するためには、この値が
0 〜7 (1区間目)のときimage[12]
8 〜15(2区間目)のときimage[13]
16〜23(3区間目)のときimage[14]
24〜31(4区間目)のときimage[15]
を表示すれば良い訳です。
32/4 = 8
つまり8ピクセル進む間同じ画像が表示されています。
そこで次のマスに進むまでの32ピクセル間を8ピクセルで区切ります。(4区間に分けたいから)
ここで「ch.x%32/8」の値は、
0 〜7 のとき0
8 〜15のとき1
16〜23のとき2
24〜31のとき3で、
4つの状態に分けることができます。
あとは画像配列の番号に会わせて12を足してやっているだけです。

まとめると、
次のマスまで32ピクセル移動する間を4つの区間に分けると
1区間が8ピクセルなので、元居たマスからの現在位置を8で割ることで、
今何番目の区間にいるのかが分かるので、
その区間番号に対応した画像を表示させて、歩行を表現しています。

文章力に乏しいので分かりづらい所があればお願いします。

アバター
kerotan0820
記事: 91
登録日時: 13年前
住所: 東京都
連絡を取る:

Re: 21. キャラを一区間歩かせる。 の単元において

#3

投稿記事 by kerotan0820 » 13年前

kimuchiさん>>

kimuchiさんの回答をもとに、わからない点を搾り出した結果、私は色々と計算式の意味を勘違いしていたようです。

(ch.x % 32)の範囲が 0~31であり、それを8で割ることで[12+0]~[12+3]までの範囲を搾り出すことができるのですね。

本当に回答ありがとうございました。

お陰さまで助かりました。
けろけろにゃー (」・ω・)」うー!

閉鎖

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