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

アバター
アナログの人 ◆krhTNL90uxqM
2018/5/16 16:07
協力
プログラム修正協力者募集!!
助けてください
公開キー[X3A83XNY]

内容:主にスライドパッド関連。上下左右とななめを判定させたいと思いまして作ったのですが、ななめの角度が細かすぎ、ぐるぐるやってもななめが反応しない、などの不具合があるので、ぜひ直してほしいです。
IFが9割くらい占めてます。多分低レベルな問題だと思うのですが、解決法が見当たらんのです...
というわけで、みなさんお願いします。

コメント

アバター
moi 2018/5/16 18:08 ◆hL/XpFV8MD2F
あは、。
KZNQE38J

スライドパッドの変化量は±0.8くらいなので、0.4にしました。
アバター
アナログの人 2018/5/16 18:41 ◆krhTNL90uxqM
>moiさん
ありがとうございます!!
さすがPetitverse(というかPetitverse民)というべきか、解決速度速いですねw
アバター
アナログの人 2018/5/16 19:03 ◆krhTNL90uxqM
>ツララさん
えっと...「答えだけ」で済むのでは?
答えを教えようと思ったら、プログラムリストや公開キーを送らないと教えられないですよね?
それを見れば、自分位のかろうじてプログラムを打てる人ならプログラムに含まれる意味とかは分かると思います。
アバター
say 2018/5/16 22:54 ◆1nbKtD/tFu04
どうせ確認を取ったところで何もしないんだから、それこそ無駄なことなのに何がしたいんだろうね?

まあ、そんなことはともかく、斜めから先に判定したらだいぶそれっぽくなりますね
あと、これは書き方がまるっきし変わりますが、atanを使って角度から方向を引っ張り出すってやり方もあります
アバター
say 2018/5/17 0:00 ◆1nbKtD/tFu04
atanを使ったやりかた
KDC4X3HJ

左から反時計回りに1,2,3…8となってます
アバター
say 2018/5/17 0:37 ◆1nbKtD/tFu04
上のatanを使ったやりかたで書いてみました
アバター
アナログの人 2018/5/17 7:43 ◆krhTNL90uxqM
>sayさん
おおー、8方向を角度で取得してるんですね!
角度使うのめんどくさそうだと思ってたら
めちゃスマートでしたw
ありがとうございます!
アバター
おちゃめ 2日前 ◆jH1opV6FnGyx
なぜ、アナログの人さんが作った判定で斜めの判定が正常に行えないかというと想定している判定と実際の判定に食い違いがあるためです。
プログラムを見る限り恐らく上記の図の左のようなイメージで斜め判定を行いたいのだと思います。(この図の青の円形部分がスライドパッドの可動範囲)

これを見ると0.25、-0.25という数値の絶対値を小さくすれば斜め判定がどんどん大きくなっていきそうですが、実際はどれだけ大きくしても上手く判定は行われないことに気づいているから質問したのでしょう。
その原因となっているのは、このプログラムでは上下左右に順番に判定が行われてそれで条件を満たさない場合に斜め判定が行われるからです。
したがって、実際は上記の図の右のような極めて狭い範囲でしか斜めの判定は行われていません。
この図を見てのように外周部には斜め判定は全くありません。したがって、外周をぐるぐる回転した場合には斜めには一切入らないのです。
斜めに入れるためにはスライドパッドを一杯に動かすのではなく半分くらいに保った状態でやれば良いことが分かりますが、それでは非常に使い勝手が悪いですね。

この問題を解決する必要があるのですが、最も手っ取り早いのは斜め判定を上下左右判定よりも先に行うことです。
こうすることで、上下左右判定は「斜め判定が行われなかった範囲」において判定が行われるため想定される範囲より狭くなりますが、それでも上下左右に入らないという状態にはなりません。

ここで、0.25や0.5という値を自分が使いやすいと思える値に変更すればそれだけで普通に使うならば十分なプログラムになるでしょう。
しかし、IF文だらけなのが気になるため「よりスマートに記述を行いたい」というのであれば、「右上の判定」というのは「右判定と上判定の両方を満たしている場合」と考えることで可能になります。
具体的なプログラムはプチコン3号に最初から入っているサンプルプルプログラムのGAME3の最終行のSTKANDBTN()という自作関数を参考にしてみてください。
アバター
おちゃめ 2日前 ◆jH1opV6FnGyx
個人的には、スライドパッドを十字ボタン代わりに使用したい場合は、sayさんが行っているようなATANを使ったやり方をオススメしたいです。
「ATANを使った方法」がGAME3で使用されているようなSTICK OUT X,Yの「XYの値から判定する」のと比べてどのようなメリットがあるのか、とか、どういう点に注意したら良いのかをtwitterや私のサイトのプチコン3号入門講座で解説を書いているので良かったら参考にしてみてください。

https://twitter.com/ochame_nako/status/996970776224935937
http://ochameclub.web.fc2.com/petitcom3/lecture/button.htm#5
アバター
アナログの人 2日前 ◆krhTNL90uxqM
>おちゃめさん
twitterと入門講座、読みました! ありがたく参考にします!
なるほど、XYの判定よりもatanで判定する方が、より自分が求めているものに近づきそうです。
ありがとうございます!!

コメントを書く

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

- WEB PATIO -