投稿
nyannzi CornedBeef
格闘ゲームのようなコマンドをつくるのに配列に記憶させると出来るよとアドバイスを頂いたのですが配列に記憶させるってどうすれば良いのでしょうか?
4そうだね
プレイ済み
返信[1]
親投稿
ねこはち neko80001
WHILE 1 BT=BUTTON() A[CO]=BT CO=CO+1 AND 31 VSYNC 1 WEND これで32フレーム分の入力がAという配列に常に記録されます
0そうだね
プレイ済み
返信[2]
親投稿
ねこはち neko80001
B=CO FOR I=0 TO 31 B=B+1 AND 31 PRINT A[B]; NEXT これで、さっきの32フレーム分の配列を古い順に表示できます 組み合わせてコマンド判定とキャラの表示や操作を組み込んでみてください
0そうだね
プレイ済み
返信[3]
親投稿
シュナ S_S_Schneider
配列自体が分からないというのであれば ここで説明を… (ご存知でしたらスマヌ…) 配列とは 簡単に言ってしまえば 変数の集まりです。 注意しなければいけない点として 配列は DIM で配列を使うよ という宣言をしないと エラーになってしまいます。 DIM CO[32] 'コマンド配列 大かっこで囲った32という数字は 「32個 COという 名前の変数を用意する」と考えてもいいかもしれません。 あとは 普通の変数のように 代入したり 取り出したり出来ます。 CO[0] = 3 CO[1] = 5 A = CO[0] '3をAに代入 B = CO[1] '5をBに代入 「同じ名前の変数を複数個生成する」という性質上 ねこはちさんのように FOR のようなループで 配列の処理をするのが 一般的です。 分かりにくい説明ですいません。
1そうだね
プレイ済み
返信[4]
親投稿
けい kei0baisoku
プチコンでは「PUSH」「SHIFT」という便利な命令もあるので、ヘルプを見て使ってみるのもオススメです(^O^)
0そうだね
プレイ済み
返信[5]
親投稿
nyannzi CornedBeef
ねこはちさん> 再度説明ありがとうございます。勉強不足ですみませんが解説お願いできますか? WHILE 1 ←これの条件ってなんですか? BT=BUTTON()   A[CO]=BT CO=CO+1 AND 31  ←動きは0から31までってのは解ったので VSYNC1       すがANDってどう言う意味ですか? WEND シュナさん>ありがとうございます。順番に箱をいっぱい作れるってのまでは理解できたのですが、うまく箱から出したり入れたりができなくて(-.-) けいさん>これは配列を使っていっぱい箱を作って。その中に数を入れたり出したりできるって事ですか?
0そうだね
プレイ済み
返信[6]
親投稿
ねこはち neko80001
WHILE命令の隣には通常A==1等の条件式がきますが、条件式とは成立していたら1を成立していなかったら0をかえす関数のようなものなのです ですから、1を指定した場合、常に条件が成立しているものとして無限ループになります
0そうだね
プレイ済み
返信[7]
親投稿
けい kei0baisoku
>nyannziさん はい、そうです。 PUSHは配列の末尾に箱を1つ追加する命令で、SHIFTは配列の先頭から箱を1つ削除する命令です。 SHIFT A PUSH A, 今のボタン で、後ろに新しい上方を追加して、ところてん式に一番古い先頭を消します。 常に「先頭が古く後ろが新しい」状態が保たれますので、直感的に分かりやすく扱いやすいと思います。
1そうだね
プレイ済み
返信[8]
親投稿
ねこはち neko80001
ANDは論理演算子といって、2進数計算で両方のビットが成立していたらそのビットを1にするというものです 31は2進数で書くと&B00011111となるので、これで計算してやると&B00100000になった場合、10進数でいえば32になった時に&B00011111と比較して、成立していないので、そのビットは0になります つまり、1ずつ数字を足していった場合、10進数で0~31を超えたビットは消えるので変数の中身はその範囲でループするという事です ちょっと難しいですね
0そうだね
プレイ済み
返信[9]
親投稿
スー thanks_0u0
ANDがどうしてもわかりにくい場合、 CO=(CO+1)MOD 32 でも似たようなことが出来ると思います(´ω`) MODは割り算の余りなので、0〜31はそのまま余りになり、32になったら32割る32の余りで0に戻ります。 計算の優先順位の関係で、ANDと違って括弧が必要なことには注意です。
1そうだね
プレイ済み
返信[10]
親投稿
シュナ S_S_Schneider
ビット演算は初心者には難しいかも…… BUTTON() は 複数のボタン入力を想定していますので 単体でボタンが押されたとき 取得出来る値が どのボタンも 2のべき乗になっているのです。 下ボタン:2(&B0010) 左ボタン:4(&B0100) 上記2つのボタンが押されたとき 2つのボタンの値が合算されて 6 となります……が この状態で 左ボタンのみ押されたのを判断したい場合 == での判断が難しいのです。 なので ねこはちさんのようなAND演算で 押されたボタンの判断をしているのです。 &B0110「左下押した時の値」 AND &B0100「左を押したかの判断値」 結果は 1 となるので この値をIFの条件にあてれば…
1そうだね
プレイ済み
返信[11]
親投稿
シュナ S_S_Schneider
ちょっと説明がおかしかったので 訂正を。 「左ボタンのみ押されたのを判断」ではなくて 「押したボタンに 左ボタンが含まれているか」ですね。 申し訳ありません。 それと駄文 長文失礼。m(_ _)m
0そうだね
プレイ済み
返信[12]
親投稿
シュナ S_S_Schneider
連投すみません。コメントを見返してみたら 自分の話が脱線していましたね。 申し訳ないです。
0そうだね
プレイ済み
返信[13]
親投稿
nyannzi CornedBeef
なるほどこれが噂のビット演算ってやつですね。スプライトの当たり判定のマスクとかなってるやつですね! 様々な変数を照らし合わせるための記号と思えばいいですかね? なんとなくは理解できた気がします。皆さんの説明が丁寧なおかげでどうにかできそうな気がしてきました。ありがとうございます♪
0そうだね
プレイ済み