投稿
むゆー muyu-pon
格ゲーなどにあるステップを「→→or←←」というコマンドでできるようにしたいのですがどのようなプログラムで動作してくれるでしょうか?詳しい人是非!回答よろしくお願いします!
3そうだね
プレイ済み
返信[1]
親投稿
けい kei0baisoku
試した訳ではないので頭の中だけですが……… 例えば5フレーム以内にタタンでステップさせる場合、 DIM STEP_TIMER[2] '左、右 を用意して、「横を押した(BUTTON(2))瞬間」にタイマーに5をセット。 毎フレーム、タイマーがゼロより大きければ1引くようにし、もし「横を押した瞬間」にタイマーがゼロより大きければ5フレーム以内に連打したことになるので、ステップを行う。 という感じでどうでしょうか?
0そうだね
プレイ済み
返信[2]
親投稿
きのっこ citronsoda
配列を使ってリングバッファを作ります。 dim cmd[n] while 1 vsync 1 hantei(cmd) n= (n+1) mod n @loop
0そうだね
プレイ済み
返信[3]
親投稿
むゆー muyu-pon
できました! やっぱりこいいうのが出来るようになるとプログラミングは楽しいですね。 でも、きのっこさんのは難しくてまだ分からなかった……でもなんかすごそうなので後々理解できるように努力したいと思います。 お二人ともご回答ありがとうございました!
1そうだね
プレイ済み
返信[4]
親投稿
けい kei0baisoku
うまくいったようで良かったです(^O^) やりたい動きをしてくれた瞬間というのは、プログラムやってて一番楽しいですね(^^) きのっこさんの「リングバッファ」というのは、配列を使って保存するところまでは普通なのですが、有限なサイズの配列に無限に保存していくため、保存するインデックスをぐるぐるループさせる仕組みのことを言います。 が、例のプログラムをボタン連打判定にどう使うかまではちょっと具体的には分かりませんでした(?_?) ご本人さんの説明を待ちます。
1そうだね
プレイ済み
返信[5]
親投稿
きのっこ citronsoda
電車の中で書いていたので中途半端ですみませんでした。 別名「キュー」と呼ばれているもので、コマンドを入力したときに1回の手間で入力したコマンドを収納できます どこからコマンドを収納したかをHEADどこまでコマンドを収納したかをTAILにします そして、タイムアウトまで、待ちます。(ここが判定の難しいところです)VSYNC xx回でタイムアウトする、ような仕組みも 必要です そして、タイムアウトになると、HEADからTAILまでを見て、技がちゃんと入力されているかを判定してHEAD=TAIL このへんのデータ管理が、リアルタイム入力に向いているなと、ふと、アルゴリズムをチョイスしてみたというわけです。 これだけではまだ?でしょうけど、配列が長くなれば「覇王○○拳」とか長い技や、もっと長い技にも対応できます。 続きは「リングバッファ」で見て、理解するというチャレンジをされてはどうでしょうか?
0そうだね
プレイ済み
返信[6]
親投稿
きのっこ citronsoda
コードはすごくいい加減です(^^;; グーグル等でリングバッファ、キュー、循環バッファ というキーワードでしらべてみると、同じようなことが書いてあります、 コマンド入力が始まるとcmd[n]にbutton()が収納されてnを1プラスするのですが、配列を超えると(n mod N_NAGASA)を添え字(インデックス)にすることでぐるぐると回る、配列が出来上がります。 判定については、ウメ○ラさんぐらいシビアにするか、もうすこしヌルめにするか、はてさて、力量が問われるところだと思います
0そうだね
プレイ済み
返信[7]
親投稿
きのっこ citronsoda
と、ここまでかきましたが、そこまで複雑な入力ではなかったことに気がついた事実でした(^^; ちょっと飛躍しすぎてごめんなさい。ご参考までに!
0そうだね
プレイ済み
返信[8]
親投稿
むゆー muyu-pon
インデックスとは何でしょうか? なんかいろいろ聞いてすみません^^;;
0そうだね
プレイ済み
返信[9]
親投稿
きのっこ citronsoda
cmd[1] の 1や cmd[n]をインデックスといいます。添字、のほうがわかりやすでしょうか。同じ意味でも用語がいっぱいあって混乱しますねー。失礼しました!
0そうだね
プレイ済み
返信[10]
親投稿
むゆー muyu-pon
むむむ……調べたのですがよく分かりません。ですがいずれこの技術は必要になると思うのでぜひ習得したいのです……。お手数なのは承知の上ですが是非コードを詳しく教えてくれないでしょうか?
1そうだね
プレイ済み
返信[11]
親投稿
きのっこ citronsoda
私もいうだけでなにもつくってないので、脳を動かすためにたまにはプログラムをつくってみますねー! 明後日ぐらいに時間があくのでなんとか。。
0そうだね
プレイ済み
返信[12]
親投稿
むゆー muyu-pon
ありがとうございます!! とても助けになります……!
0そうだね
プレイ済み
返信[13]
親投稿
きのっこ citronsoda
試しにコードをかいてみましたが、長いので理解がなかなか難しいとおもうので、コメント等をいれてみたり、そして過去に書いてあることがちょっと間違っていたりと、お詫び申し上げます。しばらくお待ち下さいませ。 あと、配列よりも、キー入力周りのプログラムに慣れていないので苦戦中です(^^;
0そうだね
プレイ済み
返信[14]
親投稿
むゆー muyu-pon
了解です! わざわざありがとうございます。
0そうだね
プレイ済み
返信[15]
親投稿
きのっこ citronsoda
わー、わかりにくいプログラムになりました。 けいさんに見られたら怒られそうです(^^; NKKKE4D6です キューの動きを見るためのものなので、これでご勘弁。 使い方は起動してアルファベットや数字を10回以上いれてみてください10文字以上はループするようになっています。 そして、飽きたところでEnterを押してください さらにEnterを押すとキューから要素が取り出されていきます。 。。。わかりにくいですね。。申し訳ない。。
0そうだね
プレイ済み
返信[16]
親投稿
きのっこ citronsoda
エンキューというのがキューに何かを詰め込む(格闘ゲームだったらbutton()の値とかですね)。で、ある程度時間が来て、デキュー(キューからエンキューした情報)を読み込んで、ある程度、技だ!と判断したら技を発動させる。 そうすると、1つの配列だけで、管理できて、いいかなとおもって、なんとなく書き込んでしまいました。話がややこしくなってすみません。。
0そうだね
プレイ済み
返信[17]
親投稿
むゆー muyu-pon
なんか少しじつわかってきた気がします! ですが……一つ質問です。 25行目からの「キューに入れる」というところがよくわかりません……良ければ少し説明して頂けないでしょうか?
0そうだね
プレイ済み
返信[18]
親投稿
きのっこ citronsoda
いかに自分も、ライブラリに頼っていたか、、、 てきとうにプログラムを書いてもダメですね>< というのはまあしょうがないとして図で説明ということで良いかしら、ちゃんと実装しますので… まず10このリングバッファがあったとします このときHEAD=0, TAIL=0とします 0 1 2 3 4 5 6 7 8 9 □□□□□□□□□□ HEAD==TAILのときはキューは空です ではまずキューに○を入れます 0 1 2 3 4 5 6 7 8 9 ○□□□□□□□□□ このときHEAD=0,TAIL=1になります 続きます
0そうだね
プレイ済み
返信[19]
親投稿
きのっこ citronsoda
もう一度三角をキューに入れます 0 1 2 3 4 5 6 7 8 9 ○△□□□□□□□□ HEAD = 0, TAIL = 2になります ここで、キューから出します、ついでにこの時にA$[HEAD]の中○を取り出します、そしてHEADに+1してHEAD=HEAD mod 10します(さてなぜでしょう?) 0 1 2 3 4 5 6 7 8 9 ○△□□□□□□□□ HEAD=1, TAIL=2 次にもう一度キューから出します、ついでにこの時にA$[HEAD]の中△を取り出します 続きます
0そうだね
プレイ済み
返信[20]
親投稿
きのっこ citronsoda
そしてさらにHEADに+1してHEAD=HEAD mod 10します HEAD=2, TAIL=2になります。 そうすると、配列の中に、「ごみ」はありますが、キューは空の状態になります。 ここまでがキューに入れる方法と出す方法です。漏れがあったらすみません。
0そうだね
プレイ済み
返信[21]
親投稿
きのっこ citronsoda
HEAD==TAILの状態のときはキューは「空」になります。 今日はここまでにしたいとおもいます。Okなら自分でプログラムをつくってみるといいかも!
0そうだね
プレイ済み
返信[22]
親投稿
きのっこ citronsoda
やっぱり、漏れがありました TAILも+1するとき+1したあとTAIL mod 10する必要がありました><
1そうだね
プレイ済み
返信[23]
親投稿
けい kei0baisoku
壁|| ω・)チラッ 〈 呼ばれた気がして やだなぁ、私がそんな人様のプログラム見て怒ったりする訳ないじゃないですかー(´∀`) どれどれ拝見してみます。おおっ、これは、 分かりにくーーい!!(ノ´°Д°`#)ノ~┻━┻ (※お約束) すんません。言いたかっただけです(・ω・) まあ、茶番はこれくらいにして、知ってる状態と実践するのって結構隔たりがありますから、実際にやってみて初めて気付くことってたくさんありますよね。分かります(-ω-) 図の説明はやっぱり分かりやすいですね(^O^) あと、お二人のやり取りを拝見してて、次に作るものの操作のヒントにもなりました。ありがとうございます(^O^)
1そうだね
プレイ済み
返信[24]
親投稿
けい kei0baisoku
近いうちに自分でも使いそうだったので自分も、格ゲーのコマンド判定プログラムをリングバッファ使って実装してみました。 【KE8Q43P】 ゆっくり十字キーを回すと、リングバッファのしくみが分かると思います。 1秒止まっているとクリアされます。 下→右下→右→Aで波○拳が、右→下→右下→Aで昇○拳が出ます。 参考になりそうでしたらどうぞ(・ω・)/
0そうだね
プレイ済み
返信[25]
親投稿
むゆー muyu-pon
けいさんありがとうございます。こちらも参考にさせて頂きます。
1そうだね
プレイ済み
返信[26]
親投稿
むゆー muyu-pon
きのっこさん»説明ありがとうございます。図があったのでイメージがわきやすかったです!とりあえず理解できました。 けいさん»サンプルを見て、質問があるんですが……62行目からの「BUFのなかみ」というところがよくわかりません。詳しく説明を付けてくれないでしょうか?
0そうだね
プレイ済み
返信[27]
親投稿
むゆー muyu-pon
↑誤字誤字。 正確には「BUFのなかみ」、 ではなく「BUFのあたい」でしたね! 失礼失礼
0そうだね
プレイ済み
返信[28]
親投稿
けい kei0baisoku
>むゆーさん らじゃーです(`・ω・´)\ 他の方の参考にもなりそうなので、昨日の私の投稿の方にコメントする形でも大丈夫でしょうか? どれか分からなかったら言ってください(´ω`)/
0そうだね
プレイ済み
返信[29]
親投稿
むゆー muyu-pon
けいさん»了解です
0そうだね
プレイ済み
返信[30]
親投稿
きのっこ citronsoda
おおっ、ごめんなさい。ちょっと私事で忙しくてMiiverseから離れておりました。お知らせの山にびっくりw bufについては、バッファ。ここでいうところの、リングバッファ、を指します。 HEAD, TAIL等、いろいろ用語をぐちゃぐちゃにしてしまったりしてすみませんでした。別コメで見たところ、理解されていたようなのでこれにて、僕の恥さらしも含めw終わりにしたいとおもいます。けいさんの説明がうますぎる~
1そうだね
プレイ済み
返信[31]
親投稿
むゆー muyu-pon
きのっこさん、けいさん……お二人ともとてもたくさんの質問に答えて頂き本当にありがとうございました。 このバッファリングの動作を学んでいく中でプログラミングの技術はもちろん身に付きましたし、プログラムを作る際の心得のようなものも学べました……! 何度も質問は重ねられて迷惑と思われたかもしれませんが、それでも丁寧に説明してくださったお二人にはとても感謝しています! ……それでは、これを最後のコメントにしたいと思います。本当にありがとうございました!
0そうだね
プレイ済み
返信[32]
親投稿
けい kei0baisoku
>きのっこさん、むゆーさん いえいえ、とんでもないです。 表面的な知識だけじゃなくて、プログラムの楽しさや考え方も伝わったようで、私もとても嬉しいです!(^O^) きのっこさんがリングバッファを提案してくださったお陰で、私が次に作るヤツに波動拳も入れられ………おっとネタバレ(°∀°) とにかくありがとうございましたー(´ω`)/
0そうだね
プレイ済み