module SIMP
#--------------------------------------------------------------------------
# ○ 설정
#--------------------------------------------------------------------------
#
# 스크롤 속도
#
CAMERA_MIN_SPEED = 1 # 최저한의 스크롤 속도
CAMERA_DELEY = 2 # 속도 보정 (값이 큰 만큼 늦는다)
#
end
class Game_Map
#--------------------------------------------------------------------------
# ● 공개 인스턴스 변수
#--------------------------------------------------------------------------
attr_writer :real_display_x # X 좌표 (실좌표)
attr_writer :real_display_y # Y 좌표 (실좌표)
#--------------------------------------------------------------------------
# ● 오브젝트 초기화
#--------------------------------------------------------------------------
alias camera_initialize initialize
def initialize
camera_initialize
@real_display_x = 0
@real_display_y = 0
end
#--------------------------------------------------------------------------
# ● 셋업
# map_id : 맵 ID
#--------------------------------------------------------------------------
alias camera_setup setup
def setup(map_id)
camera_setup(map_id)
@real_display_x = 0
@real_display_y = 0
end
#--------------------------------------------------------------------------
# ● 표시 X 좌표 * 128
#--------------------------------------------------------------------------
def display_x
return @real_display_x
end
#--------------------------------------------------------------------------
# ● 표시 Y 좌표 * 128
#--------------------------------------------------------------------------
def display_y
return @real_display_y
end
#--------------------------------------------------------------------------
# ● 프레임 갱신
#--------------------------------------------------------------------------
alias camera_update update
def update
camera_update
dx = @display_x - @real_display_x
unless dx == 0
speed = get_speed(dx.abs)
distance = 2 ** speed
if dx > 0
@real_display_x = [@real_display_x + distance, @display_x].min
else
@real_display_x = [@real_display_x - distance, @display_x].max
end
end
dy = @display_y - @real_display_y
unless dy == 0
speed = get_speed(dy.abs)
distance = 2 ** speed
if dy > 0
@real_display_y = [@real_display_y + distance, @display_y].min
else
@real_display_y = [@real_display_y - distance, @display_y].max
end
end
end
#--------------------------------------------------------------------------
# ○ 스크롤 속도를 취득
# distance : 움직이는 목표까지의 거리
#--------------------------------------------------------------------------
def get_speed(distance)
return [SIMP::CAMERA_MIN_SPEED, distance / 32 - SIMP::CAMERA_DELEY].max
end
end
class Game_Player < Game_Character
#--------------------------------------------------------------------------
# ● 화면 중앙에 오도록(듯이) 맵의 표시 위치를 설정
#--------------------------------------------------------------------------
alias camera_center center
def center(x, y)
camera_center(x, y)
$game_map.real_display_x = $game_map.display_x
$game_map.real_display_y = $game_map.display_y
end
end