忍者ブログ

しいたけサイクロン

主にRPGツクールVXAceを扱うブログです。 ここに公開してあるスクリプトは全部自由に使用してもらってかまいません。 改造なり何なりして好きに使ってください。

プレイヤーから離れる--微修正

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

コメント

ただいまコメントを受けつけておりません。

プレイヤーから離れる--微修正

今ゲームを作っていて気づいたので記事にします。

下の文章を読んで設定するのが面倒な方向けのスクリプト
Game_Character
上をいれるだけで設定されます。
本文
プレイヤーから離れるイベントなのですが
プレイヤーが同じx座標またはy座標にある場合、デフォルトで上下に移動しません。
例えば下の画像のように猫をプレイヤーから離れるようにしても
同じy座標にいるためにここで停止してしまいます。



これはGame_Characterにおける
  #--------------------------------------------------------------------------
  # ● キャラクターから遠ざかる
  #--------------------------------------------------------------------------
  def move_away_from_character(character)
    sx = distance_x_from(character.x)
    sy = distance_y_from(character.y)
    if sx.abs > sy.abs
      move_straight(sx > 0 ? 6 : 4)
      move_straight(sy > 0 ? 2 : 8) if !@move_succeed && sy != 0
    elsif sy != 0
      move_straight(sy > 0 ? 2 : 8)
      move_straight(sx > 0 ? 6 : 4) if !@move_succeed && sx != 0
    end
  end

の!@move_succeed && sy != 0 の sy !=0の部分のせいなのですが
おそらく、近づく場合のコードを流用したからじゃないかなって気がします。
(つまり向かう方向を逆にしているだけ)

というわけで、上の例でいうと
  #--------------------------------------------------------------------------
  # ● キャラクターから遠ざかる
  #--------------------------------------------------------------------------
  def move_away_from_character(character)
    sx = distance_x_from(character.x)
    sy = distance_y_from(character.y)
    if sx.abs > sy.abs
      move_straight(sx > 0 ? 6 : 4)
      move_straight(sy > 0 ? 2 : 8) if !@move_succeed 
    elsif sy != 0
      move_straight(sy > 0 ? 2 : 8)
      move_straight(sx > 0 ? 6 : 4) if !@move_succeed 
    end
  end

というようにすると猫は左に行った後上に移動してくれます。
ただ左上で固まってしまうので
  #--------------------------------------------------------------------------
  # ● キャラクターから遠ざかる
  #--------------------------------------------------------------------------
  def move_away_from_character(character)
    sx = distance_x_from(character.x)
    sy = distance_y_from(character.y)
    if sx.abs > sy.abs
      move_straight(sx > 0 ? 6 : 4)
      move_straight(sy > 0 ? 2 : 8) if !@move_succeed 
      move_straight(sy > 0 ? 8 : 2) if !@move_succeed
    elsif sy != 0
      move_straight(sy > 0 ? 2 : 8)
      move_straight(sx > 0 ? 6 : 4) if !@move_succeed 
      move_straight(sx > 0 ? 4 : 6) if !@move_succeed
    end
  end

とすると上下に移動してくれます。
地形によっては固まってしまうことはあるのですが前よりはちゃんと逃げてくれると思います。
PR

コメント

プロフィール

HN:
tentako
性別:
非公開

P R

フリーエリア