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

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

コメント

アバター
クロマリオ 2020/7/4 10:57 ◆jST6XW8BxBax
WAIT 5か…
待機時間が長すぎてBUTTON受付が短くなってしまっています。
だから、反応出来ない現象が起きます。
アバター
クロマリオ 2020/7/4 11:20 ◆jST6XW8BxBax
選択肢の安定を目指せば、VSYNC、WAITの違いの話はあんまり重要じゃない

簡潔に言うと待機させる量はVSYNCであろうがWITHであろうが、1でいいんですよ。
どのみち肉眼的に安定すればそれでokだし、VSYNCなんぞ、気持ちの問題

え、そうじゃないの?
アバター
あまさとしおん 2020/7/4 13:56 ◆mzDKTVUAtwqE
WAITは間違いなのかというのは「思った通りに動いてそうならOK」なのか「理論的に正しいことを説明できて、かつ期待した通りに動作する」のどちらを求めるかで変わります。

要求する水準が「思った通りに動いてそうならOK」ならWAITでもFORの空ループでもなんでもいいです。

要求する水準が「理論的に正しいことを説明できて、かつ期待した通りに動作する」ならVSYNCを使うかMAINCNTの監視をするかのいずれかで確実な同期を取ってください。ということになります。

もし、将来的に機能を付け加えたりする見込みがあるなら、後者の方が無用な事故を起こしにくいと思いますが…
(あと、プチコン自体のアップデートで処理速度が変化することもあります)
アバター
あまさとしおん 2020/7/4 14:03 ◆mzDKTVUAtwqE
INKEY$が話題に挙がっていますが、INKEY$はBUTTONとは異なり、フレームの同期を気にする必要はない(はず)ですが、「バッファ」という仕組みになっていることに注意が必要です。

たとえば次のプログラムを実行すると
WAIT 120'←ここで2秒待っている間に"A","B","C"の順番でキーを押します
PRINT INKEY$()'1回目は最初に押した"A"になる
PRINT INKEY$()'2回目は"A"の次に押した"B"になる
PRINT INKEY$()'3回目は"B"の次に押した"C"になる
PRINT INKEY$()'4回目は"C"の次は何も押してないから""(空の文字列)になる
簡単に言うと「INKEY$()を1回使うごとに押した順番に1文字ずつ戻ってくる」という感じです。
BUTTON()と異なり、同じフレームの間であっても違う結果になります。

INKEY$()は一度変数に入れた方がいい、というのはこのような仕組みが原因です。
アバター
クロマリオ 2020/7/4 14:55 ◆jST6XW8BxBax
あまさとしおんさん

基本的に前者で対応して後者を求めてるならさらに投稿主が質問を追加すればいい。
事故なんぞ、どの、プチコンのサンプルプログラムでもVSYNCをwaitに置き換えても問題なく動作すると愚考しますけどね。

まあ、forの空をわざわざ使おうなんて発想は逆にめんどくさそうですけど。

後者はクオリティーを目指す時の趣向じゃないですかね?でも、それは投稿主が求めるかはわからないけど、本当に求めるならまだしも、求めてないなら話をややこしくしてるよね。
アバター
あまさとしおん 2020/7/4 15:00 ◆mzDKTVUAtwqE
確かに、いきなりややこしい話題を出してしまうと混乱を招いてしまうという点は改善の余地があります、そこは反省。

(ただ、返答を付けるぐらいなら命令名ぐらいは正しく書いていただきたいですが、ね)
アバター
クロマリオ 2020/7/4 15:10 ◆jST6XW8BxBax
あまさとしおんさん
あ、ほんとだね。辞書ちゃんと見なきゃね。
アバター
あまさとしおん 2020/7/4 15:10 ◆mzDKTVUAtwqE
>後者はクオリティーを目指す時の趣向じゃないですかね?
未然に予期せぬ動作をする芽を摘んでおくことは、高いクオリティの作品を目指すかどうかにかかわらず意義があります。
(作っている作品が簡易的なツールであったとしても、ハマって時間を浪費しないことには意義がある)
アバター
クロマリオ 2020/7/4 15:15 ◆jST6XW8BxBax
あまさとしおんさん
まあ、心配性ならVSYNCを使えばいいでしょうね。
…選択肢内でのwaitをつかって予期せぬ動作の例をあげてみてください。
アバター
クロマリオ 2020/7/4 15:28 ◆jST6XW8BxBax
…いや、さすがに茶を濁しすぎました。
深く、反省します。
あまさとしおんさんの言う通り、VSYNCは正しい手段。安定を目指す場合こいつを使ってやればループと独立してるアニメ系とのずれの回避に繋がると思われます。
アバター
さすらいの名無し 2020/7/4 15:36 ◆LWMA5UzCJb3e
上で議論になってるけど、自分は前者(動いていればOK)です。
アバター
あまさとしおん 2020/7/4 15:37 ◆mzDKTVUAtwqE
(テストプログラムを作ってみたのですが、グラフィック面を使った負荷の大きい選択プログラムでも、滅多にボタンの取りこぼしがないので、普通に使ってる分にはトラブルが起きないというレベルでプチコンは速いですね)

※投稿主さん:これは返信に対する返信なのであまり気にしないでください
アバター
Na 2020/7/4 15:38 ◆QoELVrBXBQCI
WAITで不具合が起きるのは主に重くて処理落ちするプログラムですね。
例えば初代プチコンのサンプルゲーム3。(初代持ってないけど)
3号だと私のVisualMMLってやつは異常に重いので、VSYNCをWAITにするとMMLによってはボタンが全然反応しなくなります。

逆にVSYNCで予期せぬ動作する例もありますよ。
BGMPLAY 4
WHILE BGMCHK()
WEND
?"3"
VSYNC 60
?"2"
VSYNC 60
?"1"
VSYNC 60
?"スタート"
アバター
あまさとしおん 2020/7/4 15:45 ◆mzDKTVUAtwqE
何故VSYNCを熱烈にお勧めしているのかと冷静に考えなおしたら、初代からプチコンをやっていたせいなのかもしれませんね

現行のVSYNCと同じものはプチコンmkII以降に搭載されていますが、mkIIの時はメインループにGCLSを書いたらロクに60fpsなんてでない時代でした。
その時期の記憶があるから、処理時間の影響を受けるWAITに注意してしまうんだなぁとしみじみ。
アバター
あまさとしおん 2020/7/4 15:53 ◆mzDKTVUAtwqE
Naさんの「VSYNCで予期せぬ動作」の例
これはプチコン内部の周期に合わせる目的ではなく、単に一定時間待つ目的でにVSYNCを使ってしまう事例ですね。
この場合は逆にWAITが適しています。
(VSYNCを使ったループはWHILE-WENDなどの条件ループと混ぜてはいけない)
↑ここは難しいので流していいです

↓これは覚えておくのがおススメ
VSYNC、WAITともに使い道があるから搭載されています。
どちらかがいらない命令というわけではありません。
アバター
でんぺん 2020/7/4 16:12 ◆HfSy5ayxtyTa
わかって使っていればどっちでもいいと思いますが、なんとなく命令名的には、待つという明確な意思があるならWAIT、メインループなどで同期をとるという目的ならVSYNCの方がスッキリするようなイメージがありますね。
アバター
あんちもん 2020/7/4 16:54 ◆8qCJSJ1bKTIQ
F-4 Phantomさんも多方面から一気にアドバイスされて捌くの大変だと思いますが、自分の分かりやすいと思った意見だけチョイスして、難しいことは後回しで作ってみるのが良いんじゃないかなー。
(私含めて喋りたい人が多すぎて投稿者さんがやる気なくならないかちょっと心配でした。お節介失礼しました。)
アバター
F-4 Phantom 2020/7/4 17:04 ◆2Fao.QP8H0Nw
皆さんありがとうございます
なんか良くわからないですが
またこれから機能追加していったりするときの為になるべくエラーは起きないようにしようってのも分かるし、動けば良いってのも良くわかります。
とりあえず、私はボタン操作が出来れば良いのでリピートの設定をして対応しようと思います。
皆さんありがとうございました!

コメントを書く

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

- WEB PATIO -