かなり難しい動作かもしれない(質問掲示板)
投稿: 亀狸兎
投稿:2012/07/27 16:35:27(最新:2012/07/27 20:53:27)
「RmakeでACTゲームをつくろう」の例を見ながらACTゲームのスクリプトを勉強中です。
次の障害物を作ってみようと試行錯誤しましたが、なかなかうまくいきません。
機能1 ブロックがランダムに上から降ってくる。
機能2 ブロックにはさまれたらゲームオーバー。
機能3 ブロックに乗れる。
機能4 降ってきたブロックが地面でとどまる。(テトリスのように)
ゲーム内容:落ちてくるブロックを避けて、積みあがった先にあるゴールに到着する
幾日も削って苦戦していますので、質問掲示板にて助けを求める形に至りました。
解決できそうなスクリプトがあれば教えてください。
ツイート
次の障害物を作ってみようと試行錯誤しましたが、なかなかうまくいきません。
機能1 ブロックがランダムに上から降ってくる。
機能2 ブロックにはさまれたらゲームオーバー。
機能3 ブロックに乗れる。
機能4 降ってきたブロックが地面でとどまる。(テトリスのように)
ゲーム内容:落ちてくるブロックを避けて、積みあがった先にあるゴールに到着する
幾日も削って苦戦していますので、質問掲示板にて助けを求める形に至りました。
解決できそうなスクリプトがあれば教えてください。
コメントする
コメントするには、ログインする必要があります。
コメント一覧
ぷよぷよみたいに滑らかには動かないけど(一マスずつ動くタイプなら比較的ラク)
二次配列(hit[7][4]みたいに[]が2つある配列)を用意して
を作って,
それとは別に
現在の座標,今落下中のブロックの座標を配列で用意するのがいいかと。
ゲ
二次配列(hit[7][4]みたいに[]が2つある配列)を用意して
値 | 地形 |
---|---|
0 | 何もなし |
1 | 移動し終わったブロック |
2 | ゴール地点 |
3~ | 必要に応じて |
それとは別に
現在の座標,今落下中のブロックの座標を配列で用意するのがいいかと。
ゲ
途中で切れたorz
分かりにくいけど
表の方の配列はある座標を指定して,そこはどういう状態かを調べるため,
その下の文章の方の配列はある対象(ここでいうとプレーヤーと落下中のブロック)が今どこにいるかを調べるためのもの
でちょっと違うのでご注意を。
例を出すと
上の場合
下の場合は
となんか言葉にすると分かりにくいですが,自分はこの方法でやってます。
こうしておけば
(落下中のブロックの1マス下は開いているか?)
みたいに判定が楽なので。
後,自分で書いておきながら
やっぱゴール地点も別で用意しておいた方が良かったかも。
分かりにくくてすいませんorz
分かりにくいけど
表の方の配列はある座標を指定して,そこはどういう状態かを調べるため,
その下の文章の方の配列はある対象(ここでいうとプレーヤーと落下中のブロック)が今どこにいるかを調べるためのもの
でちょっと違うのでご注意を。
例を出すと
上の場合
a[7][2] = 1 → (7,2)にはブロックがある
下の場合は
pos[0] = 7 ; pos[1] = 4 → 今(7,4)にいる
となんか言葉にすると分かりにくいですが,自分はこの方法でやってます。
こうしておけば
if 0 = a[rakka[0]][rakka[1]+1]
(落下中のブロックの1マス下は開いているか?)
みたいに判定が楽なので。
後,自分で書いておきながら
やっぱゴール地点も別で用意しておいた方が良かったかも。
分かりにくくてすいませんorz
たぶん流れはこんな感じのハズ
役に立たない文を長々とすいません。
自分で書いておいて顰蹙ですが,自分で方法を見つけたほうが身に馴染みやすいです
* 入力はあったか? yes →プレーヤーを動かす (ブロックに埋まらないように注意) 落下中のブロックはあるか? yes →ブロックの下は空いているか? yes →ブロックを一個下げる no →落下中のブロックを消して、 二次配列に移し替える no →新しくブロックを作る プレーヤーはブロックに潰されていないか? yes →ゲームオーバー no →プレーヤーはゴールについたか? yes →ゲームクリア no →(特に何もなし) 画像を写したり *に戻る
役に立たない文を長々とすいません。
自分で書いておいて顰蹙ですが,自分で方法を見つけたほうが身に馴染みやすいです
ゲーム内容からして、テトリスというより「ワリオの森」に近いかな
・画面はスクロールするのか?
・操作方法と使うボタンは?
・ブロックフィールドは縦横何マスずつ?
・縦スクロールあり
・Zでジャンプ、←→で左右移動
・ブロックフィールドは、ACTの参考スクリプトにのっとり
横:25マス 縦:19マス
○経過報告
操作キャラクターを表示できた。
↓
マップを配置できた
↓
操作キャラクターに当たり判定をつけた
↓
操作キャラクターをジャンプさせることができた
↓
ブロックを表示できた
↓
ブロックの当たり判定を設定した……が
1st argument is not array.
問題のある行
blockHit_X = getVariable("hit_map")[blockHitpos_Y1][blockHitpos_X1]
以後、原因の調査と他方法の模索に走る。
↓
未解決
といった経緯です。早いコメントありがとうございます、そして遅くなりすみませんでした。
エラー文の訳:おっと、ソイツは配列じゃねぇぜお嬢さんよ
・hit_mapがまだ配列になっていない
・hit_map[blockHitpos_Y1]がまだ配列になってない
・[y1][x1]となってるけど実は[x1][y1]の間違いだった→縦より横が長いので表示の際に一定数を超えると毎回ソレ以上は配列じゃないツッコミが来る罠
の可能性があるカモ
でも既に全体を改造してるならどーでもいいか
落ちてくるのが1マスブロック単発のみなら、ソレは「落下中ブロック」として別スプライトを作る方が良いカモ
プレイヤーキャラと一緒でマス単位ではなく、スムーズに落とす事が可能になるし、衝突判定はコレひとつなので処理も特別重くならない気がする
ただ、1個ずつしか降ってこないとなると横25はおそらく広過ぎてプレイ時間が伸び、ランダムではゴールへの足場ができる前に超えられない壁が積まれる未来が見えるw
以前のスクリプトはエラーがでない段階で保存してあります。すぐに全体を改造できる知識と技術はないので、まずは前回のを再チェックします。
心強い解説をありがとうございます!