投稿
くろあらまき optimize_key-DS
質問です。見下ろし型のアクションゲームのような動き(ゼルダ風)を作ろうかと思っていたのですが、横の壁にぶつかっているときに斜め入力した際、壁にめり込んでしまいます。何故でしょう?上と下の壁は問題ないのですが… and処理ではなく ==で斜め移動自体廃止するのも考えたのですが、それだと攻撃ボタンなど、新しいボタンを追加したときに十字キーと同時押しできなくなってしまいますし…うーん…
1そうだね
プレイ済み
返信[1]
親投稿
くろあらまき optimize_key-DS
画面はこんな感じです。
1そうだね
プレイ済み
返信[2]
親投稿
めり込む原因は判定の仕方にもよるのでとりあえずおいておくとして、十字キーの斜め無効とボタンを同時押しなら出来ますよ。 ボタン判定を IF (B AND 15) == 4 THEN〜 IF (B AND 15) == 8 THEN〜 IF (B AND 15) == 1 THEN〜 IF (B AND 15) == 2 THEN〜 とすれば、十字ボタンの斜め押し無効での処理は出来てボタンは押されていても押されてなくても大丈夫です。 理由は、まずB AND 15として十字キーの部分だけのデータを取り出して、その部分だけを元に各キーの判定をしているからです。
0そうだね
プレイ済み
返信[3]
親投稿
ちなみにめり込む原因はチェックしている位置が問題ですね〜。 IFは上から順に実行されますが、斜めの場合、左右の判定のチェック位置に対して次の上下の判定が上書きされてしまい、実質Y方向の当たり判定しかしないで左右にも動いてしまっています。 なので、その辺も考慮して当たり判定を調整しないと斜め押しに対応した当たり判定にはならない感じですね〜。
0そうだね
プレイ済み
返信[4]
親投稿
ツララ LongIceSword
いっその事IF文を省略して X=(((B AND 12)==8)-((B AND 12)==4))×係数 Y=(((B AND 3)==2)-((B AND 3)==1))×係数 みたいな書き方だとどうなるんでしょう? ちょっと自分で試してみてないんで上手く行くか分らないですけど。
0そうだね
プレイ済み
返信[5]
親投稿
ちょっとだけ補足です。 当たり判定ですが、ちゃんとめり込まないようにやろうとしたら厳密には2点(斜め移動あるなら3点)ぐらいの当たりをチェックしないとめり込んでしまうかもしれません。(キャラクターに幅があるので) 今は周囲を取り囲んでいる壁だけなので1点でもうまく出来るかもしれませんが、マップの中にブロックとかを置き始めたら複数点の確認が必要になるかと思います。
0そうだね
プレイ済み