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

Project1

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

[已经过期] 缩略地图如何做

[复制链接]

Lv1.梦旅人

梦石
0
星屑
886
在线时间
4 小时
注册时间
2015-5-8
帖子
3
跳转到指定楼层
1
发表于 2015-5-9 20:51:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
想请问一下地图特别大,看见有的游戏在左上角设置了一个缩略地图,并且有显示主角现在处在的位置,请问这样的功能用代码如何实现呢?新手对代码接触不多,能说的详细一点或者有没有教程链接之类的?谢谢啦

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

2
发表于 2015-5-9 20:58:56 | 只看该作者
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3152
在线时间
1077 小时
注册时间
2015-1-13
帖子
324

开拓者

3
发表于 2015-5-11 15:46:48 | 只看该作者
RUBY 代码复制
  1. #encoding:utf-8
  2. # 小地图,不显示事件,只显示玩家位置和地图
  3. # 进入新地图时会生成小地图,地图越大读取时间越久。
  4. # 缓存最近使用的地图,最多10张(可在下面更改)。优先保留常用的地图
  5. # 进入地图按 F5 打开小地图
  6. # 不支持循环的地图。
  7.  
  8.  
  9. class Window_MiniMap < Window_Base
  10. ZoomRate = 0.25 #放大率
  11. Hide_Text = '<hide minimap>'#地图备注中加入这个,该地图不显示小地图
  12. @@cache = {}
  13. @@show = false
  14.  
  15.   def initialize(vp)
  16.     super(Graphics.width - 205, 5, 200, 160) #设置窗口的 x, y, width, height
  17.     self.viewport = vp
  18.     self.visible = false
  19.     self.z = 299
  20.     contents.fill_rect(contents.rect, Color.new(0, 0, 0, 255))#底色
  21.     create_minimap
  22.     create_player_sprite
  23.     refresh_visible
  24.     update
  25.   end
  26.   def update
  27.     super
  28.     update_player_sprite
  29.     update_minimap
  30.     switch_minimap if Input.trigger?(:F5) #设置呼出按键
  31.   end
  32.   def switch_minimap
  33.     @@show = !@@show
  34.     refresh_visible
  35.   end
  36.   def update_minimap
  37.     @minimap.src_rect.x = $game_player.real_x * 32 - @minimap_sw
  38.     @minimap.src_rect.y = $game_player.real_y * 32 - @minimap_sh
  39.   end
  40.   def dispose
  41.     dispose_player_sprite
  42.     @minimap.visible = false
  43.     super
  44.   end
  45.  
  46.  
  47.  
  48.   def create_player_sprite
  49.     @player_sprite = Sprite_MapCharacter.new(viewport, $game_player)
  50.     @player_sprite.z = 301
  51.     @player_sprite.x = x + padding + (@minimap_sw+16)*ZoomRate
  52.     @player_sprite.y = y + padding + (@minimap_sh+28)*ZoomRate
  53.     @player_sprite.color = Color.new(220, 0, 0)
  54.     @player_sprite.zoom_x = @player_sprite.zoom_y = ZoomRate
  55.   end
  56.   def update_player_sprite
  57.     @player_sprite.update
  58.   end
  59.   def dispose_player_sprite
  60.     @player_sprite.dispose
  61.   end
  62.  
  63.  
  64.   def refresh_visible
  65.     show = !@hide&& @@show
  66.     self.visible = show
  67.     @minimap.visible = show
  68.     @player_sprite.visible = show
  69.   end
  70.   def create_minimap
  71.     @minimap_sw = contents.width / 2 / ZoomRate
  72.     @minimap_sh = contents.height / 2 / ZoomRate
  73.     @minimap = Sprite.new
  74.     @minimap.x = x + padding
  75.     @minimap.y = y + padding
  76.     @minimap.z = 300
  77.  
  78.     spriteset_map = nil
  79.     SceneManager.scene.instance_eval {spriteset_map = @spriteset}
  80.  
  81.     @minimap.bitmap = minimap_bitmap(spriteset_map)
  82.     @minimap.zoom_x = @minimap.zoom_y = ZoomRate
  83.     @minimap.src_rect = Rect.new(0, 0, @minimap_sw*2, @minimap_sh*2)
  84.     @minimap.viewport = viewport
  85.  
  86.   end
  87.  
  88.   def minimap_bitmap(spriteset_map)
  89.  
  90.     hide = false
  91.     $game_map.instance_eval { hide = @map.note.include? Hide_Text }
  92.     @hide= hide
  93.     return nil if @hide
  94.  
  95.     v = @@cache[$game_map.map_id]
  96.     bitmap = v ? v[1] : nil
  97.     if bitmap && !bitmap.disposed?
  98.       v[0] += 1
  99.       return bitmap
  100.     end
  101.  
  102.     spriteset_map.update
  103.     spriteset_map.prepare_snap_minimap
  104.  
  105.     tempSprite = Sprite.new
  106.     rect = contents.text_size( "LOADING" )
  107.     rect.width += 4
  108.     rect.height += 4
  109.     rect.x = Graphics.width - rect.width
  110.     rect.y = Graphics.height - rect.height
  111.     tempSprite.bitmap = Bitmap.new Graphics.width, Graphics.height
  112.     tempSprite.bitmap.fill_rect(tempSprite.bitmap.rect, Color.new(0,0,0) )
  113.     tempSprite.bitmap.draw_text(rect, "LOADING")
  114.     tempSprite.z = 1000
  115.  
  116.     mw = $game_map.width
  117.     mh = $game_map.height
  118.  
  119.  
  120.     bitmap = Bitmap.new( mw*32, mh*32 )
  121.     sw = $game_map.screen_tile_x
  122.     sh = $game_map.screen_tile_y
  123.     (mw.fdiv sw).ceil.times {|x|
  124.       (mh.fdiv sh).ceil.times {|y|
  125.         tempSprite.visible = false
  126.  
  127.         $game_map.set_display_pos(sw * x, sh * y)
  128.         spriteset_map.update_snap_minimap
  129.         dx = $game_map.display_x * 32
  130.         dy = $game_map.display_y * 32
  131.         bp = Graphics.snap_to_bitmap
  132.         bitmap.blt( dx, dy, bp, bp.rect )
  133.         tempSprite.visible = true
  134.         Graphics.update
  135.       }
  136.     }
  137.     tempSprite.bitmap.dispose
  138.     tempSprite.dispose
  139.  
  140.     $game_player.center($game_player.x, $game_player.y)
  141.     spriteset_map.update
  142.  
  143.     if @@cache.size > 10 #设置缓存地图张数
  144.       min_k = 0
  145.       @@cache.each {|k, v| min_k = k if v[0] > min_k}
  146.       @@cache.delete(min_k)[1].dispose
  147.     end
  148.     @@cache[$game_map.map_id] = [1, bitmap]
  149.     return bitmap
  150.   end
  151. end
  152.  
  153.  
  154. class Spriteset_Map
  155.   attr_reader :viewport1
  156.   def prepare_snap_minimap
  157.     @character_sprites.each {|s| s.visible = false}
  158.     @viewport1.tone.set(0, 0, 0, 0)
  159.     @viewport2.color.set(0, 0, 0, 0)
  160.     @viewport3.color.set(0, 0, 0, 0)
  161.   end
  162.   #
  163.   def update_snap_minimap
  164.     update_tileset
  165.     update_tilemap
  166.     update_parallax
  167. #~     update_shadow
  168. #~     update_weather
  169. #~     update_pictures
  170. #~     update_timer
  171. #~     update_viewports
  172.   end
  173. end
  174.  
  175. class Sprite_MapCharacter < Sprite_Character
  176.   def update_other
  177.   end
  178.   def update_position
  179.   end
  180.   def setup_new_effect
  181.   end
  182.   def end_animation
  183.   end
  184.   def start_balloon
  185.   end
  186.   def dispose_balloon
  187.   end
  188.   def update_balloon
  189.   end
  190.   def end_balloon
  191.   end
  192. end
  193.  
  194. class Scene_Map
  195.   alias_method :sminimap_perform_transition, :create_spriteset
  196.   def create_spriteset#perform_transition
  197.     sminimap_perform_transition
  198.     create_mini_map
  199.   end
  200.   alias_method :minimap_terminate, :terminate
  201.   def terminate
  202.     minimap_terminate
  203.     @minimap.dispose
  204.   end
  205.   alias_method :sminimap_post_transfer, :post_transfer
  206.   def post_transfer
  207.     create_mini_map
  208.     sminimap_post_transfer
  209.   end
  210.   def create_mini_map
  211.     t = Graphics.brightness
  212.     Graphics.brightness = 255
  213.     c = @viewport.color
  214.     @viewport.color = Color.new
  215.  
  216.     if @map_name_window && !@map_name_window.disposed?
  217.       v = @map_name_window.visible
  218.       @map_name_window.visible = false
  219.     end
  220.  
  221.  
  222.     @minimap.dispose if @minimap
  223.     @minimap = Window_MiniMap.new(@spriteset.viewport1)
  224.  
  225.     Graphics.brightness = t
  226.     @viewport.color = c
  227.     if @map_name_window && !@map_name_window.disposed?
  228.       @map_name_window.visible = v
  229.     end
  230.   end
  231. end


引自:
https://rpg.blue/thread-333550-1-1.html

第13个
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-16 03:39

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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