プチコンBIG コミュニティプレイ日記PianoRider pianorider2016/12/20 02:19:07ここ数日間、『プチコン3号まとめWiki』というサイトの「プチコン3号&BIG 非公式初心者講座」という特集を、頭から湯気が出るほど(笑)熟読しておりますw その成果が出ました☆ 先日の投稿で目標に定めた“足し算&引き算ゲームを、GAMEPADのボタンに対応させる”プログラムを作ることができました♪ 2つの数字を入力し、Aボタンを押すと足し算の答えが。Bボタンを押すと引き算の答えが表示されます。 コメントにてEDIT画面を載せてみようと思います♪41そうだね 24返信プレイ済み2017/11/04 02:07:35に取得
プチコンBIG コミュニティ返信[1]親投稿PianoRider pianorider2016/12/19 19:20この写真・・・大画面のTVでも文字が読みにくいですねw それで、少し問題がありまして・・・続く。4そうだね プレイ済み2017/11/04 02:07:35に取得
プチコンBIG コミュニティ返信[2]親投稿PianoRider pianorider2016/12/19 19:23Bボタンで引き算をしたときは問題ないのですが、Aボタンで足し算をしたときに、OKが複数回表示されてしまいます。 これを回避する方法はあるのかしら・・・。4そうだね プレイ済み2017/11/04 02:07:35に取得
プチコンBIG コミュニティ返信[3]親投稿ねこはち neko800_22016/12/19 19:34ざっとリストを見たところ、OKが2回出るのはBUTTON関数とVSYNCがセットになっていないために、プログラム終了直後にもう一度Aボタンを押したことになっているためですね。2そうだね プレイ済み2017/11/04 02:07:35に取得
プチコンBIG コミュニティ返信[4]親投稿PianoRider pianorider2016/12/19 19:41ねこはちさん、ご教授をありがとうございます! 実は VSYNC 6 で、やってみたのですが結果は同じだったので削除してしまいました。 もっと長く設定すればAボタンの連打が防げる、ということですよね? 明日やってみます♪2そうだね プレイ済み2017/11/04 02:07:35に取得
プチコンBIG コミュニティ返信[5]親投稿ねこはち neko800_22016/12/19 19:52最初のVSYNCは無視されるのでCLSやACLSの直後に一つ置きます。 プチコンは、実際にVSYNCの長さで指定した待ちが入るのは2個目のVSYNCからになる仕様みたいです。 たぶんpianistさんの場合、これが原因っぽいので、VSYNCの長さは変える必要はないと思います。2そうだね プレイ済み2017/11/04 02:07:35に取得
プチコンBIG コミュニティ返信[6]親投稿あまさと しおん ShionAmasato2016/12/20 8:41ボタン開放を待ってからプログラムを終えるのも良いです WHILE BUTTON():VSYNC:WEND ここのVSYNCは負荷軽減くらいしか意味無いけどあったほうが良さそう4そうだね 未プレイ2017/11/04 02:07:35に取得
プチコンBIG コミュニティ返信[7]親投稿PianoRider pianorider2016/12/20 16:08ねこはちさんのアドバイス通りにVSYNCを入れてみました。 RUNしてみましたが、感覚的には入れても入れなくても変化がないように感じました。Aボタンを一瞬で離せばVSYNC有り無しに関わらずOKは一回で済むようです。 すみません、まだまだ解らないことだらけです(^^;)1そうだね プレイ済み2017/11/04 02:07:35に取得
プチコンBIG コミュニティ返信[8]親投稿PianoRider pianorider2016/12/20 16:16あまさと しおんさん、ご教授をありがとうございます! アドバイス通りの命令を入れてみました。しっかりとプログラムが終わった感じがしまして、OKも一回ですみました。 まだ使ったことがない命令なのでよく意味が解りませんが、勉強を続けていく過程で覚えていきたいと思います(^^)2そうだね プレイ済み2017/11/04 02:07:35に取得
プチコンBIG コミュニティ返信[9]親投稿ねこはち neko800_22016/12/20 16:2126行目、27行目のVSYNCを消して、GOTO @LOOPの直前に一個VSYNCを入れましょう。 今の状態では、ボタンを押した後にしかVSYNCが実行されていないので、BUTTON関数が正しく動作していないのです('ω')1そうだね プレイ済み2017/11/04 02:07:35に取得
プチコンBIG コミュニティ返信[10]親投稿PianoRider pianorider2016/12/20 16:37そうすると、26行目、27行目のENDを消さなくてはなりませんよね? それで、消してみたところプログラムが終われなくなりました(あたりまえなのでしょうね・・・)。終わらないのでOKの表示もなくなったのですが・・・これでいいのでしょうか?2そうだね プレイ済み2017/11/04 02:07:35に取得
プチコンBIG コミュニティ返信[11]親投稿ねこはち neko800_22016/12/20 16:45ENDを消す必要はないです。 ENDとVSYNCは対ではないので、ENDはどこにどんな形で存在しても問題ないからです。 @LOOP IF C==16 THEN (略) VSYNC:END ←このVSYNCはループの通り道にないので終了直前まで実行されていない VSYNC ←このVSYNCはループの通り道にあるので実行される GOTO @LOOP VSYNCは「前回のVSYNCから一定時間が経過していなければそのタイミングまで待つ」という命令なので、CLS直後のVSYNCが実行されてから数値を入力しているあいだにそのタイミングが過ぎてしまうと、IFの後に書いても「待ち」が入らないので、pianistさんが最初にVSYNC 6などを試した時に無効になっていたのです。2そうだね プレイ済み2017/11/04 02:07:35に取得
プチコンBIG コミュニティ返信[13]親投稿PianoRider pianorider2016/12/20 17:24わざわざ同じプログラムを打ち込んでいただいて、ありがとうございます。 これだと、AボタンやBボタンを押したときに(ENDがあるので)プログラムが終了になってしまい、GOTO @LOOPの前のVSYNCは通らないのでは?・・・と思ってしまいました。 そしてこれをRUNさせると、やはりAボタンが連打されOKが複数出てしまいます。 色々無知で、申し訳ありません。2そうだね プレイ済み2017/11/04 02:07:35に取得
プチコンBIG コミュニティ返信[14]親投稿ねこはち neko800_22016/12/20 17:57では、26行27行のVSYNC 1をWAIT 8に変えましょう。 ボタンリピートの設定は人によって違うので、WAITならば8/60秒は確実に待つので、押しっぱなしにしなければ連打にはならないはずです。 連打が問題の場合、なぜ「意図しない箇所で連打」になるのかを考えた方が良いと思います。 pianistさんのプログラムの場合、「IFの条件分岐のタイミング」が挙動の不安定につながっています。 ループ中にVSYNCがなく、BUTTON(1)のキーリピートが3の場合、おおざっぱに0.01/60~2.99/60のどのタイミングで「IFの条件分岐」が実行されるかがボタンを押した瞬間に任されてしまうので、終了判定直下に次のキーリピートのタイミングがきた時に「ダイレクトモードでAを押した」となってしまい、結果、OKが二つ表示されてしまうのです。 2そうだね プレイ済み2017/11/04 02:07:35に取得
プチコンBIG コミュニティ返信[15]親投稿ねこはち neko800_22016/12/20 18:01これを防ぐにはあまさとさんのように「ボタンを離さなければ次に進まない」とするか、「一連の処理を次のボタン判定に間に合わせる」かのどちらかになり、私の場合は後者の処理を説明していました。 2そうだね プレイ済み2017/11/04 02:07:35に取得
プチコンBIG コミュニティ返信[16]親投稿PianoRider pianorider2016/12/21 0:17ねこはちさん、色々教えてくださりありがとうございます。理解できるところもあれば、まだ私には理解できない部分もあります。これからも勉強を続ければきっと解ってくると思っています。 『ボタンを対応させたプログラムを作る』という目標が果たせたので、少し先へ進んでみようと思います。またアドバイスをいただけると嬉しく思います。 m(_ _)m3そうだね プレイ済み2017/11/04 02:07:35に取得
プチコンBIG コミュニティ返信[17]親投稿おちゃめ ochame_nako2016/12/21 14:25VSYNCとWAITの使い分けはプチコン3号の前のプチコンmkIIから使っている人でも出来てない人が多いのですが、実際はすごくシンプルで「待たないと困る処理はWAIT」「待ちすぎると困る処理はVSYNC」を入れると簡単に使い分けができます。 今回のようなボタン入力処理の場合は一定時間待つことで改善が可能ですが、VSYNCでは「指定時間待つ」ということが保証されない(ねこはちさんもかかれているように前回のVSYNCからの経過時間となるため)ということで確実に待って欲しい処理にはWAITがベターということなのです。 3そうだね プレイ済み2017/11/04 02:07:35に取得
プチコンBIG コミュニティ返信[18]親投稿おちゃめ ochame_nako2016/12/21 14:26WAITは確実に待つため例えば30fpsで動作するゲームに処理時間を一定に保つためWAIT 2を入れるとWAITだけで2フレームとなるため30fpsでの動作保証はできなくなります。 その点、VSYNC 2は前回のVSYNCから2フレーム経過するまで待つため(処理落ちしている場合を除き)30fpsが保証されます。2そうだね プレイ済み2017/11/04 02:07:35に取得
プチコンBIG コミュニティ返信[19]親投稿おちゃめ ochame_nako2016/12/21 14:41ちなみに60fpsで動作しているプログラムのメインループに入れる場合はWAIT 1とVSYNC 1ではほぼ同じ動作となります。 「ほぼ」というからには全く同じということはなく異なる部分もあるわけですが、ループ内で初回に実行されるVSYNCはスキップされる可能性があるのに対してWAITは初回時でもスキップされないためです。普通のゲームならば最初の1フレーム目の動作を見分けることは困難であるためどちらを使ってもかまいません。 とはいえ、「メインループ」であれば「待ちすぎたら困る処理」であるので「ほぼ同じ」ということを理解して意図的にWAITを入れる場合を除きVSYNCの方がベターです。2そうだね プレイ済み2017/11/04 02:07:35に取得
プチコンBIG コミュニティ返信[20]親投稿PianoRider pianorider2016/12/21 15:08おちゃめさん、詳しい説明をありがとうございます! 内容全てを理解するには、まだまだ勉強不足な私です。この先きっと、このアドバイスを思い出してまた読み返す日がくると思います(^-^) ツイッターでお見かけしたのでフォローさせていただきました♪0そうだね プレイ済み2017/11/04 02:07:35に取得
プチコンBIG コミュニティ返信[21]親投稿withBのひだり hinayujin2016/12/24 10:11この投稿を見て、そのサイトを知って僕も勉強してます!ありがとうございます!!1そうだね プレイ済み2017/11/04 02:07:35に取得
プチコンBIG コミュニティ返信[22]親投稿PianoRider pianorider2016/12/24 10:25backnumberさん、コメントをありがとうございます! 共に頑張りましょう(^^)/0そうだね プレイ済み2017/11/04 02:07:35に取得