スクリプト/つくってみよう2-4(履歴ID:71)

最終投稿者:Nyan mini rurun9 更新:2014/01/15 12:20:50
爆走少女らん】を作っています。
スクリプト/つくってみよう2-3 のつづき。

チャプター3
startInput()
key=true
while key

while hasInput()
 takeInput()

 if gv("y")[0]==350 #地面を走っている時ならジャンプ可能
  if isKeyDown("UP") || isKeyDown("DOWN") || isKeyDown("Z")
   sv("jump",true)
  end
 elsif gv("jump") #上昇中にボタン離すと落下になる
  if isKeyUp("UP") || isKeyUp("DOWN") || isKeyUp("Z")
   sv("jump",false)
  end
 end

 #ボタンの押しっぱなしの判定…押したらkeepをtrueにし、離したらkeepをfalseにする
 if isKeyDown("LEFT")
  sv("keepL",true)
 elsif isKeyUp("LEFT")
  sv("keepL",false)
 elsif isKeyDown("RIGHT")
  sv("keepR",true)
 elsif isKeyUp("RIGHT")
  sv("keepR",false)
 elsif isKeyDown("ESC")
  goBadEnding()
 elsif isKeyDown("ENTER")
  goEnding()
 end

end #hasInput()ループ終


if gv("jump") #ジャンプ中なら上に移動
 gv("y")[0]=gv("y")[0]-16
 if gv("y")[0]<100 #ただし天井に届いたらジャンプ終
  gv("y")[0]=100; sv("jump",false)
 end
else #ジャンプしてないなら落下する
 gv("y")[0]=gv("y")[0]+18
 if 350<gv("y")[0] #ただし落下は地面y=350の高さで止まる
  gv("y")[0]=350
 end
end
#←→ボタンが押されていたなら移動させる
if gv("keepL")
 gv("x")[0]=gv("x")[0]-16
 if gv("x")[0]<50 #画面外に出ないように
  gv("x")[0]=50
 end
end
if gv("keepR")
 gv("x")[0]=gv("x")[0]+16
 if 750<gv("x")[0] #画面外に出ないように
  gv("x")[0]=750
 end
end

setSpritePosition(gv("h")[0], gv("x")[0],gv("y")[0])
atari()
anime()
bg()
drawCanvas()
waitTime(10)

end #kループ終
endInput()
ゲームの核となっているキー操作の部分です。

関数にはボタンを「押す」と「離す」しか存在しませんが、
アクションゲームでは「ボタンを押しっぱなしにしているか」を判断する必要性が稀にあります。
今回は keep という変数を用意することで、これを解決しています。

ジャンプできる条件は「地面を走っている事」
ジャンプボタンを押しっぱなしの間は、画面最上部まで上昇し続けます。
ボタンを離すまたは画面最上部に届くと強制的にジャンプは終了、以後地面に着くまで落下し続ける形にしています。

ジャンプと移動の際には女位置(x,y)を変えています。
ただし地面の高さyを女の初期位置のy=350に固定しているので、コレよりも下にだけは行かないようにしています。
何か障害物キャラを追加する場合には、ソレとの衝突判定も考えないといけません。
(引っかかってたらスクロールと共に左に流される、など)

drawCanvas() の直前に、何やらユーザー定義関数が並んでいます。
パッと見は謎の1行ですが、その1行が一体どんな処理をしているのか、チャプター1を再確認してみましょー。


waitTime()の値を変えたり、キャラの移動の速さを変えたり、背景スクロールでずらす幅などを調整すると、ゲームスピードが変わります。
「ゲームの基本情報」設定から「高速モード」に設定すると更に速くなります。
ただし遊ぶ側のPCの処理能力によっても、スプライトを使ったアクションゲームの動作速度には結構な差があるらしいので、速さ=難易度 にしない方が良いのかもしれません。
気になる方は、fps(フレーム パー セカンド、秒間何回画面を更新するかという意味)を自動調節するようなユーザー定義関数を仕込むくらいの気合で挑んで頂きたいです(棒読み)

以上で完成です。

どーでしたか?
点数を付けるとか、スイカの数を増やしてみるとか、少し手を加えるだけでも遊べるモノになる気がしませんか?
少なくとも、現時点ではゲームの目的がありません。キャラが動いた、それだけです。
何を追加すると面白くなるのか、今度はあなた自身で考えてつくってみましょー。

ゲームを作る際に一番大変なのはグラフィックを用意する事なんですが、Rmakeには素材が既に溢れています。
今回の素画像は、気に入ったのを見つけてキーボードのプリントスクリーン PrtSc でコピーして、ペイントソフトで一枚の画像にまとめて加工(透明色設定も)して、それをアップロードしたものです。


最初はコピペでも、少しずつ弄って理解してゆけば良いと思います。
絵しか表示されていないゲームが、実は中身は文字だけだった!というのは驚きかもしれませんが、書いてある意味さえ判れば極単純な指示の組み合わせでしかない事に気付くでしょう。

そんな感じで、なんか面白そーなのを作ってくれる人が現れるのを期待してまーす。
お疲れ様でしたー

スクリプト/つくってみよう0 基礎
スクリプト/つくってみよう1 配列
スクリプト/つくってみよう2-0 キー入力とスプライト
スクリプト/つくってみよう2-1 爆走少女らんchap0
スクリプト/つくってみよう2-2 爆走少女らんchap1
スクリプト/つくってみよう2-3 爆走少女らんchap2