#┌───────────────────────────────────────
#│
#│ TRCS.17
#│ "Game_Character 修正" ver1.00β (2005.11.05 h12)
#│ by NO
#│ http://chobi.net/~no/
#│
#└───────────────────────────────────────
#┌───────────────────────────────────────
#│β版仕?
#│ ?マップチップ、キャラクタ?との?たり判定を修正します。
#│ ?イベントとの?たり判定部分が未解決です。
#└───────────────────────────────────────
#==============================================================================
# ■ Game_Character
#==============================================================================
class Game_Character
#--------------------------------------------------------------------------
# ○ オブジェクト初期化
#--------------------------------------------------------------------------
def trcs17_initialize initialize
# キャラクタ?サイズの判定フラグ初期化
@big = false
# キャラクタ?グラフィックが表示されているセルの座標
@x_list = []
@y_list = []
# 呼び?す
trcs17_initialize
end
#--------------------------------------------------------------------------
# ○ キャラクタ?サイズが基準以上か?
#--------------------------------------------------------------------------
def big?
return @big
end
#--------------------------------------------------------------------------
# ○ キャラクタ?グラフィックが表示されているセルの座標
#--------------------------------------------------------------------------
def cell_list
return @x_list, @y_list
end
#--------------------------------------------------------------------------
# ○ 通行可能判定
# x : X 座標
# y : Y 座標
# d : 方向 (0,2,4,6,8) ※ 0 = 全方向通行不可の場合を判定 (ジャンプ用)
#--------------------------------------------------------------------------
alias trcs17_passable? passable?
def passable?(x, y, d)
# キャラクタ?ファイル名が定義されている場合
unless @character_name == ""
# キャラクタ?グラフィックオブジェクトを定義
character = RPG::Cache.character(@character_name, @character_hue)
# 倍率計算
div_x = character.width / (32 * 4)
div_y = character.height / (48 * 4)
div_x = 1 if div_x < 1
div_y = 1 if div_y < 1
# x, yともに1倍の場合
if div_x == 1 and div_y == 1
# 呼び?す
return trcs17_passable?(x, y, d)
else
# [基準サイズ以上である]をセット
@big = true
# [キャラクタ?グラフィックが表示されているセルの座標]の配列
@x_list = [0]
@y_list = [0]
# 現位置において、
# キャラクタ?グラフィックが表示されている全セルのx座標の算出
# → グラフィックの幅は左右に等しい (基準の3倍ならば □■□)
for i in 1..div_x / 2
@x_list.unshift(-i) if i == 1 and d != 6 # 本?の座標が移動の邪魔になるため
@x_list.push(i) if i == 1 and d != 4 # 本?の座標が移動の邪魔になるため
end
# 現位置において、
# キャラクタ?グラフィックが表示されている全セルのy座標の算出
# → y座標は?方向(負)に[基準のn倍]
for i in 1...div_y
@y_list.unshift(-i) if i == 1 and d != 2 # 本?の座標が移動の邪魔になるため
end
# 評?値の初期化
bool = true
# 二重ル?プで各座標を渡す
for i in 0...@x_list.size
for j in 0...@y_list.size
x2 = @x_list[i]
y2 = @y_list[j]
# 呼び?す & ??値の評?
# → 一度でもfalseになったら通行不可
bool &= trcs17_passable?(x + x2, y + y2, d)
end
end
# 評?値を返す
return bool
end
else
# 呼び?す
return trcs17_passable?(x, y, d)
end
end
end
출처: 게임공작소