スクリプト/物を押す、引く

最終投稿者:User icon mini 退会したユーザー 更新:2010/04/11 16:56:50
shirosabotenさんが投稿した「スクリプト/物を押す(暫定版)」を改良して、物を引けるようにしてみました。
http://page.rmake.jp/wikis/29/edit
イベントの移動、移動目的先でのイベント発生、ゲームクリアイベントのスクリプトは変えてませんが、一応かいてあります
※ほとんどコピペ

イベントの移動

A-1.開始スクリプトに以下のように記述します。
  押されるイベント(例:像1,event0)のX座標、Y座標を示す変数を設定します。
setVariable("像1posX", 2)
setVariable("像1posY", 5)

A-2.押されるイベントに以下のスクリプトを記述します。
  話しかけたときのプレイヤーの向きに従って、変数「像1posX」「像1posY」の値を増減させた後、イベントの移動を行います。
自機移動の部分はについて
引く動作をする場合には、ブロックの移動と同時に自機も移動しなくてななりません。
たとえば上から引く動作をしたとします。すると、プレーヤーの位置はブロックのY座標-1の場所にいることになるので、setVariable("自機キャラ座標Y", getVariable("像1posY") - 1) になっています。
if !getFlag("くぼみに移動したか")
  case getEventDirection("playerCharacterEvent")
    when getDownDirection()

case speakWithSelect(2, "押す", "引く", 
    "ブロックがある・・・")
  when 0
       setVariable("像1posY", getVariable("像1posY") + 1)
       setVariable("自機キャラ座標X", getVariable("像1posX"))
       setVariable("自機キャラ座標Y", getVariable("像1posY") + 1) 
  when 1
      setVariable("像1posY", getVariable("像1posY") - 1)
       setVariable("自機キャラ座標X", getVariable("像1posX"))
       setVariable("自機キャラ座標Y", getVariable("像1posY") - 1) 


end

    when getUpDirection()
case speakWithSelect(2, "押す", "引く", 
    "ブロックがある・・・")
  when 0
      setVariable("像1posY", getVariable("像1posY") - 1)
       setVariable("自機キャラ座標X", getVariable("像1posX"))
       setVariable("自機キャラ座標Y", getVariable("像1posY") - 1) 
  when 1
       setVariable("像1posY", getVariable("像1posY") + 1)
       setVariable("自機キャラ座標X", getVariable("像1posX"))
       setVariable("自機キャラ座標Y", getVariable("像1posY") + 1) 
end

    when getRightDirection()
case speakWithSelect(2, "押す", "引く", 
    "ブロックがある・・・")
  when 0
       setVariable("像1posX", getVariable("像1posX") + 1)
       setVariable("自機キャラ座標X", getVariable("像1posX") + 1)
       setVariable("自機キャラ座標Y", getVariable("像1posY")) 
 when 1
       setVariable("像1posX", getVariable("像1posX") - 1)
       setVariable("自機キャラ座標X", getVariable("像1posX") - 1)
       setVariable("自機キャラ座標Y", getVariable("像1posY")) 
end

    when getLeftDirection()
case speakWithSelect(2, "押す", "引く", 
    "ブロックがある・・・")
  when 0
       setVariable("像1posX", getVariable("像1posX") - 1)
       setVariable("自機キャラ座標X", getVariable("像1posX") - 1)
       setVariable("自機キャラ座標Y", getVariable("像1posY")) 
  when 1
       setVariable("像1posX", getVariable("像1posX") + 1)
       setVariable("自機キャラ座標X", getVariable("像1posX") + 1)
       setVariable("自機キャラ座標Y", getVariable("像1posY")) 
end

end
#像の位置を移動
  setEventTarget("event0", getVariable("像1posX"), getVariable("像1posY")) 
  setEventTarget("playerCharacterEvent", getVariable("自機キャラ座標X"), getVariable("自機キャラ座標Y")) 
  runEventMove()


else

end

A-1~2だけでイベントを押すことが出来ます。
しかし押したイベントがマップの端等にきた場合、自由な向きに押すことが出来なくなります。
このため、元の位置に戻すスイッチが必要になります。

A-3.戻すスイッチ(イベント)に以下のスクリプトを記述します
  変数「像1posX」「像1posY」の値を元の値に設定し、イベントを元の位置に移動させます。
#このifは「移動目的先でのイベント発生」に関係します
if !getFlag("くぼみに移動したか")
  case speakWithSelect(2,"はい","いいえ", 
    "像を元の位置に戻しますか?")
    when 0
      setEventDirection("event1", getLeftDirection())
#像1のX,Y座標の変数を元の数値に
      setVariable("像1posX", 2)
      setVariable("像1posY", 5)
#像1を元の位置に移動
      setEventTarget("event0", 2, 5)
      runEventMove()
      setEventDirection("event1", getDownDirection())
    when 1
    
  end

else
  speak("スイッチはもう反応しないようだ")
end


移動目的先でのイベント発生

像を自由に押せるだけでも楽しいですが、ここでは特定の位置に移動した場合に、謎が解ける、というイベントを作ってみましょう。
B-1.目的地に目印となるイベントを置く。
・スクリプトの記述は無しです。
・当たり判定を、「無し(通行可能)」にしましょう。

B-2.移動目的先までイベントを押したときに発生するイベントを作ります。
・目的地とは別の場所(マップ上の通行不能場所が良いでしょう)にイベントを作成
・開始方法を「自動的に開始」に設定する。
以下の内容のスクリプトを記述します
『目的地にイベントが移動すると、ゲームクリアのためのイベントが出現し、当イベントは実行禁止に、そして像とスイッチは反応しなくなる。』
#イベントの有効条件
getVariable("像1posX") == 12 && getVariable("像1posY") == 9 && !getFlag("くぼみに移動したか")

#イベントの実行内容
speak("像の位置移動完了!")
#実行内容で大事なのは↓の一行のみ
setFlag("くぼみに移動したか", true)
fadeOut(200, 200, 200)
fadeIn()

これによって、フラグ「くぼみに移動したか」が偽であることを条件にしている実行内容(像:押す、スイッチ:元の位置に戻す)が実行されなくなります。
同時にB-2のイベントは有効条件が満たされなくなり、消滅します。
最後にフラグ「くぼみに移動したか」が真であることを条件に出現する、ゲームクリアのためのイベントを作成します。

(おまけ)B-3.ゲームクリアイベント
#有効条件
getFlag("くぼみに移動したか")

#実行内容
speak("ゲームクリアです!\n押すスクリプト、試してみてね^^")
speak("ゲームを終了します")
goEnding()


以上で完了です。
試しにこのとおりに作ったゲームをプレイしてみてください。


コメントする

コメントするには、ログインする必要があります。

コメント一覧

コメントはありません。