while文2

投稿者:   mini rdjk5242 投稿日:2012/02/09 17:33

下へ移動の文と右へ移動の文は、違うやり方をしています。

違うといっても、
a=getPlayerPosY()
が、
setVariable("a",getPlayerPosX())
に変わっただけなんですけどね。

下へ移動の文

a = getPlayerPosY() 
#aにプレイヤーのY軸を入れます
speak("カメラが下方向に移動します") 
while a < getPlayerPosY() + 128 * 15
# これは、プレイヤーのY軸+128*(*とは×のこと)15がaよりも大きいとき以下を表示
  moveCamera(true, getPlayerPosX(), a) 
  a = a + 0.1
#aの値を少しずつ増加させます 
end

 a=getPlayerPosY() + 128 * 15 
#aを現在のカメラの位置にします
 speak("カメラの位置を戻します") 
while a > getPlayerPosY() 
#プレイヤーのY軸+128*(*とは×のこと)15がaよりも小さい時以下を表示
  moveCamera(true, getPlayerPosX(), a) 
 a = a - 0.8
#aの値を少しずつ減少させます
end  
 moveCamera(false)
#カメラを元に戻します

右に移動の文

setVariable("a",getPlayerPosX())
#aにプレイヤーのX座標を入れます
 speak("カメラが右方向に移動します") 
while getVariable("a")<getPlayerPosX()+128*11
#プレイヤーのX軸+128*(*とは×のこと)11がaよりも大きいとき以下を表示
 moveCamera(true,getVariable("a") , getPlayerPosY())
#カメラ移動
 setVariable("a",getVariable("a")+0.1)
#aの値を少しずつ増加させます 
end
#以下略
 speak("カメラの位置を戻します") 
 setVariable("a",getPlayerPosX()+128*11)
while getVariable("a")>getPlayerPosX()
 moveCamera(true, getVariable("a"), getPlayerPosY())
 setVariable("a",getVariable("a")-0.8)
end
moveCamera(false)
#ここからは、カメラ移動ではありません
case speakWithSelect(8,"42","43","35","33","44","41","36","38", 
    "答えは?")
  when 0
 speak("正解です!")
 openActivityFeedWindow("私は正解しました。")
 speak("これで終わります。\n")
 goEnding()
  when 1
 speak("ブッブー\n\nハズレ!")
 openActivityFeedWindow("私は43と答えました。")
 subPlayerHP(999) 
  when 2
 speak("ブッブー\n\nハズレ!")
 openActivityFeedWindow("私は35と答えました。")
 subPlayerHP(999)  
  when 3
   speak("ブッブー\n\nハズレ!")
 openActivityFeedWindow("私は33と答えました。")
 subPlayerHP(999)
  when 4
 speak("ブッブー\n\nハズレ!")
 openActivityFeedWindow("私は44と答えました。")
 subPlayerHP(999)   
  when 5
 speak("ブッブー\n\nハズレ!")
 openActivityFeedWindow("私は41と答えました。")
 subPlayerHP(999)  
  when 6
  speak("ブッブー\n\nハズレ!")
 openActivityFeedWindow("私は36と答えました。")
 subPlayerHP(999) 
  when 7
 speak("ブッブー\n\nハズレ!")
 openActivityFeedWindow("私は38と答えました。")
 subPlayerHP(999)  
end

なお、なぜ*15や*11をしているかというと、
Rmakeのマップ1マスは縦が15ピクセルで横が11ピクセルなので、
1マス分動かすために*15や*11をしているのです

コメントする

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

コメント一覧

   mini rdjk5242(投稿日:2012/02/10 05:54, 履歴)
a=getPlayerPosY()
while a < getPlayerPosY()+32*30   
 moveCamera(true, getPlayerPosX(), a)   
 a = a + 1
 waitTime(10)    
end

こう書き直したら、本当にゆ~っくり動きました。
でも
a = a + 1

waitTime(10)
調整が難しいので0.1を0.1より小さいのにすることにします。
Cdv30200 aoi icon mini aoihikawa(投稿日:2012/02/10 05:38, 履歴)
どちらを選択するかは
微調整の仕方によります。

0.1でwaitTime10の場合
約0.1秒で1ドット移動ですから
時間に対する移動幅が微小すぎて
動いていないように見えるのではないかなと。
   mini rdjk5242(投稿日:2012/02/10 04:59, 履歴)
>>rurun9さん
今wikiを見直したら、1マス(x,y)=(32,32)でした。
たぶん縦15横11をマスと間違えていたようです。
while a < getPlayerPosY()+32*30

これで画面2つ分動きますかね(^^ゞ


>>aoihikawaさん
  • 0.1より小さいのにする(0.05など)
  • waitTime関数をいれる

どっちがいいですかね?

waitTimeを入れると、
while a < getPlayerPosY()+32*30  
  moveCamera(true, getPlayerPosX(), a)  
  a = a + 0.1
waitTime(10)   
end

でもこうするとフリーズしているのか、止まってしまいます。
Nyan mini rurun9(投稿日:2012/02/09 19:39, 履歴)
マップチップの1マスは32*32ピクセルのような?
128に掛け算をしている理由はわからないけど、カメラ移動は用意されたマップの端が見えたらそれ以上動かずに止まるよ
Cdv30200 aoi icon mini aoihikawa(投稿日:2012/02/09 17:54, 履歴)
ちょっと移動速度が速すぎるかも。

waitTime関数を入れてみてはいかがでしょうか。