キャラの移動
Posted: 2012年4月29日(日) 11:21
こんにちは。
現在こちらを参考に
キャラの移動プログラムを組んでおります。
プログラムの構造はURL先とほぼ同じですので、ソースの方は
URL先をご覧ください。
ただし、
URL先のプログラムを変更した箇所があります。
①32→16へ変更
②'=='を'>='に変更
その他多々ありますが基本的にこの程度です。
ここからが本題です。
上記はマップデータだと思ってください。
またA,B,C,Dは0と思ってください。
(-1は移動できない場所)
キャラクターがA地点から左方向へ移動したとします。この時、-1へ当たった時は
移動できないはずです。ところが、B地点の場所で移動できなくなるのです。
これは下から上へ移動した場合も一個手前のマップチップで止まります。
しかし、CからD、上から下への移動時は正しく-1で止まります。
これには法則もあります。
A→Bへ移動する際、変化しているのはx座標です。本来移動は16で割り切れた場所区切りと
なります(①で変更したため)。ところがBで止まった時の座標を16で割ると、小数点が
0.875になります。これは下から上へ移動して手前で止まってしまう場合も同じです。
そこでちょっといじくって、0.875だったら移動できるようにプログラミングしました。
すると今度は0.875では通過しましたが、0.75で止まってしまうのです。
どうやら1-0.875=0.125ずつ減っていることが分かります。(つまり0.875/0.125でも0.75/0.125でも割り切れる)
意味が分からないと思います。すみません。
まとめます。
マップの当たり判定である-1の一歩手前の座標で止まってしまう。
ただしそれは右から左方向、下から上方向の際だけ。
また止まってしまう時の座標を16で割ると0.125の倍数である。
えー、解決方法は自分で考えます。ただ、その解決につながるヒント
を頂けたら十分です。~が原因だろう、というような解答でおkです。
よろしくお願いいたします。
環境:
OS:Windows7
コンパイラ:Visual C++ 2008 EE
腕は初心者です。
現在こちらを参考に
キャラの移動プログラムを組んでおります。
プログラムの構造はURL先とほぼ同じですので、ソースの方は
URL先をご覧ください。
ただし、
if( x %16①==0 && y %16① ==0 ){ //座標が16で割り切れたら入力可能
walking_flag=1; //歩くフラグを立てる。
if ( Key[ KEY_INPUT_UP ] >= 1② ){ //上ボタンが押されたら
mukiA=3; //上向きフラグを立てる
}
①32→16へ変更
②'=='を'>='に変更
その他多々ありますが基本的にこの程度です。
ここからが本題です。
{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0, 0, 0, 0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},//0
{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0, 0, 0, 0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},//1
{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1, -1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},//2
{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,C,D,-1,-1, -1,-1,-1,B,A,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},//3
{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1, -1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},//4
またA,B,C,Dは0と思ってください。
(-1は移動できない場所)
キャラクターがA地点から左方向へ移動したとします。この時、-1へ当たった時は
移動できないはずです。ところが、B地点の場所で移動できなくなるのです。
これは下から上へ移動した場合も一個手前のマップチップで止まります。
しかし、CからD、上から下への移動時は正しく-1で止まります。
これには法則もあります。
A→Bへ移動する際、変化しているのはx座標です。本来移動は16で割り切れた場所区切りと
なります(①で変更したため)。ところがBで止まった時の座標を16で割ると、小数点が
0.875になります。これは下から上へ移動して手前で止まってしまう場合も同じです。
そこでちょっといじくって、0.875だったら移動できるようにプログラミングしました。
すると今度は0.875では通過しましたが、0.75で止まってしまうのです。
どうやら1-0.875=0.125ずつ減っていることが分かります。(つまり0.875/0.125でも0.75/0.125でも割り切れる)
意味が分からないと思います。すみません。
まとめます。
マップの当たり判定である-1の一歩手前の座標で止まってしまう。
ただしそれは右から左方向、下から上方向の際だけ。
また止まってしまう時の座標を16で割ると0.125の倍数である。
えー、解決方法は自分で考えます。ただ、その解決につながるヒント
を頂けたら十分です。~が原因だろう、というような解答でおkです。
よろしくお願いいたします。
環境:
OS:Windows7
コンパイラ:Visual C++ 2008 EE
腕は初心者です。