keito94 さんが書きました:ISLeさんのご指摘を受けて、ブロックの単位ではなく、座標で判定して見るようにしてみました。
CCollision::GetXPosition関数内
Collision.cpp:267行目~
コード:
int bpos = block.x * 16;
int brpos = bpos + 32;
int blpos = bpos - 32;
bool Debug = true;
if (brpos < *myx) {
*myx = (float)((block.x - 1) * 16 + 8 + OffsetR - 0.1f);
}
if (blpos > *myx) {
*myx = (float)((block.x + 1) * 16 + 8 + OffsetL + 0.1f);
}
CCollision::GetYPosition関数内
Collision.cpp:297行目~
コード:
int bpos = block.y * 16;
int bbpos = bpos - 8;
int btpos = bpos + 8;
bool Debug = true;
if (bbpos < *myy) {
*myy = (float)((block.y - 1) * 16 + 8 + OffsetD - 0.1f);
*jcount = 0;
*gflag = true;
}
if (btpos > *myy) {
*myy = (float)((block.y + 1) * 16 + 8 + OffsetU + 0.1f);
}
CCollision::GetXPositionでは32を足したり引いたり、CCollision::GetYPositionでは8を足したり引いたり…
どんな意味があるんです?
keito94 さんが書きました:でも、また新たなバグが発生してしまいました…。
実行すると、着地せずに画面外に落下します。
デバッグすれば、CCollision::GetXPositionでもCCollision::GetYPositionでも、ifの条件が両方同時に成立していることが確認できるはずですが。
このコードでは、画面外に消えるのが正常。
keito94さんは、トピにしてもコードにしても見直すのがめんどうくさいのでしょうか。
デバッグするのもめんどうくさいですか?
もしそうなら、プログラミングが好きではないのでしょう。
好きでもないのにプログラミングするのはつらいだけなのでやめたほうがいい。
仕事でないならプログラミングできなくて困るわけでもないでしょう。
あと、ゲームを好きでもないのにゲームを作ろうとするのもやめたほうがいい。
キャラをどう動かしていいか分からない、のでなくて、そもそもキャラがどう動くか知らないでしょう。
プログラミングできなくても既存ゲームをプレイして研究するとかはできますよね。
ゲームをプレイするのはめんどうくさいですか?
自分の作ってるゲームがどう動いているかにも興味ないですものね。