コミュニティアイコン プチコン 非公式コミュニティ トピック

アバター
海月ちゃん ◆jfoZX/rRZr9p
2018/5/27 6:22
質問
当たり判定問題
アクションを1から作ろうとして速攻で詰んだ
滅茶苦茶になったからとりあえずnewしてやり直すことにする

コメント

アバター
海月ちゃん 2018/5/27 6:31 ◆jfoZX/rRZr9p
@重力問題
重力加速度が大きすぎると地面(BG)にめり込む
A位置修正問題
@を修正するためにめり込んだ場合上に戻そうとするが一気に戻すとガクガクして少しずつ戻すとゆっくり戻って操作性が悪い
B横移動問題
横移動した際にめり込み防止を試みるもAのような状態になる。さらに壁にめり込んでいる間Aの影響で壁にぶつかる度にほんの少しだけ上に登る為、壁に触れているあいだ落下が遅くなる
C天井問題
ジャンプによる天井突破グレンラガンを防ぐ為ぶつかった瞬間に加速度を0にするものの速すぎるとめり込んで結局Aの影響で上に登る
アバター
say 2018/5/27 7:57 ◆1nbKtD/tFu04
挙動の最高速度に上限を設けてみたら?
あと、位置補正は、移動方向を見て(+か−で判定できるはず)衝突直前の位置に補正するようにするとか

Aの問題については、ちと想像できなかったので無視してますが、@,B,Cの問題については、たぶんなんとかなる?
おいらもやってみよっと♪
アバター
海月ちゃん 2018/5/27 8:26 ◆jfoZX/rRZr9p
・最高速度を制限した場合
めり込まない速度で最高速度を設定するとくっそ遅くなる。ナメクジ
・横移動の際に衝突直前の位置に補正する場合
ある程度速度があった場合その分引き戻されるので壁に衝突したにも関わらず壁との間に隙間ができてしまう
アバター
こういち 2018/5/27 8:27 ◆ou0jbJnEJ0Kb
@めり込んだら戻すのではなく、移動しようとする先にBGがない場合のみ移動するのはどうでしょう。
アバター
海月ちゃん 2018/5/27 8:37 ◆jfoZX/rRZr9p
kwsk
ちなみにキャラの1ドット下にBGがない場合重力加速と言う設定出やっていましたが速度一定じゃないんで結局めり込んでました
アバター
こういち 2018/5/27 9:38 ◆ou0jbJnEJ0Kb
IF BGGET(0,X,Y+SPEED,1) THEN
 Y=Y+SPEED

ENDIF
こんな感じと思いましたが、よくよく考えたら速度が速すぎるとキャラクター浮きますね。
アバター
Villit 2018/5/27 15:34 ◆vHS9PZuQvtOx
マップがBGなのであれば、16*16のグリッドに合わせてやるのが楽だと思います
壁に当たった時に押し戻す、というよりは、16の倍数の座標にワープさせるイメージですね
どうせ壁は16*16なんですから、壁のすぐ隣も自動的に16の倍数になるはずです

原点を左上、キャラを16*16と仮定して、
プレイヤーのX座標をMY_X、横方向への移動をするとします

プラス方向に移動したときに衝突したなら
MY_X = FLOOR( MY_X / 16 )*16

マイナス方向なら
MY_X = FLOOR( (MY_X + 16) / 16 )*16

多分これでなんとかなるんじゃないかなーと
移動量が1フレーム15ドット以下ならきちんと動くと思います
もし間違ってたらゴメンナサイ
アバター
しんいち 2018/5/27 15:41 ◆lHy.hAWXbthn
私もプチコン始めたばかりの頃に作りかけたアクションゲームで、壁にめり込んだり、壁すり抜けたり(斜めで接しているブロックの角と角のところから)してました。それはそれでスーパーマリオっぽい動きになって面白かったんですけど。

その時の原因は、あたり判定とスプライト表示の処理順番でした。あたり判定含め、キャラの座標計算をメインループの前半で完全に済ませてから、後半で計算済みの座標に表示するのみ、としたら直った覚えがあります。

あと、キャラの移動速度はキャラサイズ16×16なら最速でも1フレーム16を超えないようにしたり(SPCOLVECとか使えば超えても自然に見えるように出来るのかもしれないけど、使ったことない)。

#敵キャラ作るの面倒でずっと放置してたけど、作成再開したくなってきた(^o^)
アバター
でんぺん 2018/5/29 13:41 ◆HfSy5ayxtyTa
基本的なやり方は他の人も言っているような感じで座標を補正する事だと思います。聞いてもよくわからない感じだとしたら、また追加で質問してみるといいかも。それも踏まえて補足。

@重力問題
移動速度が一定でない場合、地面にめり込んだ位置になるのはしょうがないので、その際に適切に地面の上の座標に補正する事が大事です。
それよりも速度が増える場合、16ドットのBGの場合は16を超えた速度になる方が問題になりやすく、すり抜けが発生してしまうので、これは速度の最大を16以下にするのが一番簡単じゃ無いかと思います。

A位置修正問題
おそらく今はぶつかった以前の位置に戻す、もしくは一定値を加減算して補正しようとしているのだと思うので、そうじゃなくてちゃんとBGの位置から求めた位置に補正すれば問題は出なくなると思います。

B横移動問題
これはきちんと補正すれば発生しなくなるところもありますが、サイドビューの場合、重力(縦方向)と移動(左右)が同時に発生する事で補正がしづらくなるケースはあります。
つまり横補正を優先すると(ギリギリの際)BGの上に乗りづらくなったり、縦方向を優先するとブロックの上にワープしたりなどですが、その辺は挙動を見ながら補正順番や値を調整して良い感じに調整する感じかなと思います。
(移動の中間値も計算してより正確に処理する事も出来なくはないですが…)

C天井問題
これは天井にぶつかったときにきちんとその下の位置に座標を補正すれば発生しなくなります。

と言う感じですが、まずはこの正確な座標補正が出来ないと対処しづらいので、Villitさんのコメントなども参考にやってみるといいと思います。
アバター
ツララ 2018/5/29 16:14 ◆ArUdBYOYME1V
点じゃなくて線で当たり判定してやればいいんじゃないんです?
ラインを超えたら移動前の座標じゃなくてラインの座標に戻す感じで

出ている意見の中で無理っぽいと思ったなら延長じゃなくて根本からひっくり返して考えてみた方がいいと思うんですけど
他の人の意見を否定する事になるとか変な気の遣い方してると余計に話が変な方向に行っちゃいますよ?
だからこそ海月さんもNEWしてるんでしょうし

というか、ちょっと否定されたくらいで腹の虫の居所が悪くなるなんて幼児くらいですし
プチコンはプレイヤーの平均年齢高めのソフトなんですからそんな心配無用だと思うんですけど
アバター
メタリックとうがらし 2018/5/29 16:57 ◆FabnnIYTwzUk
Aの位置修正に関して、僕の場合は
少しずつ上に戻す動作を地上に達するまで何度も繰り返すループでやっています。壁や天井も同じようにやっています。それでも速すぎると貫通や瞬間移動をしてしまいますが…。
アバター
海月ちゃん 2018/6/3 17:03 ◆jfoZX/rRZr9p
色々参考にして作り直してるけど
変数が1の時にBを押すとジャンプって言うのができない
IF (A==1)AND(BUTTON(2)AND32)ってやってるんだけど反応しない
=とAND混ぜちゃダメなのかなぁ
アバター
こういち 2018/6/3 17:09 ◆ou0jbJnEJ0Kb
その書き方だとうまく動かないと思います。
=とANDは混ぜてもいいんですが、ANDとANDは混ぜるとうまくいかない場合があります。
A==1は0か1の値を返し、(BUTTON(2) AND 32)は0か32しか返さないので、それのANDはどう足掻いても0になります。
正しくは
IF A==1&&(BUTTON(2)AND 32)==32 THEN
こうすれば(BUTTON(2)AND 32)==32の部分は0か1しか返さなくなるし、そもそも&&は0かそれ以外かしか判断しないので、返される値が0,1だろうと0,32だろうと関係ない。
アバター
海月ちゃん 2018/6/3 17:27 ◆jfoZX/rRZr9p
なるほど!32が返ってきてたのかてっきり同じなら全部1返ってくるもんだとばかり思ってました
アバター
海月ちゃん 2018/6/3 17:49 ◆jfoZX/rRZr9p
皆さんの協力のおかげてやっと基礎の基礎が出来ましたー(((o(*゚▽゚*)o)))

コメントを書く

  • こちらは「プチコン3号」「プチコンBIG」など、プチコンシリーズに関する話題を扱ったコミュニティです
  • プチコンシリーズにまったく関係ない書き込みはご遠慮下さい。削除の対象となります
  • こちらにはその他のゲームや雑談のコミュニティはなく、作る予定もありません (ひとりで管理できないため)。ごめんなさい
  • ユーザー登録なしで書き込みができます
  • 秘密の合い言葉は成りすましの防止 (トリップ機能)、書き込みの編集時の本人認証に使用します
  • 秘密の合い言葉に他人に推測されやすい言葉、他サービスと同じパスワードは入力しないでください。
  • 書き込むと、投稿時に入力したお名前と秘密の暗号が記憶され、ログイン状態になります

- WEB PATIO -