[雑談] RPG汎用関数、カメラ移動関数の改良例

投稿者:Cdv30200 aoi icon mini aoihikawa 投稿日:2013/02/10 21:15

スクリプト/RPG汎用関数/カメラ移動関数

< 改良例 >

・更新回数の増加

・引数でカメラの現在値、カメラの移動先を個別に指定可能に

・引数の座標をマス目基準、プレイヤー現在位置基準を指定可能に

・スムーズスクロールの実装


def max(a, b)
  if a < b
    return b
  else
    return a
  end
end

def min(a, b)
  if a > b
    return b
  else
    return a
  end
end

def bind_camera_x(x, map_width)
  return min(max(x, 256), map_width - 256)
end

def bind_camera_y(y, map_height)
  return min(max(y, 192), map_height - 192)
end

# x, y   : カメラの現在値(マス目 or "px" / "py")
# x2, y2 : カメラの移動先(マス目 or "px" / "py")
# sec    : 移動にかける秒数
# map_width, map_height: マップの幅と高さ(デフォルトは32,32)
def smart_move_camera(x, y, x2, y2, sec, map_width, map_height)
  count = sec * 50
  if x == "px"
    x = getPlayerPosX()
  else
    x = x * 32 + 16
  end
  if y == "py"
    y = getPlayerPosY()
  else
    y = y * 32 + 16
  end
  if x2 == "px"
    x2 = getPlayerPosX()
  else
    x2 = x2 * 32 + 16
  end
  if y2 == "py"
    y2 = getPlayerPosY()
  else
    y2 = y2 * 32 + 16
  end
  cx = bind_camera_x(x, map_width * 32)
  cy = bind_camera_y(y, map_height * 32)
  dx = (bind_camera_x(x2, map_width * 32) - cx) / count
  dy = (bind_camera_y(y2, map_height * 32) - cy) / count
  i = 0
  r = 360 / count
  
  while i < count
    cx = cx + dx + dx * sin((r * i - 90) * pi() / 180)
    cy = cy + dy + dy * sin((r * i - 90) * pi() / 180)
    moveCamera(true, cx, cy)
    waitTime(20)
    i = i + 1
  end
end

コメントする

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

コメント一覧

コメントはありません。