设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1105|回复: 3
打印 上一主题 下一主题

[已经解决] 关于网游中大地图显示的问题~

 关闭 [复制链接]
头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
1 小时
注册时间
2008-9-7
帖子
114
跳转到指定楼层
1
发表于 2009-9-24 17:13:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽

Lv1.梦旅人

梦石
0
星屑
184
在线时间
70 小时
注册时间
2006-9-21
帖子
22
2
发表于 2009-9-24 20:24:21 | 只看该作者
我目前可以用事件做,但是不可能每走一步地图指示都会变.

用事件可以做按下某个键然后弹出大地图,其间还可以自己设置需要的效果.由于VX和XP一般地图都不大,可以以每个地图为一个变量,然后利用变量来设置在大地图的位置移动显示,这样可以显示主角所在地图的变化.

如果楼主需要脚本来做或者有更高的精确的要求,那还是需要高人来回答了:) N年后扔然是菜鸟的我飘过.哈哈
游戏是死的,人是活的
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1743
在线时间
485 小时
注册时间
2006-1-7
帖子
1073
3
发表于 2009-9-24 20:35:33 | 只看该作者
  1. #==============================================================================
  2. # ■ 縮小地图的表示
  3. #==============================================================================
  4. #==============================================================================
  5. # □ 前期定义
  6. #==============================================================================
  7. module PLAN_Map_Window
  8.   WIN_X       = 8         # 窗口的初始 X 座標
  9.   WIN_Y       = 8         # 窗口的初始 Y 座標
  10.   WIN_WIDTH   = 8*32      # 地图的宽度
  11.   WIN_HEIGHT  = 6*32      # 地图的高度
  12.   ZOOM        = 4.0       # 地图的放缩比例
  13.   WINDOWSKIN  = ""        # 自定义地图窗口素材,如果留空则是默认的
  14.   ON_OFF_KEY  = Input::X  # 打开地图的按钮,X就是键盘的A键
  15.   SWITCH      = 500      # 打开此号开关才可以使用小地图
  16.                           # 使用地图功能,关闭则可以使用地图功能
  17.   WINDOW_MOVE = true      # 是否可以自动改变窗口位置(true:可改变, false:固定)
  18.   OVER_X      = 632 - WIN_WIDTH   # 自动改变后窗口的位置x
  19.   OVER_Y      = 8       #自动改变后窗口的位置y

  20.   OPACITY     = 255       # 窗口的透明度
  21.   C_OPACITY   = 255       # 地图的透明度
  22.   VISIBLE     = false     # 最初是否可见
  23. end
  24. #==============================================================================
  25. # ■ Game_Temp
  26. #==============================================================================
  27. class Game_Temp
  28. attr_accessor :map_visible
  29. alias plan_map_window_initialize initialize
  30. def initialize
  31. plan_map_window_initialize
  32. @map_visible = false
  33. end
  34. end
  35. #==============================================================================
  36. # ■ Scene_Map
  37. #==============================================================================
  38. class Scene_Map
  39. #--------------------------------------------------------------------------
  40. # ● 主处理
  41. #--------------------------------------------------------------------------
  42. alias plan_map_window_main main
  43. def main
  44. @map_window = Window_Map.new
  45. @map_window.visible = $game_temp.map_visible
  46. plan_map_window_main
  47. @map_window.dispose
  48. end
  49. #--------------------------------------------------------------------------
  50. # ● 更新
  51. #--------------------------------------------------------------------------
  52. alias plan_map_window_update update
  53. def update
  54. $game_temp.map_visible = @map_window.visible
  55. plan_map_window_update
  56. unless $game_switches[PLAN_Map_Window::SWITCH]==false
  57. if Input.trigger?(PLAN_Map_Window::ON_OFF_KEY)
  58. if @map_window.visible
  59. @map_window.visible = false
  60. else
  61. @map_window.visible = true
  62. end
  63. end
  64. else
  65. if @map_window.visible
  66. @map_window.visible = false
  67. end
  68. end
  69. if @map_window.visible
  70. @map_window.update
  71. end
  72. end
  73. #--------------------------------------------------------------------------
  74. # ● 场所移动的变化
  75. #--------------------------------------------------------------------------
  76. alias plan_map_window_transfer_player transfer_player
  77. def transfer_player
  78. visible = @map_window.visible
  79. @map_window.visible = false
  80. plan_map_window_transfer_player
  81. @map_window.dispose
  82. @map_window = Window_Map.new
  83. @map_window.visible = visible
  84. end
  85. end
  86. #==============================================================================
  87. # ■ Window_Map
  88. #==============================================================================
  89. class Window_Map < Window_Base
  90. #--------------------------------------------------------------------------
  91. # ● 初始化
  92. #--------------------------------------------------------------------------
  93. def initialize
  94. x = PLAN_Map_Window::WIN_X
  95. y = PLAN_Map_Window::WIN_Y
  96. w = PLAN_Map_Window::WIN_WIDTH
  97. h = PLAN_Map_Window::WIN_HEIGHT
  98. super(x, y, w, h)
  99. unless PLAN_Map_Window::WINDOWSKIN.empty?
  100. self.windowskin = RPG::Cache.windowskin(PLAN_Map_Window::WINDOWSKIN)
  101. end
  102. self.contents = Bitmap.new(width - 32, height - 32)
  103. self.opacity = PLAN_Map_Window::OPACITY
  104. self.contents_opacity = PLAN_Map_Window::C_OPACITY
  105. @map_data = $game_map.data
  106. @tileset = RPG::Cache.tileset($game_map.tileset_name)
  107. @autotiles = []
  108. for i in 0..6
  109. autotile_name = $game_map.autotile_names[i]
  110. @autotiles[i] = RPG::Cache.autotile(autotile_name)
  111. end
  112. @old_real_x = $game_player.real_x
  113. @old_real_y = $game_player.real_y
  114. @all_map = make_all_map
  115. self.visible = PLAN_Map_Window::VISIBLE
  116. refresh
  117. end
  118. #--------------------------------------------------------------------------
  119. # ● 缩小图做成
  120. #--------------------------------------------------------------------------
  121. def make_all_map
  122. all_map = Bitmap.new($game_map.width * 32, $game_map.height * 32)
  123. for y in 0...$game_map.height
  124. for x in 0...$game_map.width
  125. for z in 0...3
  126. tile_num = @map_data[x, y, z]
  127. next if tile_num == nil
  128. if tile_num < 384
  129. if tile_num >= 48
  130. tile_num -= 48
  131. src_rect = Rect.new(32, 2 * 32, 32, 32)
  132. all_map.blt(x * 32, y * 32, @autotiles[tile_num / 48], src_rect)
  133. end
  134. else
  135. tile_num -= 384
  136. src_rect = Rect.new(tile_num % 8 * 32, tile_num / 8 * 32, 32, 32)
  137. all_map.blt(x * 32, y * 32, @tileset, src_rect)
  138. end
  139. end
  140. end
  141. end
  142. w = ($game_map.width / PLAN_Map_Window::ZOOM) * 32
  143. h = ($game_map.height / PLAN_Map_Window::ZOOM) * 32
  144. ret_bitmap = Bitmap.new(w, h)
  145. src_rect = Rect.new(0, 0, all_map.width, all_map.height)
  146. dest_rect = Rect.new(0, 0, ret_bitmap.width, ret_bitmap.height)
  147. ret_bitmap.stretch_blt(dest_rect, all_map, src_rect)
  148. all_map.dispose
  149. return ret_bitmap
  150. end
  151. #--------------------------------------------------------------------------
  152. # ● 刷新
  153. #--------------------------------------------------------------------------
  154. def refresh
  155. self.contents.clear
  156. one_tile_size = 32 / PLAN_Map_Window::ZOOM
  157. x = $game_player.real_x - 128 * (self.contents.width / one_tile_size) / 2
  158. y = $game_player.real_y - 128 * (self.contents.height / one_tile_size) / 2
  159. x = x * one_tile_size / 128
  160. y = y * one_tile_size / 128
  161. half_width = self.contents.width * 128 / 2
  162. rest_width = ($game_map.width * 128 - $game_player.real_x) * one_tile_size
  163. rev_x = 0
  164. if @all_map.width < self.contents.width
  165. rev_x = (half_width - $game_player.real_x * one_tile_size) / 128
  166. rev_x -= (self.contents.width - @all_map.width) / 2
  167. x += rev_x
  168. elsif half_width > $game_player.real_x * one_tile_size
  169. rev_x = (half_width - $game_player.real_x * one_tile_size) / 128
  170. x += rev_x
  171. elsif half_width > rest_width
  172. rev_x = -((half_width - rest_width) / 128)
  173. x += rev_x
  174. end
  175. half_height = self.contents.height * 128 / 2
  176. rest_height = ($game_map.height * 128 - $game_player.real_y) * one_tile_size
  177. rev_y = 0
  178. if @all_map.height < self.contents.height
  179. rev_y = (half_height - $game_player.real_y * one_tile_size) / 128
  180. rev_y -= (self.contents.height - @all_map.height) / 2
  181. y += rev_y
  182. elsif half_height > $game_player.real_y * one_tile_size
  183. rev_y = (half_height - $game_player.real_y * one_tile_size) / 128
  184. y += rev_y
  185. elsif half_height > rest_height
  186. rev_y = -((half_height - rest_height) / 128)
  187. y += rev_y
  188. end
  189. src_rect = Rect.new(x, y, self.contents.width, self.contents.height)
  190. self.contents.blt(0, 0, @all_map, src_rect)
  191. if PLAN_Map_Window::WINDOW_MOVE == true
  192. w = self.x..self.x + self.width
  193. h = self.y..self.y + self.height
  194. if w === $game_player.screen_x and h === $game_player.screen_y
  195. if self.x == PLAN_Map_Window::WIN_X and self.y == PLAN_Map_Window::WIN_Y
  196. self.x = PLAN_Map_Window::OVER_X
  197. self.y = PLAN_Map_Window::OVER_Y
  198. else
  199. self.x = PLAN_Map_Window::WIN_X
  200. self.y = PLAN_Map_Window::WIN_Y
  201. end
  202. end
  203. end
  204. if $game_party.actors.size > 0
  205. for i in [2, 1, 0]
  206. tile = @map_data[$game_player.x, $game_player.y, i]
  207. next if tile == 0
  208. return if $game_map.priorities[tile] > 0
  209. end
  210. actor = $game_party.actors[0]
  211. bitmap = RPG::Cache.character(actor.character_name, actor.character_hue)
  212. width = bitmap.width / 4
  213. height = bitmap.height / 4
  214. src_rect = Rect.new(0, 0, width, height)
  215. w = width / PLAN_Map_Window::ZOOM
  216. h = height / PLAN_Map_Window::ZOOM
  217. x = self.contents.width / 2 - w / 2 + one_tile_size / 2 - rev_x
  218. y = self.contents.height / 2 - h / 2 - rev_y
  219. dest_rect = Rect.new(x, y, w, h)
  220. self.contents.stretch_blt(dest_rect, bitmap, src_rect)
  221. end
  222. end
  223. #--------------------------------------------------------------------------
  224. # ● 更新
  225. #--------------------------------------------------------------------------
  226. def update
  227. super
  228. if @old_real_x != $game_player.real_x or @old_real_y != $game_player.real_y
  229. @old_real_x = $game_player.real_x
  230. @old_real_y = $game_player.real_y
  231. refresh
  232. end
  233. end
  234. #--------------------------------------------------------------------------
  235. # ● 解放
  236. #--------------------------------------------------------------------------
  237. def dispose
  238. super
  239. @all_map.dispose
  240. end
  241. end
  242. #==============================================================================
  243. # ■ Window_Menu_Command
  244. #==============================================================================
  245. class Window_Menu_Command < Window_Selectable
  246. #--------------------------------------------------------------------------
  247. # map_id : 地图 ID
  248. #--------------------------------------------------------------------------
  249. def get_map_name(map_id)
  250. mapinfo = load_data("Data/MapInfos.rvdata")
  251. result = mapinfo[map_id].name
  252. return result.split(/,/)[0].split(/_/)[0]
  253. end
  254. #--------------------------------------------------------------------------
  255. #--------------------------------------------------------------------------
  256. def update_help
  257. text = $data_system.game_title
  258. if @commands[self.index] != nil
  259. text += ": " + @commands[self.index]
  260. end
  261. map_name = get_map_name($game_map.map_id)
  262. text += " "
  263. if map_name.include?"@"
  264. text += "未知地域"
  265. else
  266. text += map_name
  267. end
  268. #-----------------------------------------------------------------------
  269. @x,@y = $game_player.x,$game_player.y
  270. text += " <#{@x},#{@y}>"
  271. #-----------------------------------------------------------------------
  272. @help_window.set_text(text)
  273. end
  274. end
  275. #==============================================================================
复制代码
这是我根据小地图的脚本自己修改了一点儿
main之前插入此脚本
游戏中,如果500号开关打开,这时候按下键盘上的“A”,就会出现小地图。再按一下就没了。
具体内容看明白脚本前几行设置,自己调整。
别偷懒,不懂可以改一下试试,看到效果了,你就懂了。
初从文,三年不中;后习武,校场发一矢,中鼓吏,逐之出;遂学医,有所成。自撰一良方,服之,卒。
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
1 小时
注册时间
2008-9-7
帖子
114
4
 楼主| 发表于 2009-9-25 22:45:44 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2025-1-6 20:06

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表