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

Project1

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

[已经过期] minimap Z坐标囧问题

 关闭 [复制链接]

Lv1.梦旅人

星辰创始

梦石
0
星屑
65
在线时间
155 小时
注册时间
2008-3-8
帖子
611
跳转到指定楼层
1
发表于 2011-4-20 20:07:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
于是纠结很久了,经过八云酱,灵姬酱等人的帮忙
最终就沦为目前的情况……移动时,事件位置不是平滑显示
而是弹跳式的,求解决……

拿脚本看效果
  1. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
  2. #_/    ◆ ミニマップ - KGC_MiniMap ◆ VX ◆
  3. #_/    ◇ Last update : 2009/09/13 ◇
  4. #_/----------------------------------------------------------------------------
  5. #_/  ミニマップ表示機能を追加します。
  6. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

  7. #==============================================================================
  8. # ★ カスタマイズ項目 - Customize ★
  9. #==============================================================================

  10. module KGC
  11. module MiniMap
  12.   # ◆ ミニマップ表示 ON/OFF を切り替えるスイッチ ID
  13.   MINIMAP_SWITCH_ID = 60

  14.   # ◆ ミニマップ表示位置?サイズ (X, Y, 幅, 高さ)
  15.   MAP_RECT = Rect.new(364, 20, 160, 120)
  16.   #显示高度坐标
  17.   MAP_Z = 49
  18.   #地图显示缩放大小
  19.   GRID_SIZE = 5

  20.   # ◆ ミニマップ前景色(通行可)
  21.   FOREGROUND_COLOR = Color.new(224, 224, 255, 162)
  22.   # ◆ ミニマップ背景色(通行不可)
  23.   BACKGROUND_COLOR = Color.new(-255, -255, -255, 192)

  24.   # ◆ 現在位置アイコンの色
  25.   POSITION_COLOR   = Color.new(255, 255, 255, 192)
  26.   # ◆ マップ移動イベント [MOVE] の色
  27.   MOVE_EVENT_COLOR = Color.new(255, 160, 0, 192)

  28.   # ◆ オブジェクトの色
  29.   #  要素の先頭から順に [OBJ1], [OBJ2], ... に対応。
  30.   OBJECT_COLOR = [
  31.      Color.new(  0, 160,   0, 192),  # [OBJ 1]
  32.     Color.new(  0, 160, 160, 192),  # [OBJ 2]
  33.     Color.new(160,   0, 160, 192),  # [OBJ 3]
  34.   ]  # ← この ] は消さないこと!

  35.   # ◆ アイコンの点滅の強さ
  36.   #  5 ~ 8 あたりを推奨。
  37.   BLINK_LEVEL = 7

  38.   # ◆ マップのキャッシュ数
  39.   #  この数を超えると、長期間参照していないものから削除。
  40.   CACHE_NUM = 10
  41. end
  42. end

  43. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  44. $imported = {} if $imported == nil
  45. $imported["MiniMap"] = true

  46. if $data_mapinfos == nil
  47.   $data_mapinfos = load_data("Data/MapInfos.rvdata")
  48. end

  49. module KGC::MiniMap
  50.   module Regexp
  51.     # ミニマップ非表示
  52.     NO_MINIMAP = /\[NOMAP\]/i
  53.     # 障害物
  54.     WALL_EVENT = /\[WALL\]/i
  55.     # 移動イベント
  56.     MOVE_EVENT = /\[MOVE\]/i
  57.     # オブジェクト
  58.     OBJECT = /\[OBJ(?:ECT)?\s*(\d)\]/i
  59.   end
  60. end

  61. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  62. #==============================================================================
  63. # □ KGC::Commands
  64. #==============================================================================

  65. module KGC
  66. module Commands
  67.   module_function
  68.   #--------------------------------------------------------------------------
  69.   # ○ ミニマップを表示
  70.   #--------------------------------------------------------------------------
  71.   def show_minimap
  72.     $game_system.minimap_show = true
  73.   end
  74.   #--------------------------------------------------------------------------
  75.   # ○ ミニマップを隠す
  76.   #--------------------------------------------------------------------------
  77.   def hide_minimap
  78.     $game_system.minimap_show = false
  79.   end
  80.   #--------------------------------------------------------------------------
  81.   # ○ ミニマップをリフレッシュ
  82.   #--------------------------------------------------------------------------
  83.   def refresh_minimap
  84.     return unless $scene.is_a?(Scene_Map)

  85.     $game_map.refresh if $game_map.need_refresh
  86.     $scene.refresh_minimap
  87.   end
  88.   #--------------------------------------------------------------------------
  89.   # ○ ミニマップのオブジェクトを更新
  90.   #--------------------------------------------------------------------------
  91.   def update_minimap_object
  92.     return unless $scene.is_a?(Scene_Map)

  93.     $game_map.refresh if $game_map.need_refresh
  94.     $scene.update_minimap_object
  95.   end
  96. end
  97. end

  98. class Game_Interpreter
  99.   include KGC::Commands
  100. end

  101. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  102. #==============================================================================
  103. # ■ RPG::MapInfo
  104. #==============================================================================

  105. class RPG::MapInfo
  106.   #--------------------------------------------------------------------------
  107.   # ● マップ名取得
  108.   #--------------------------------------------------------------------------
  109.   def name
  110.     return @name.gsub(/\[.*\]/) { "" }
  111.   end
  112.   #--------------------------------------------------------------------------
  113.   # ○ オリジナルマップ名取得
  114.   #--------------------------------------------------------------------------
  115.   def original_name
  116.     return @name
  117.   end
  118.   #--------------------------------------------------------------------------
  119.   # ○ ミニマップのキャッシュ生成
  120.   #--------------------------------------------------------------------------
  121.   def create_minimap_cache
  122.     @__minimap_show = !(@name =~ KGC::MiniMap::Regexp::NO_MINIMAP)
  123.   end
  124.   #--------------------------------------------------------------------------
  125.   # ○ ミニマップ表示
  126.   #--------------------------------------------------------------------------
  127.   def minimap_show?
  128.     create_minimap_cache if @__minimap_show == nil
  129.     return @__minimap_show
  130.   end
  131. end

  132. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  133. #==============================================================================
  134. # ■ Game_System
  135. #==============================================================================

  136. class Game_System
  137.   #--------------------------------------------------------------------------
  138.   # ○ ミニマップ表示フラグ取得
  139.   #--------------------------------------------------------------------------
  140.   def minimap_show
  141.     return $game_switches[KGC::MiniMap::MINIMAP_SWITCH_ID]
  142.   end
  143.   #--------------------------------------------------------------------------
  144.   # ○ ミニマップ表示フラグ変更
  145.   #--------------------------------------------------------------------------
  146.   def minimap_show=(value)
  147.     $game_switches[KGC::MiniMap::MINIMAP_SWITCH_ID] = value
  148.     $game_map.need_refresh = true
  149.   end
  150. end

  151. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  152. #==============================================================================
  153. # ■ Game_Map
  154. #==============================================================================

  155. class Game_Map
  156.   #--------------------------------------------------------------------------
  157.   # ○ ミニマップを表示するか
  158.   #--------------------------------------------------------------------------
  159.   def minimap_show?
  160.     return $data_mapinfos[map_id].minimap_show?
  161.   end
  162. end

  163. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  164. #==============================================================================
  165. # ■ Game_Event
  166. #==============================================================================

  167. class Game_Event < Game_Character
  168.   #--------------------------------------------------------------------------
  169.   # ○ グラフィックがあるか
  170.   #--------------------------------------------------------------------------
  171.   def graphic_exist?
  172.     return (character_name != "" || tile_id > 0)
  173.   end
  174.   #--------------------------------------------------------------------------
  175.   # ○ 障害物か
  176.   #--------------------------------------------------------------------------
  177.   def is_minimap_wall_event?
  178.     return (@event.name =~ KGC::MiniMap::Regexp::WALL_EVENT)
  179.   end
  180.   #--------------------------------------------------------------------------
  181.   # ○ 移動イベントか
  182.   #--------------------------------------------------------------------------
  183.   def is_minimap_move_event?
  184.     return (@event.name =~ KGC::MiniMap::Regexp::MOVE_EVENT)
  185.   end
  186.   #--------------------------------------------------------------------------
  187.   # ○ ミニマップオブジェクトか
  188.   #--------------------------------------------------------------------------
  189.   def is_minimap_object?
  190.     return (@event.name =~ KGC::MiniMap::Regexp::OBJECT)
  191.   end
  192.   #--------------------------------------------------------------------------
  193.   # ○ ミニマップオブジェクトタイプ
  194.   #--------------------------------------------------------------------------
  195.   def minimap_object_type
  196.     if @event.name =~ KGC::MiniMap::Regexp::OBJECT
  197.       return $1.to_i
  198.     else
  199.       return 0
  200.     end
  201.   end
  202. end

  203. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  204. #==============================================================================
  205. # □ Game_MiniMap
  206. #------------------------------------------------------------------------------
  207. #   ミニマップを扱うクラスです。
  208. #==============================================================================

  209. class Game_MiniMap
  210.   #--------------------------------------------------------------------------
  211.   # ○ 構造体
  212.   #--------------------------------------------------------------------------
  213.   Point = Struct.new(:x, :y)
  214.   Size  = Struct.new(:width, :height)
  215.   PassageCache = Struct.new(:map_id, :table, :scan_table)
  216.   #--------------------------------------------------------------------------
  217.   # ○ クラス変数
  218.   #--------------------------------------------------------------------------
  219.   @@passage_cache = []  # 通行フラグテーブルキャッシュ
  220.   #--------------------------------------------------------------------------
  221.   # ● オブジェクト初期化
  222.   #--------------------------------------------------------------------------
  223.   def initialize(tilemap)
  224.     @map_rect  = KGC::MiniMap::MAP_RECT
  225.     @grid_size = [KGC::MiniMap::GRID_SIZE, 1].max

  226.     @x = 0
  227.     @y = 0
  228.     @grid_num = Point.new(
  229.       (@map_rect.width  + @grid_size - 1) / @grid_size,
  230.       (@map_rect.height + @grid_size - 1) / @grid_size
  231.     )
  232.     @draw_grid_num    = Point.new(@grid_num.x + 2, @grid_num.y + 2)
  233.     @draw_range_begin = Point.new(0, 0)
  234.     @draw_range_end   = Point.new(0, 0)
  235.     @tilemap = tilemap

  236.     @last_x = $game_player.x
  237.     @last_y = $game_player.y

  238.     create_sprites
  239.     refresh
  240.   end
  241.   #--------------------------------------------------------------------------
  242.   # ○ スプライト作成
  243.   #--------------------------------------------------------------------------
  244.   def create_sprites
  245.     @viewport   = Viewport.new(@map_rect)
  246.     @viewport.z = KGC::MiniMap::MAP_Z

  247.     # ビットマップサイズ計算
  248.     @bmp_size = Size.new(
  249.       (@grid_num.x + 2) * @grid_size,
  250.       (@grid_num.y + 2) * @grid_size
  251.     )
  252.     @buf_bitmap = Bitmap.new(@bmp_size.width, @bmp_size.height)

  253.     # マップ用スプライト作成
  254.     @map_sprite   = Sprite.new(@viewport)
  255.     @map_sprite.x = -@grid_size
  256.     @map_sprite.y = -@grid_size
  257.     @map_sprite.z = 0
  258.     @map_sprite.bitmap = Bitmap.new(@bmp_size.width, @bmp_size.height)

  259.     # オブジェクト用スプライト作成
  260.     @object_sprite   = Sprite_MiniMapIcon.new
  261.     @object_sprite.x = @viewport.rect.x-@grid_size
  262.     @object_sprite.y = @viewport.rect.y-@grid_size
  263.     @object_sprite.z = @viewport.z + 2
  264.     @object_sprite.bitmap = Bitmap.new(@bmp_size.width, @bmp_size.height)

  265.     # 現在位置スプライト作成
  266.     @position_sprite   = Sprite_MiniMapIcon.new
  267.     @position_sprite.x = @map_rect.x + @grid_num.x / 2 * @grid_size
  268.     @position_sprite.y = @map_rect.y + @grid_num.y / 2 * @grid_size
  269.     @position_sprite.z = @viewport.z + 2
  270.     bitmap = Bitmap.new(@grid_size, @grid_size)
  271.     bitmap.fill_rect(bitmap.rect, KGC::MiniMap::POSITION_COLOR)
  272.     @position_sprite.bitmap = bitmap
  273.   end


  274.   #--------------------------------------------------------------------------
  275.   # ● 解放
  276.   #--------------------------------------------------------------------------
  277.   def dispose
  278.     @buf_bitmap.dispose
  279.     @map_sprite.bitmap.dispose
  280.     @map_sprite.dispose
  281.     @object_sprite.bitmap.dispose
  282.     @object_sprite.dispose
  283.     @position_sprite.bitmap.dispose
  284.     @position_sprite.dispose
  285.     @viewport.dispose
  286.   end
  287.   #--------------------------------------------------------------------------
  288.   # ○ 可視状態取得
  289.   #--------------------------------------------------------------------------
  290.   def visible
  291.     return @map_sprite.visible
  292.   end
  293.   #--------------------------------------------------------------------------
  294.   # ○ 可視状態設定
  295.   #--------------------------------------------------------------------------
  296.   def visible=(value)
  297.     @viewport.visible        = value
  298.     @map_sprite.visible      = value
  299.     @object_sprite.visible   = value
  300.     @position_sprite.visible = value
  301.   end
  302.   #--------------------------------------------------------------------------
  303.   # ○ リフレッシュ
  304.   #--------------------------------------------------------------------------
  305.   def refresh
  306.     update_draw_range
  307.     update_passage_table
  308.     update_object_list
  309.     update_position
  310.     draw_map
  311.     draw_object
  312.     Graphics.frame_reset
  313.   end
  314.   #--------------------------------------------------------------------------
  315.   # ○ 描画範囲更新
  316.   #--------------------------------------------------------------------------
  317.   def update_draw_range
  318.     range = []
  319.     (2).times { |i| range[i] = @draw_grid_num[i] / 2 }

  320.     @draw_range_begin.x = $game_player.x - range[0]
  321.     @draw_range_begin.y = $game_player.y - range[1]
  322.     @draw_range_end.x   = $game_player.x + range[0]
  323.     @draw_range_end.y   = $game_player.y + range[1]
  324.   end
  325.   #--------------------------------------------------------------------------
  326.   # ○ 通行可否テーブル更新
  327.   #--------------------------------------------------------------------------
  328.   def update_passage_table
  329.     cache = get_passage_table_cache
  330.     @passage_table      = cache.table
  331.     @passage_scan_table = cache.scan_table

  332.     update_around_passage
  333.   end
  334.   #--------------------------------------------------------------------------
  335.   # ○ 通行可否テーブルのキャッシュを取得
  336.   #--------------------------------------------------------------------------
  337.   def get_passage_table_cache
  338.     map_id = $game_map.map_id
  339.     cache  = @@passage_cache.find { |c| c.map_id == map_id }
  340.     if cache == nil
  341.       # キャッシュミス
  342.       cache = PassageCache.new(map_id)
  343.       cache.table      = Table.new($game_map.width, $game_map.height)
  344.       cache.scan_table = Table.new(
  345.         ($game_map.width  + @draw_grid_num.x - 1) / @draw_grid_num.x,
  346.         ($game_map.height + @draw_grid_num.y - 1) / @draw_grid_num.y
  347.       )
  348.     end

  349.     # 直近のキャッシュは先頭、古いキャッシュは削除
  350.     @@passage_cache.unshift(cache)
  351.     @@passage_cache.delete_at(KGC::MiniMap::CACHE_NUM)

  352.     return cache
  353.   end
  354.   #--------------------------------------------------------------------------
  355.   # ○ 通行可否テーブルのキャッシュをクリア
  356.   #--------------------------------------------------------------------------
  357.   def clear_passage_table_cache
  358.     return if @passage_scan_table == nil

  359.     table = @passage_scan_table
  360.     @passage_scan_table = Table.new(table.xsize, table.ysize)
  361.   end
  362.   #--------------------------------------------------------------------------
  363.   # ○ 通行可否テーブルの探索
  364.   #     x, y : 探索位置
  365.   #--------------------------------------------------------------------------
  366.   def scan_passage(x, y)
  367.     dx = x / @draw_grid_num.x
  368.     dy = y / @draw_grid_num.y

  369.     return if @passage_scan_table[dx, dy] == 1
  370.     return unless dx.between?(0, @passage_scan_table.xsize - 1)
  371.     return unless dy.between?(0, @passage_scan_table.ysize - 1)

  372.     rx = (dx * @draw_grid_num.x)...((dx + 1) * @draw_grid_num.x)
  373.     ry = (dy * @draw_grid_num.y)...((dy + 1) * @draw_grid_num.y)
  374.     mw = $game_map.width  - 1
  375.     mh = $game_map.height - 1
  376.     rx.each { |x|
  377.       next unless x.between?(0, mw)
  378.       ry.each { |y|
  379.         next unless y.between?(0, mh)
  380.         @passage_table[x, y] = ($game_map.passable?(x, y) ? 1 : 0)
  381.       }
  382.     }
  383.     @passage_scan_table[dx, dy] = 1
  384.   end
  385.   #--------------------------------------------------------------------------
  386.   # ○ 周辺の通行可否テーブル更新
  387.   #--------------------------------------------------------------------------
  388.   def update_around_passage
  389.     gx = @draw_grid_num.x
  390.     gy = @draw_grid_num.y
  391.     dx = $game_player.x - gx / 2
  392.     dy = $game_player.y - gy / 2
  393.     scan_passage(dx,      dy)
  394.     scan_passage(dx + gx, dy)
  395.     scan_passage(dx,      dy + gy)
  396.     scan_passage(dx + gx, dy + gy)
  397.   end
  398.   #--------------------------------------------------------------------------
  399.   # ○ オブジェクト一覧更新
  400.   #--------------------------------------------------------------------------
  401.   def update_object_list
  402.     events = $game_map.events.values

  403.     # WALL
  404.     @wall_events = events.find_all { |e|
  405.       e.graphic_exist? && e.is_minimap_wall_event?
  406.     }

  407.     # MOVE
  408.     @move_events = events.find_all { |e|
  409.       e.graphic_exist? && e.is_minimap_move_event?
  410.     }

  411.     # OBJ
  412.     @object_list = []
  413.     events.each { |e|
  414.       next unless e.graphic_exist?
  415.       next unless e.is_minimap_object?

  416.       type = e.minimap_object_type
  417.       if @object_list[type] == nil
  418.         @object_list[type] = []
  419.       end
  420.       @object_list[type] << e
  421.     }
  422.   end
  423.   #--------------------------------------------------------------------------
  424.   # ○ 位置更新
  425.   #--------------------------------------------------------------------------
  426.   def update_position
  427.     pt = Point.new($game_player.x, $game_player.y)
  428.     dx = ($game_player.real_x - pt.x * 256) * @grid_size / 256
  429.     dy = ($game_player.real_y - pt.y * 256) * @grid_size / 256
  430.     ox = dx % @grid_size
  431.     oy = dy % @grid_size
  432.     ox = -(@grid_size - ox) if dx < 0
  433.     oy = -(@grid_size - oy) if dy < 0
  434.     @viewport.ox = ox
  435.     @viewport.oy = oy
  436.     if pt.x != @last_x || pt.y != @last_y
  437.       draw_map
  438.       @last_x = pt.x
  439.       @last_y = pt.y
  440.     end
  441.   end
  442.   #--------------------------------------------------------------------------
  443.   # ○ 描画範囲内判定
  444.   #--------------------------------------------------------------------------
  445.   def in_draw_range?(x, y)
  446.     rb = @draw_range_begin
  447.     re = @draw_range_end
  448.     return (x.between?(rb.x, re.x) && y.between?(rb.y, re.y))
  449.   end
  450.   #--------------------------------------------------------------------------
  451.   # ○ マップ範囲内判定
  452.   #--------------------------------------------------------------------------
  453.   def in_map_range?(x, y)
  454.     mw = $game_map.width
  455.     mh = $game_map.height
  456.     return (x.between?(0, mw - 1) && y.between?(0, mh - 1))
  457.   end
  458.   #--------------------------------------------------------------------------
  459.   # ○ マップ描画
  460.   #     dir : 追加位置 (0 で全体)
  461.   #--------------------------------------------------------------------------
  462.   def draw_map(dir = 0)
  463.     bitmap  = @map_sprite.bitmap
  464.     bitmap.fill_rect(bitmap.rect, KGC::MiniMap::BACKGROUND_COLOR)

  465.     rect = Rect.new(0, 0, @grid_size, @grid_size)

  466.     range_x = (@draw_range_begin.x)..(@draw_range_end.x)
  467.     range_y = (@draw_range_begin.y)..(@draw_range_end.y)
  468.     mw = $game_map.width  - 1
  469.     mh = $game_map.height - 1
  470.     update_around_passage

  471.     # 通行可能領域描画
  472.     range_x.each { |x|
  473.       next unless x.between?(0, mw)
  474.       range_y.each { |y|
  475.         next unless y.between?(0, mh)
  476.         next if @passage_table[x, y] == 0
  477.         next if @wall_events.find { |e| e.x == x && e.y == y }  # 壁

  478.         rect.x = (x - @draw_range_begin.x) * @grid_size
  479.         rect.y = (y - @draw_range_begin.y) * @grid_size
  480.         bitmap.fill_rect(rect, KGC::MiniMap::FOREGROUND_COLOR)
  481.       }
  482.     }

  483.     # MOVE
  484.     @move_events.each { |e|
  485.       rect.x = (e.x - @draw_range_begin.x) * @grid_size
  486.       rect.y = (e.y - @draw_range_begin.y) * @grid_size
  487.       bitmap.fill_rect(rect, KGC::MiniMap::MOVE_EVENT_COLOR)
  488.     }
  489.   end
  490.   #--------------------------------------------------------------------------
  491.   # ○ オブジェクト描画
  492.   #--------------------------------------------------------------------------
  493.   def draw_object
  494.     # 下準備
  495.     bitmap = @object_sprite.bitmap
  496.     bitmap.clear
  497.     rect = Rect.new(0, 0, @grid_size, @grid_size)

  498.     # オブジェクト描画
  499.     @object_list.each_with_index { |list, i|
  500.       color = KGC::MiniMap::OBJECT_COLOR[i - 1]
  501.       next if list.nil? || color.nil?

  502.       list.each { |obj|
  503.         next unless in_draw_range?(obj.x, obj.y)

  504.         rect.x = (obj.real_x - @draw_range_begin.x * 256) * @grid_size / 256
  505.         rect.y = (obj.real_y - @draw_range_begin.y * 256) * @grid_size / 256
  506.         bitmap.fill_rect(rect, color)
  507.       }
  508.     }
  509.   end
  510.   #--------------------------------------------------------------------------
  511.   # ○ 更新
  512.   #--------------------------------------------------------------------------
  513.   def update
  514.     return unless @map_sprite.visible

  515.     update_draw_range
  516.     update_position
  517.     draw_object
  518.     @map_sprite.update
  519.     @object_sprite.update
  520.     @position_sprite.update
  521.   end
  522. end

  523. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  524. #==============================================================================
  525. # □ Sprite_MiniMapIcon
  526. #------------------------------------------------------------------------------
  527. #   ミニマップ用アイコンのクラスです。
  528. #==============================================================================

  529. class Sprite_MiniMapIcon < Sprite
  530.   DURATION_MAX = 60
  531.   #--------------------------------------------------------------------------
  532.   # ● オブジェクト初期化
  533.   #     viewport : ビューポート
  534.   #--------------------------------------------------------------------------
  535.   def initialize(viewport = nil)
  536.     super(viewport)
  537.     @duration = DURATION_MAX / 2
  538.   end
  539.   #--------------------------------------------------------------------------
  540.   # ● フレーム更新
  541.   #--------------------------------------------------------------------------
  542.   def update
  543.     super
  544.     @duration += 1
  545.     if @duration == DURATION_MAX
  546.       @duration = 0
  547.     end
  548.     update_effect
  549.   end
  550.   #--------------------------------------------------------------------------
  551.   # ○ エフェクトの更新
  552.   #--------------------------------------------------------------------------
  553.   def update_effect
  554.     self.color.set(255, 255, 255,
  555.       (@duration - DURATION_MAX / 2).abs * KGC::MiniMap::BLINK_LEVEL
  556.     )
  557.   end
  558. end

  559. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  560. #==============================================================================
  561. # ■ Spriteset_Map
  562. #==============================================================================

  563. class Spriteset_Map
  564.   attr_reader :minimap
  565.   #--------------------------------------------------------------------------
  566.   # ● オブジェクト初期化
  567.   #--------------------------------------------------------------------------
  568.   alias initialize_KGC_MiniMap initialize
  569.   def initialize
  570.     initialize_KGC_MiniMap

  571.     create_minimap
  572.   end
  573.   #--------------------------------------------------------------------------
  574.   # ○ ミニマップ作成
  575.   #--------------------------------------------------------------------------
  576.   def create_minimap
  577.     return unless $game_map.minimap_show?

  578.     @minimap = Game_MiniMap.new(@tilemap)
  579.     @minimap.visible = $game_system.minimap_show
  580.   end
  581.   #--------------------------------------------------------------------------
  582.   # ● 解放
  583.   #--------------------------------------------------------------------------
  584.   alias dispose_KGC_MiniMap dispose
  585.   def dispose
  586.     dispose_KGC_MiniMap

  587.     dispose_minimap
  588.   end
  589.   #--------------------------------------------------------------------------
  590.   # ○ ミニマップ解放
  591.   #--------------------------------------------------------------------------
  592.   def dispose_minimap
  593.     @minimap.dispose unless @minimap.nil?
  594.   end
  595.   #--------------------------------------------------------------------------
  596.   # ● フレーム更新
  597.   #--------------------------------------------------------------------------
  598.   alias update_KGC_MiniMap update
  599.   def update
  600.     update_KGC_MiniMap

  601.     update_minimap
  602.   end
  603.   #--------------------------------------------------------------------------
  604.   # ○ ミニマップ更新
  605.   #--------------------------------------------------------------------------
  606.   def update_minimap
  607.     return if @minimap.nil?

  608.     if $game_system.minimap_show
  609.       @minimap.visible = true
  610.       @minimap.update
  611.     else
  612.       @minimap.visible = false
  613.     end
  614.   end
  615.   #--------------------------------------------------------------------------
  616.   # ○ ミニマップ全体をリフレッシュ
  617.   #--------------------------------------------------------------------------
  618.   def refresh_minimap
  619.     return if @minimap.nil?

  620.     @minimap.clear_passage_table_cache
  621.     @minimap.refresh
  622.   end
  623.   #--------------------------------------------------------------------------
  624.   # ○ ミニマップのオブジェクトを更新
  625.   #--------------------------------------------------------------------------
  626.   def update_minimap_object
  627.     @minimap.update_object_list unless @minimap.nil?
  628.   end
  629. end

  630. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  631. #==============================================================================
  632. # ■ Scene_Map
  633. #==============================================================================

  634. class Scene_Map
  635.   #--------------------------------------------------------------------------
  636.   # ○ ミニマップ全体をリフレッシュ
  637.   #--------------------------------------------------------------------------
  638.   def refresh_minimap
  639.     @spriteset.refresh_minimap
  640.   end
  641.   #--------------------------------------------------------------------------
  642.   # ○ ミニマップのオブジェクトを更新
  643.   #--------------------------------------------------------------------------
  644.   def update_minimap_object
  645.     @spriteset.update_minimap_object
  646.   end
  647. end
复制代码

Lv1.梦旅人

梦石
0
星屑
50
在线时间
176 小时
注册时间
2011-1-26
帖子
131
2
发表于 2011-4-21 12:44:54 | 只看该作者
回复 星辰天羽 的帖子

试试把脚本中的$game_player.x都改成$game_player.screen_x,$game_player.y都改成$game_player.screen_y
上次我让图片跟着角色走用$game_player.x定坐标也是一跳跳的,用$game_player.screen_x定坐标就没问题了
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-11 20:43

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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