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

アバター
F-4 Phantom ◆2Fao.QP8H0Nw
2020/7/2 23:42
質問
選択画面作り方
初歩的な質問ですが…
選択画面でボタンを使うとき、WAITを使うとタイミングが悪いと反応しない事があるんですが、そうならない様に皆さんはどうしてますか?

コメント

アバター
オワたず 2020/7/2 23:49 ◆w7BXxYlkW2NJ
vsyncを使うといいですよ
アバター
でんぺん 2020/7/3 3:18 ◆HfSy5ayxtyTa
WAITは完全に時間を止めてしまうのでメインループ自体はVSYNCでなるべく高速に処理して、一定時間のウエイトが必要なら繰り返し回数をカウントするなどして対応するのがいいと思いますよ。

あとBUTTON命令には押した瞬間のみ反応するものや時間を指定したオートリピート機能などもついているので、それを利用すると選択画面とかは作りやすく鳴ると思います。
アバター
クロマリオ 2020/7/3 15:58 ◆jST6XW8BxBax
どうも、WAIT派の人です。

WAITのフレームカウントを多くし過ぎている可能性。(またはループ内に複数のwaitを置いてしまっている可能性)
WAITは基本的に1でおk。(省略した場合も1になる)
また、逆に選択肢が早くなった場合は、BUTTONでリピート無しを指定するか、BREPEATで調整していけばいいと思われ。

それ以外の可能性は処理落ちくらいかな…
アバター
F-4 Phantom 2020/7/3 16:54 ◆2Fao.QP8H0Nw
オワたずさん
なるほど。
試してみます!
ありがとうございます!
アバター
F-4 Phantom 2020/7/3 16:57 ◆2Fao.QP8H0Nw
でんぺんさん
なるほど。
キーリピート試してみます!
ありがとうございます
アバター
F-4 Phantom 2020/7/3 16:59 ◆2Fao.QP8H0Nw
クロマリオさん
BREPEATで設定出来たんですね。知りませんでした!
てっきり設定画面で変えるしかないものだと思ってました。
試してみます!
アバター
あまさとしおん 2020/7/3 19:12 ◆mzDKTVUAtwqE
WAIT 1は
ただ単に1フレーム待つもの

VSYNC 1は
前にVSYNCを通った時間から数えて1フレーム待つもの

ボタン情報の更新は、BASICプログラムの処理にかかる時間に関係なく1フレームの間隔で実行されるので「仕様上はVSYNCが正しい」です。
WAITは「偶然うまくいっている」という感じです。

1フレーム…ほぼ1/60秒
(プチコン3号では約1/59.83秒、プチコン4では1/60秒)
アバター
Na 2020/7/3 20:44 ◆QoELVrBXBQCI
「タイミングが悪いと反応しない」が具体的にどうタイミングが悪いのかよくわからないので、F4さんの今のボタン入力のプログラムを書いてくれるとアドバイスしやすいと思います。
アバター
F-4 Phantom 2020/7/4 0:19 ◆2Fao.QP8H0Nw
あまさとしおんさん
なるほど
正しくはVSYNCなんですね
知りませんでした
ありがとうございます!
アバター
F-4 Phantom 2020/7/4 0:28 ◆2Fao.QP8H0Nw
Naさん
タイミングと言うのはボタンを押すタイミングの事です。
確かに私のコード見せた方が良かったかも知れませんね
WHILE 1
IF BUTTION()=#UP AND SELECT!=0 THEN SELECT=SELECT-1
IF BUTTION()=#DOWN AND SELECT!=3 THEN SELECT=SELECT+1
SEL0
?"A
SEL1
?"B
SEL2
?"C
SEL3
?"D
SEL3
?"E
WAIT 5
WEND

DEF SEL△
COROL #TRED
IF SELECT=△ THEN COROL #TWHITE
END
(△=0~3)

間違えてる所もあるかもしれませんが、大体こんな感じです
アバター
オワたず 2020/7/4 1:52 ◆w7BXxYlkW2NJ
brepeatで色々設定した上で、
b=button(1)
if b=#up and ...
if b=#down and ...
の方がいいかもしれません
アバター
F-4 Phantom 2020/7/4 2:04 ◆2Fao.QP8H0Nw
なるほど。
ありがとうございます
WAITもVSYNCも使わずそれで行こうと思います。
あと、良くButtonをBとかにしているの見かけますが何の意味があるんですか?
アバター
あんちもん 2020/7/4 9:22 ◆8qCJSJ1bKTIQ
変数に入れる理由は、
・BUTTON()関数を呼ぶより、変数を参照したほうが実行時間が速い(といってもほとんど意味のないくらいの差だと思いますが)ので、1ループ中に2回以上参照するなら変数にいれておこうかな
・1文字変数ならタイピングも楽だし
というあたりかと思います(; ̄▽ ̄)
みなつさんのツイートから引用。
https://twitter.com/tksm372/status/1278617558275338241?s=21

Villitさんや小林社長の意見も参考になると思います。
アバター
さすらいの74 2020/7/4 9:39 ◆LWMA5UzCJb3e
ただ単に入力を楽にするためだと思っててけど、処理速度も違うのか…()

INKEY$とかは変数に入れないと正しく実行されないことはあるが(特にIFでINKEY$を使うとき)
アバター
さすらいの74 2020/7/4 9:43 ◆LWMA5UzCJb3e
DEF SEL△
COROL #TRED
IF SELECT=△ THEN COROL #TWHITE
END
(△=0~3)

この部分1つのDEFにまとめて、

DEF SEL A
COLOR #TRED
IF SELECT==A THEN COLOR #TWHITE
END

と化にすればいいと思います。
COROLがよくわからなかったから勝手にCOLORと解釈したけど、COROLというDEFとかですか?そうじゃないならSyntax errorになると思いますが(そもそもIFの=でSyntax errorになるが)
アバター
あんちもん 2020/7/4 9:51 ◆8qCJSJ1bKTIQ
BREPEATとBUTTON(1)を使えばVSYNCが要らない、というわけではないですよ。
VSYNCについては かなだらいさんの記事が分かりやすいと思います。
http://kanadaraimk2.web.fc2.com/vsync.html
VSYNC 1をWAIT 1にしても同じような挙動になりますが、あまさとさんの言う通り役割的にはVSYNCが正しいです。
ややこしかったらとりあえずWHILE 1の直後、もしくはWENDの直前には絶対VSYNCを書いておく、くらいの認識でも良いと思います。

コメントを書く

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

- WEB PATIO -