질문과 답변

Extra Form

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

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

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

마을집 내부같이 좁은곳에서 미니맵을 쓰면좀 이상합니다.

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

C버튼 B버튼으로 껏다 킬수잇다는게 그게 무슨말인지요

플레이어가 b나 c누르면 껏다 켜진다는말인가요?

이런거말고 특정지역에서 미니맵을 꺼졋다 켜졋다하게하는 방법은 없을까요

#============================================================================== 
# 축소 맵의 표시(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 '4'
  • ?
    코아 코스튬 2010.10.09 01:30

    특정 맵에서 안되게 하고싶으면,,

    그 스크립트 맨 윗 부분에 unless $game_map.map_id == 맵 아이디

    (맵 아이디를 알고 싶으시면 제가올린 http://avangs.info/zbxe/1678511 스크립트를 사용해 보세요)

    그리고 맨 아랫 부분에 end 를 써주시면 됩니다.

    여러 군데를 정하고 싶으시면

    unless( $game_map.map_id == 맵 아이디1 or  $game_map.map_id == 맵 아이디2)

    처럼 맨 윗부분을 바꾸시면 됩니다.

  • ?
    황제님 2010.10.09 05:51

    unless $game_map.map_id 6 이거 맨위에 쓰고 맨 밑에 end 썻더니 에러떠요 ㅠㅠ 

  • ?
    황제님 2010.10.10 03:37

    네 제가 위에 붙여넣은 스크랩 젤위에 unless $game_map.map_id == 6 하고 젤밑에 end 했는데 error 뜨네요 

    이를 어찌하죠 ㅠ

  • ?
    Alkaid 2010.10.09 07:58

    unless $game_map.map_id == 6
    ......
    end
    로 하신 것 맞습니까?


List of Articles
종류 분류 제목 글쓴이 날짜 조회 수
공지 묻고 답하기 가이드 습작 2014.06.14 12446
RMVXA 뭐라해야되지..벽 테두리 ? 칩셋을 못찾겠습니다. 3 file 작은펭귄 2014.04.19 698
RMVX 뭐랄까.. 글씨 이벤트? 1 아이카 2011.12.31 2876
RM2k 뭐지, 메뉴가 사라지는 이현상은? 이름이 이현상이 아니라... 쉰라면블랙 2012.03.19 4971
기타 뭐지??? 1 ★RPG마스터★ 2011.03.04 975
기타 뭔가 복잡해보이는 게임은 어떤방법으로 게임을 만든건가요? 2 모마오드 2017.05.09 277
라이선스 기타 뮤직쉐이크로 만든 곡을 게임에 사용해도 되나요? 4 SayB 2014.02.22 942
기타 뮤클라이언트 액알모션 설정방법 vx맨 2011.09.10 1375
이벤트 작성 RMMV 미니게임 연타 키 이벤트 작성 질문입니다 5 골디 2019.02.14 461
RMXP 미니게임을 알만툴에 삽입해서 넣으려면 사과나무의섬 2015.07.11 201
스크립트 추천 RMVXA 미니게임을 하는동안 위에 점수판을 띄워주고싶은데 방법이 없을까요? 홍홍이1 2024.02.07 15
기타 RMVXA 미니게임제작 2 현작가 2022.03.13 275
RMXP 미니맵 스위치 제발좀 도와주세요 4 황제님 2010.10.08 600
RMXP 미니맵 스크립트 스위치 질문입니다. 2 황제님 2010.10.05 578
RMVX 미니맵 표시 어떻게 하나요? 1 준짱돌이 2010.12.22 605
RMMV 미니맵 플러그인을 사용하는데, 키 한 개로 끄고 켜고 싶습니다. file 파란소리 2018.09.22 143
RMXP 미니맵npc 표시 방법 2 오매갓 2011.09.13 1284
RMXP 미니맵그자리만 있는법 오매갓 2011.09.14 1786
RMVX 미니맵스크립트 곰테니 2010.12.30 804
RMXP 미니맵표시 스크립트 질문드려요! 1 플리아티 2010.12.18 451
RMXP 미니오니칩 2 곱등곱등함정카드 2011.02.16 1530
Board Pagination Prev 1 ... 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 ... 516 Next
/ 516