질문과 답변

Extra Form

미니맵 스크립트를 넣으면 모든 맵의 미니맵이 표시되어 버리네요.

스크립트를 특정 맵에서 불러올때만 미니맵을 킬수있는 방법은 없을까요??

오프닝이나 엔딩 같은 곳에서는 미니맵을 쓰고 싶지않네요.

참고로 저는 아래 스크립트을 쓰고 있습니다.

미니맵를 스위치처럼 끄고 킬수있는 스크립트를 써주시면 감사하겠습니다.

#==============================================================================
# 축소 맵의 표시(ver 0.999)
# by 크로노스 clum-sea
#==============================================================================


#==============================================================================
# 캐스터 마이즈포인트
#==============================================================================
module PLAN_Map_Window
WIN_X = 8 # 윈도우의 X 좌표
WIN_Y = 8 # 윈도우의 Y 좌표
WIN_WIDTH = 6*20 # 윈도우의 폭
WIN_HEIGHT = 5*20 # 윈도우의 높이
ZOOM = 16.0 # 프의 축소율(32 * 32 의 타일을 몇분의 1으로 할까)
WINDOWSKIN = "" # 스킨(하늘에서 디폴트)

ON_OFF_KEY = Input::C # 윈도우의 온 오프를 바꾸는 버튼

SWITCH = 40 # 맵 윈도우 표시 금지용의 스윗치 번호
# (ON로 표시 금지, OFF로 표시 가능)

WINDOW_MOVE = true # 윈도우와 플레이어가 겹쳤을 시 자동적으로 이동할까
# (true:하는, false:하지 않는다)
OVER_X = 632 - WIN_WIDTH # 이동 후의 X 좌표(초기 위치와 왕복합니다)
OVER_Y = 8 # 이동 후의 Y 좌표(초기 위치와 왕복합니다)

OPACITY = 196 # 맵의 투명도
C_OPACITY = 252 # 윈도우의 투명도
VISIBLE = true # 최초, 표시할까 하지 않는가(true:하는, false:하지 않는다)
end

#==============================================================================
# ?? Game_Temp
#==============================================================================
class Game_Temp
#--------------------------------------------------------------------------
# ● 공개 인스턴스 변수
#--------------------------------------------------------------------------
attr_accessor :map_visible # ?맵 윈도우의 표시 상태
#--------------------------------------------------------------------------
# ● 오브젝트 초기화
#--------------------------------------------------------------------------
alias plan_map_window_initialize initialize
def initialize
# 되돌린다
plan_map_window_initialize

@map_visible = true
end
end
#==============================================================================
# ■ Scene_Map
#==============================================================================

class Scene_Map
#--------------------------------------------------------------------------
# ● 메인 처리
#--------------------------------------------------------------------------
alias plan_map_window_main main
def main
# 윈도우를 작성
@map_window = Window_Map.new
@map_window.visible = $game_temp.map_visible
# 되돌린다
plan_map_window_main
# 메세지 윈도우를 해방
@map_window.dispose
end
#--------------------------------------------------------------------------
# ● 프레임 갱신
#--------------------------------------------------------------------------
alias plan_map_window_update update
def update
# visible 를 기억
$game_temp.map_visible = @map_window.visible
# 되돌린다
plan_map_window_update

# 금지가 아니면, 변환 처리
unless $game_switches[PLAN_Map_Window::SWITCH]
# 표시되고 있는 경우, 비표시로 한다
if Input.trigger?(PLAN_Map_Window::ON_OFF_KEY)
# 표시되어 있지 않은 경우, 표시한다
if @map_window.visible
@map_window.visible = true
# 표시되어 있지 않은 경우, 표시한다
else
@map_window.visible = true
end
end
# 금지의 경우는 강제적으로 비표시
else
if @map_window.visible
@map_window.visible = true
end
end
# 표시되고 있을 때만 갱신
if @map_window.visible
@map_window.update
end
end
#--------------------------------------------------------------------------
# ● 플레이어의 장소 이동
#--------------------------------------------------------------------------
alias plan_map_window_transfer_player transfer_player
def transfer_player
# visible 를 기억
visible = @map_window.visible
@map_window.visible = true
# 되돌린다
plan_map_window_transfer_player
# 맵 윈도우를 해방
@map_window.dispose
# 맵 윈도우를 작성
@map_window = Window_Map.new
# 표시 설정을 전맵 상태에 되돌린다
@map_window.visible = visible
end
end


#==============================================================================
# ■ Window_Map
#==============================================================================

class Window_Map < Window_Base
#--------------------------------------------------------------------------
# 타일 맵의 경우
#--------------------------------------------------------------------------
def initialize
x = PLAN_Map_Window::WIN_X
y = PLAN_Map_Window::WIN_Y
w = PLAN_Map_Window::WIN_WIDTH
h = PLAN_Map_Window::WIN_HEIGHT
super(x, y, w, h)
unless PLAN_Map_Window::WINDOWSKIN.empty?
self.windowskin = RPG::Cache.windowskin(PLAN_Map_Window::WINDOWSKIN)
end
self.contents = Bitmap.new(width - 32, height - 32)
self.opacity = PLAN_Map_Window::OPACITY
self.contents_opacity = PLAN_Map_Window::C_OPACITY
@map_data = $game_map.data
# ??C????b?v??????
@tileset = RPG::Cache.tileset($game_map.tileset_name)
@autotiles = []
for i in 0..6
autotile_name = $game_map.autotile_names[i]
@autotiles[i] = RPG::Cache.autotile(autotile_name)
end
# ???????v???C??????u???m??
@old_real_x = $game_player.real_x
@old_real_y = $game_player.real_y
# ??b?v???S?????????
@all_map = make_all_map
# ????E???????????
self.visible = PLAN_Map_Window::VISIBLE
# ???
refresh
end
#--------------------------------------------------------------------------
# ?? ??b?v???S??????????i?k???????t???j
#--------------------------------------------------------------------------
def make_all_map
all_map = Bitmap.new($game_map.width * 32, $game_map.height * 32)
for y in 0...$game_map.height
for x in 0...$game_map.width
for z in 0...3
tile_num = @map_data[x, y, z]
next if tile_num == nil
# ?I??g??C????????
if tile_num < 384
# ????C????????????????
if tile_num >= 48
tile_num -= 48
src_rect = Rect.new(32, 2 * 32, 32, 32)
all_map.blt(x * 32, y * 32, @autotiles[tile_num / 48], src_rect)
end
# 타일 맵의 경우
else
tile_num -= 384
src_rect = Rect.new(tile_num % 8 * 32, tile_num / 8 * 32, 32, 32)
all_map.blt(x * 32, y * 32, @tileset, src_rect)
end
end
end
end
# 전체 맵으로부터 축소 맵에
w = ($game_map.width / PLAN_Map_Window::ZOOM) * 32
h = ($game_map.height / PLAN_Map_Window::ZOOM) * 32
ret_bitmap = Bitmap.new(w, h)
src_rect = Rect.new(0, 0, all_map.width, all_map.height)
dest_rect = Rect.new(0, 0, ret_bitmap.width, ret_bitmap.height)
ret_bitmap.stretch_blt(dest_rect, all_map, src_rect)
all_map.dispose
return ret_bitmap
end
#--------------------------------------------------------------------------
# ● 리프레쉬
#--------------------------------------------------------------------------
def refresh
self.contents.clear
# 축소 맵 표시
one_tile_size = 32 / PLAN_Map_Window::ZOOM
x = $game_player.real_x - 128 * (self.contents.width / one_tile_size) / 2
y = $game_player.real_y - 128 * (self.contents.height / one_tile_size) / 2
x = x * one_tile_size / 128
y = y * one_tile_size / 128

# 스크롤 스톱 처리(옆)
# 캐릭터의 위치(contents 의 중앙)
half_width = self.contents.width * 128 / 2
# 캐릭터의 위치(실위치)~맵의 구석까지의 나머지폭
rest_width = ($game_map.width * 128 - $game_player.real_x) * one_tile_size
# 윈도우보다 맵의 폭이 작으면
rev_x = 0
# 맵이 윈도우보다 작은 경우는 중앙 표시
if @all_map.width < self.contents.width
rev_x = (half_width - $game_player.real_x * one_tile_size) / 128
rev_x -= (self.contents.width - @all_map.width) / 2
x += rev_x
# ??????b?v?????????????
elsif half_width > $game_player.real_x * one_tile_size
rev_x = (half_width - $game_player.real_x * one_tile_size) / 128
x += rev_x
# 오른쪽이 맵의 구석을 넘으면
elsif half_width > rest_width
rev_x = -((half_width - rest_width) / 128)
x += rev_x
end

# 스크롤 스톱 처리(세로)
# 캐릭터의 정도 치(contents 의 중앙)
half_height = self.contents.height * 128 / 2
# 캐릭터의 위치(실위치)~맵의 구석까지의 나머지 높이
rest_height = ($game_map.height * 128 - $game_player.real_y) * one_tile_size
# 윈도우보다 맵의 폭이 작으면
rev_y = 0
# 맵이 윈도우보다 작은 경우는 중앙 표시
if @all_map.height < self.contents.height
rev_y = (half_height - $game_player.real_y * one_tile_size) / 128
rev_y -= (self.contents.height - @all_map.height) / 2
y += rev_y
# 오른쪽이 맵의 구석을 넘으면
elsif half_height > $game_player.real_y * one_tile_size
rev_y = (half_height - $game_player.real_y * one_tile_size) / 128
y += rev_y
# ?E????b?v?????????????
elsif half_height > rest_height
rev_y = -((half_height - rest_height) / 128)
y += rev_y
end

src_rect = Rect.new(x, y, self.contents.width, self.contents.height)
self.contents.blt(0, 0, @all_map, src_rect)
# 윈도우의 이동 처리
if PLAN_Map_Window::WINDOW_MOVE == true
# 윈도우의 범위를 취득(범위 오브젝트)
w = self.x..self.x + self.width
h = self.y..self.y + self.height
# 플레이어가 윈도우의 범위내에 들어갔을 경우
if w === $game_player.screen_x and h === $game_player.screen_y
# 이동 장소 판정
# 초기 위치라면
if self.x == PLAN_Map_Window::WIN_X and self.y == PLAN_Map_Window::WIN_Y
# 이동 후의 좌표에 이동
self.x = PLAN_Map_Window::OVER_X
self.y = PLAN_Map_Window::OVER_Y
# 초기 위치가 아닌 경우
else
# 초기 위치에 이동
self.x = PLAN_Map_Window::WIN_X
self.y = PLAN_Map_Window::WIN_Y
end
end
end
# 액터가 있는 경우는 최초의 액터를 맵에 표시
if $game_party.actors.size > 0
# priority 체크 숨는다면 액터비표시
for i in [2, 1, 0]
tile = @map_data[$game_player.x, $game_player.y, i]
next if tile == 0
return if $game_map.priorities[tile] > 0
end
actor = $game_party.actors[0]
bitmap = RPG::Cache.character(actor.character_name, actor.character_hue)
width = bitmap.width / 4
height = bitmap.height / 4
src_rect = Rect.new(0, 0, width, height)
# 액터를 중앙에 표시
w = width / PLAN_Map_Window::ZOOM
h = height / PLAN_Map_Window::ZOOM
# 타일의 폭만 짝수이므로 반타일분 늦춘다
x = self.contents.width / 2 - w / 2 + one_tile_size / 2 - rev_x
y = self.contents.height / 2 - h / 2 - rev_y
dest_rect = Rect.new(x, y, w, h)
self.contents.stretch_blt(dest_rect, bitmap, src_rect)
end
end
#--------------------------------------------------------------------------
# ● 프레임 갱신
#--------------------------------------------------------------------------
def update
super
if @old_real_x != $game_player.real_x or @old_real_y != $game_player.real_y
@old_real_x = $game_player.real_x
@old_real_y = $game_player.real_y
refresh
end
end
#--------------------------------------------------------------------------
# ● 해방
#--------------------------------------------------------------------------
def dispose
super
@all_map.dispose
end
end

Comment '2'
  • ?
    Alkaid 2010.10.05 08:19

    해당 스크립트는 버튼입력이나 스위치를 사용하여 미니맵 표시여부를 결정하는 것 같은데, 오프닝이나 이벤트 신등을 만들 때 이벤트에 스크립트에 지정된 스위치를 on시키도록 하면 될 겁니다(물론 끝나면 off).

  • ?
    황제님 2010.10.06 00:38

    게임에스크립트를 붙여넣고 시작하면 어떤 맵이든 미니맵이 나와버립니다. 플레이어가 자율적으로 끄고 키는게아닌 시스탬적으로 미니맵을 껏다 키는 방법이 없을까요


List of Articles
종류 분류 제목 글쓴이 날짜 조회 수
공지 묻고 답하기 가이드 습작 2014.06.14 21128
이벤트 작성 RMVXA 플레이어 x,y 좌표 기억법? 2 유리컵 2023.10.07 89
이벤트 작성 RMVXA 특정 아이템을 일정량 소지해야 사용할 수 있는 스킬을 구현하고 싶습니다. 2 AAAA. 2023.10.07 96
플러그인 사용 RMMZ 알만툴 MZ vs 코어 플러그인 명령으로 메뉴 배경 만들기. blahdi 2023.10.05 106
플러그인 추천 RMMZ 솔라빔형 스킬을 구현할 수 있는 방법이 있을까요? 3 하라아아암 2023.09.27 106
액션 전투 RMMV 캐릭터 클랙스 변경 시 MP 정보를 저장하고 싶습니다. 방법이 없을까요. 2 니노미야 2023.09.27 87
플러그인 추천 RMMZ 대화상자 관련 플러그인 이런 거 없나요? 하라아아암 2023.09.26 113
기타 RMMV 세이브한 후에 대사를 나오게하고싶어요(자세한건 사진을 참고) file 설연 2023.09.22 99
스크립트 작성 RMVXA 특정 상태에서 치명피해량이 증가하는 상태를 구현하고 싶습니다. 2 AAAA. 2023.09.22 95
이벤트 작성 RMVXA 난수 여러개를 한번에 받을때 중간값만 제외하는법 1 file 유리컵 2023.09.21 92
플러그인 추천 RMMV MV 인벤토리 변경하는 플러그인이 있을까요? 2 머리큰두두 2023.09.19 121
기본툴 사용법 RMMV 안녕하세요 \I 기능을 쓰고 싶은데 1 설렁설렁탕 2023.09.17 89
이벤트 작성 RMMV 심볼 인카운터 전투가 뭔가 이상합니다 2 file pokapoka 2023.09.17 90
이벤트 작성 RMMV 전투가 멋대로 시작합니다. 1 file pokapoka 2023.09.16 78
이벤트 작성 RMVXA 스톱워치 하는 법 3 홍홍이1 2023.09.16 64
플러그인 추천 RMMV RPG maker mV 텍스트 행 늘리기 2 설렁설렁탕 2023.09.15 87
이벤트 작성 RMMZ 이벤트를 중간에 스킵하는 법 2 하라아아암 2023.09.14 84
플러그인 사용 기타 대화상자의 크기를 조절하는 플러그인에 관해 4 펑비 2023.09.13 139
이벤트 작성 RMVXA 일정시간동안 특정 버튼을 반복적으로 눌러 적을 공격해야하는 미니게임을 만들고싶은데요. 6 홍홍이1 2023.09.11 151
턴제 전투 RMMZ 전체 공격은 회피가 적용이 안되나요? 2 Lukim9 2023.09.10 107
에러 해결 RMMV 타이틀 실행오류 1 file 송실용 2023.09.09 95
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ... 518 Next
/ 518