考え方はしあさんので合ってると思うです。 わたしでも同じ風にやるはずです。(私の作ったブロック積みゲームのテーブル配置も、基本的にしあさんと処理内容同じなので。)
いくつか怪しい?ところを発見したので修正をかけてみたです。 Jikiクラスのmoveメソッド if(Key.up){の中のpy = py - 120;だと、pyの値がマイナスの値になる可能性 が出てくるです。おそらくこれが、ブロックの上の方で突如、処理が止まる 原因だと思うです。なので、次の行に if(py < 0){ py = 0; } を追加してみたです。
JikiクラスのBlockメソッド tmpy = px / 32; tmpx = py / 32; if(app.map[tmpx][tmpy] > 1) return true; 最終的には、問題は無いと思うですけど。tmpyにはやっぱりpy関係の値が tmpxにはpx関係の値が入ったほうがいいかな〜。そうすると 次のapp.map[tmpx][tmpy]もtmpxとtmpyを逆に。(一つ目の添え字はY関連だと 思うので。) //修正後 tmpy = py / 32; tmpx = px / 32; if(app.map[tmpy][tmpx] > 1) return true;
他にも、変数の値を見るために、System.out.println()で出力してたり、 テーブルに枠をつけてみたりして、デバックしやすいようにしてみたです。
ブロックの中にキャラクタが入ってしまう原因ですけど。 おそらく、ジャンプした後の落下中に、ブロックが左または右にあったときに oldxに戻す処理が呼ばれてないからだと思うです。 それを直すために、いくつか試してみたんですが、ちょっと無理だったです。 ごめんなさい〜
修正したファイル ttp://homepage3.nifty.com/teranet/pakuri.java |