RPGでジャンプできる必要ってあるのかお前

さて、久々ですが妖刀伝実況動画の紹介です。

【初見】女、子供に容赦ない【妖刀伝】

youtubeはこちら

なんかサイコロで選ばれたようです。
実況者としてはめずらしい男女二人組です。
1話の冒頭にある予告編のクオリティが高いです。

しかしこうしてみるとまだまだ妖刀伝にもバグがありますな。
この実況終わったら更新します。
バグ関係なく、ここのユザービリティよくねーなとかいろいろあるよね。
ユザービリティってなんだよユーザビリティだろ


さて、久々ですがRGSS2講座の続きです。

RGSS2講座第14回、ジャンプ改変。

まず肩慣らしから。
ツクラーなら「ジャンプ」をご存知かと思いますが、
ジャンプの指定は「x座標を+1、y座標を-2」のような指定しかできません。「マップの10,15の位置にジャンプ」とかできません。

まあこの場合は現座標からの位置を指定すればいいのですが、
そうですね、変数で指定したいですね。できませんね。

なんでやねん

というわけで、変数で指定する簡単なやり方がこちら。

get_character(1).jump($game_variables[2],
$game_variables[3])

イベントのスクリプトから上記を入力するだけ。
これで
「イベントIDが1のイベントが」
「x座標に変数2の分だけ」
「y座標に変数3の分だけ」
ジャンプします。お手軽ですね。

え?移動距離じゃなくて場所指定したい?
それはなんかキャラの座標を変数に代入して移動後の座標から引いたりしてなんとかしろや。

え?ジャンプで変数指定なんて使う機会あるのかって?
まあ、なんか、どこにいても一定時間で主人公に抱きついてくるキャラとか作れるんじゃないですか。どんなキャラだよ。

ちなみに僕は、撃破したボスがそのままの位置から主人公に鍵を投げ渡すシーンに使いました。

鍵投げ


さて、次は中級編。

ジャンプを減速直線運動に変えます。

減速直線運動ってなんだよ。
今僕が命名したよ。

あれです。
「カリスは影差す迷宮で」のハブ空間の移動で使われていたあれです。

減速直線運動

これ。

わかんねえよ


まあわからない人はわからないでいいので次いきます。

まずGame_Characterの「● 画面 Y 座標の取得」のところを見ます。
ジャンプ改変1
#--------------------------------------------------------------------------
# ● 画面 Y 座標の取得
#--------------------------------------------------------------------------
def screen_y
  y = ($game_map.adjust_y(@real_y) + 8007) / 8 - 1000 + 32
  y -= 4 unless object?
  if @jump_count >= @jump_peak
    n = @jump_count - @jump_peak
  else
    n = @jump_peak - @jump_count
  end
  return y - (@jump_peak * @jump_peak - n * n) / 2

end

この青い個所が、ジャンプ中にy座標を上下させている箇所です。
つまりここを消せばジャンプしないただの等速直線運動になります。
以下のようにしましょう。

#--------------------------------------------------------------------------
# ● 画面 Y 座標の取得
#--------------------------------------------------------------------------
def screen_y
  y = ($game_map.adjust_y(@real_y) + 8007) / 8 - 1000 + 32
  y -= 4 unless object?
  return y
end


次に、これをだんだん減速する移動に変えます。
Game_Characterの「● ジャンプ時の更新」のところを見ます。
ジャンプ改変2
#--------------------------------------------------------------------------
# ● ジャンプ時の更新
#--------------------------------------------------------------------------
def update_jump
  @jump_count -= 1
  @real_x = (@real_x * @jump_count + @x * 256) / (@jump_count + 1)
  @real_y = (@real_y * @jump_count + @y * 256) / (@jump_count + 1)
  update_bush_depth
end

この青色の-1が等速たらしめている原因です。
こいつを以下のように減速にしてやりましょう。

#--------------------------------------------------------------------------
# ● ジャンプ時の更新
#--------------------------------------------------------------------------
def update_jump
  @jump_count -= (@jump_count * 0.1)
  if @jump_count < 0.1
    @jump_count = 0
  end

  @anime_count += 1
  @real_x = (@real_x * @jump_count + @x * 256) / (@jump_count + 1)
  @real_y = (@real_y * @jump_count + @y * 256) / (@jump_count + 1)
  update_bush_depth
end

これで減速直線運動になりました。
ぬるぬるします。

本来↓これだけでいいんですけど、
@jump_count -= (@jump_count * 0.1)
このままだと果てしなく減速してしまうので、ある程度まで減速したら強制的に0にする処理が必要になります。

また、↓これは別に不要です。
@anime_count += 1
入れたら足踏みしますし入れなかったら足踏みしないだけです。



さて、よくわからなかった人は恒例のスクリプトだけ別配布だぜ!

ジャンプを減速直線運動にする



さて、もうここまででいい気もしますが、最後に上級編。

ジャンプを円運動に変えます。

な、なんだってー!!


まずGame_Characterの「● 画面 Y 座標の取得」のところはさっきと同じなので割愛。
「● ジャンプ時の更新」のところをこんな感じにします。
#--------------------------------------------------------------------------
# ● ジャンプ時の更新
#--------------------------------------------------------------------------
def update_jump
 @jump_count -= 0.12
 @anime_count += 1
#右回転
 @real_x += Math.cos((@jump_peak * 2) - @jump_count) * 25
 @real_y += Math.sin((@jump_peak * 2) - @jump_count) * 25
#左回転
# @real_x -= Math.cos((@jump_peak * 2) - @jump_count) * 25
# @real_y += Math.sin((@jump_peak * 2) - @jump_count) * 25

 update_bush_depth
end

直値祭りだイエーイ!!
良い子のみんなはマネしないでね!!

これで、その場でジャンプでもさせておけば円運動します。


ただしひとつ注意点。

移動速度を「標準速」にしておいた場合のみ、丁度2回転します。
それ以外の速度では挙動がおかしくなります。

なんだその微妙な仕様は


汎用的なものが作れなかったんですよー
つまり僕は上級者ではなかったということだ。

さあみんな、自分好みの円運動にカスタマイズしよう!
(というか円運動って需要あるのか)

円運動
人魚のダンスシーンとかに使えるんじゃないかな。
(なんだそのニッチな需要は)


かげろうでした!


RGSS講座目次
スポンサーサイト

コメントの投稿

非公開コメント

検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR