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

Project1

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

[已经解决] 请问大神怎么制作【查看大地图】的技能 【已解决】

[复制链接]

Lv2.观梦者

梦石
0
星屑
878
在线时间
576 小时
注册时间
2010-6-26
帖子
793
跳转到指定楼层
1
发表于 2017-4-9 10:23:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 sq333333 于 2017-4-10 10:19 编辑

这个技能可以显示大地图的缩小图,并且用亮点标明主角在大地图中的所在位置。
没有头绪啊,感觉很麻烦

Lv4.逐梦者

梦石
0
星屑
6260
在线时间
1481 小时
注册时间
2015-7-25
帖子
652

开拓者

2
发表于 2017-4-9 15:26:54 | 只看该作者
首先,使用木星ペンギン大大的脚本
RUBY 代码复制
  1. =begin
  2.  
  3.  ▼ 簡易マップ表示 ver. 1.5
  4.  
  5.  RPGツクールVXAce用スクリプト
  6.  
  7.  制作 : 木星ペンギン
  8.  URL  : [url=http://woodpenguin.blog.fc2.com/]http://woodpenguin.blog.fc2.com/[/url]
  9.  
  10. ------------------------------------------------------------------------------
  11.  概要
  12.  
  13.  □ 簡易マップを画面に表示させます。
  14.  
  15.  □ 乗り物擬似3D化と併用する場合、こちらのスクリプトを下にしてください。
  16.  
  17. ------------------------------------------------------------------------------
  18.  各タイプの説明
  19.  
  20.  □ タイプ 1
  21.   ・プレイヤーの周辺を表示するタイプ。表示範囲は四角形。
  22.  
  23.  □ タイプ 2
  24.   ・指定した範囲に収まるように縮小された全体マップを表示するタイプ。
  25.  
  26.  □ タイプ 3
  27.   ・プレイヤーの周辺を表示するタイプ。表示範囲は円形。若干処理重め。
  28.   ・<マップ側回転フラグ>はさらに重くなるので注意。
  29.   ・<マップ側回転フラグ>を使用する場合は、高さと幅を同じにしてください。
  30.  
  31. =end
  32.  
  33. #//////////////////////////////////////////////////////////////////////////////
  34. #
  35. # 設定項目
  36. #
  37. #//////////////////////////////////////////////////////////////////////////////
  38. module WdTk
  39. module SimpMap
  40.   #--------------------------------------------------------------------------
  41.   # ● 画像を参照するフォルダ名
  42.   #--------------------------------------------------------------------------
  43.   DirName = "Graphics/System/"
  44.  
  45.   #--------------------------------------------------------------------------
  46.   # ● 使用するマップ画像
  47.   #     マップ ID をキーとして、マップ画像のファイル名を指定してください。
  48.   #     マップ画像名を "" (空の文字列) にした場合は自動生成されます。
  49.   #     設定していないマップでは、簡易マップは標示されません。
  50.   #--------------------------------------------------------------------------
  51.   Map = {1 => "MAP001.png", 3 => "", 4 => "", 5 => "", 6 => ""}
  52.  
  53.   #--------------------------------------------------------------------------
  54.   # ● 使用する変数 ID
  55.   #     この変数の値で簡易マップの表示タイプを変えることが出来ます。
  56.   #     変数の値が 0 で非表示。他は各設定を参照。
  57.   #--------------------------------------------------------------------------
  58.   VariableID = 1
  59.  
  60.   #--------------------------------------------------------------------------
  61.   # ● 基本設定
  62.   #     変数に入っている数値をキーとして、各パラメータを設定します。
  63.   #--------------------------------------------------------------------------
  64.   Data = {}
  65.   Data[0] = nil  # 非表示
  66.  
  67.   # 変数の値が 1 の場合 (タイプ 1 サンプル)
  68.   params = {}
  69.   params[:type]    = 1           # タイプ
  70.   params[:width]   = 128         # 幅
  71.   params[:height]  = 96          # 高さ
  72.   params[:x]       = Graphics.width - params[:width] - 16   # X 座標
  73.   params[:y]       = Graphics.height - params[:height] - 16 # Y 座標
  74.   params[:opacity] = 200         # 不透明度
  75.   params[:zoom]    = 1.0         # 拡大率
  76.   params[:frame]   = ""          # フレームの画像ファイル名
  77.   Data[1] = params               # 1 に設定
  78.  
  79.   # 変数の値が 2 の場合 (タイプ 2 サンプル)
  80.   params = {}
  81.   params[:type]    = 2           # タイプ
  82.   params[:x]       = 16          # X 座標
  83.   params[:y]       = 16          # Y 座標
  84.   params[:width]   = Graphics.width - params[:x] * 2  # 幅
  85.   params[:height]  = Graphics.height - params[:y] * 2 # 高さ
  86.   params[:opacity] = 224         # 不透明度
  87.   params[:frame]   = ""          # フレームの画像ファイル名
  88.   Data[2] = params               # 2 に設定
  89.  
  90.   # 変数の値が 3 の場合 (タイプ 3 サンプル)
  91.   params = {}
  92.   params[:type]    = 3           # タイプ
  93.   params[:width]   = 128         # 幅
  94.   params[:height]  = 128         # 高さ
  95.   params[:x]       = Graphics.width - params[:width] / 2 - 16   # X 座標
  96.   params[:y]       = Graphics.height - params[:height] / 2 - 16 # Y 座標
  97.   params[:opacity] = 200         # 不透明度
  98.   params[:zoom]    = 1.0         # 拡大率
  99.   params[:turnmap] = true       # マップ回転フラグ(乗り物擬似3D化中のみ)
  100.   params[:frame]   = "map_frame.png"          # フレームの画像ファイル名
  101.   Data[3] = params               # 3 に設定
  102.  
  103.   #--------------------------------------------------------------------------
  104.   # ● マーカー設定
  105.   #     配列に以下の順で設定してください。
  106.   #
  107.   #     画像ファイル名    => 空の文字列("")の場合、自動生成されます。
  108.   #     Y 軸原点位置      => 基準となる位置。(0 : 上 / 1 : 中心 / 2 : 下)
  109.   #     Y 軸原点補正値    => 基準となる位置からの補正値。
  110.   #--------------------------------------------------------------------------
  111.   Player    = ""           # プレイヤーの画像ファイル名
  112.   PlyOrPos  = 1            # プレイヤー画像の Y 軸原点位置
  113.   PlyOrPlus = 0            # プレイヤー画像の Y 軸原点補正値
  114.   TurnPly   = false        # プレイヤーの向きにあわせて画像を回転させるかどうか
  115.  
  116.   Vehicle   = ""           # 乗り物搭乗時の画像ファイル名
  117.   VehOrPos  = 2            # 乗り物画像の Y 軸原点位置
  118.   VehOrPlus = -2           # 乗り物画像の Y 軸原点補正値
  119.   TurnVeh   = true         # 乗り物の向きにあわせて画像を回転させるかどうか
  120.  
  121.   #--------------------------------------------------------------------------
  122.   # ● マーカー自動生成用の設定
  123.   #--------------------------------------------------------------------------
  124.   Radius = 2.0             # マーカーの半径
  125.  
  126.   #--------------------------------------------------------------------------
  127.   # ● マップ自動生成用の設定
  128.   #--------------------------------------------------------------------------
  129.   # タイルの色
  130.   Land = Color.new(192, 192, 192)      # 陸地
  131.   Sea  = Color.new(  0,   0,   0, 128) # 深海
  132.   Ford = Color.new( 64,  64,  64, 192) # 浅瀬・沼
  133.   Mtn  = Color.new( 96,  96,  96)      # 高い山
  134.   Hill = Color.new(128, 128, 128)      # 低い山
  135.   Fst  = Color.new(160, 160, 160)      # 森
  136.  
  137.   TileSize  = 4           # 1 タイルの大きさ
  138.   MapBlur   = true        # ぼかし処理
  139.   StartInit = false       # ゲーム起動時にマップ生成
  140.  
  141. #//////////////////////////////////////////////////////////////////////////////
  142. #
  143. # 以降、変更する必要なし
  144. #
  145. #//////////////////////////////////////////////////////////////////////////////
  146.  
  147.   def self.init
  148.     Data.each_value do |params|
  149.       next unless params && params[:type] == 3
  150.       params[:cal] = []
  151.       w = params[:width] / params[:zoom] / 2
  152.       h = params[:height] / params[:zoom] / 2
  153.       (h * 2).to_i.times do |i|
  154.         params[:cal] << (Math.sqrt(h ** 2 - (h - i - 0.5) ** 2) * w / h).to_i
  155.       end
  156.     end
  157.     return unless StartInit
  158.     Map.each do |map_id, name|
  159.       WdTk.save_simplemap(map_id, create_simplemap(map_id)) if name.empty?
  160.     end
  161.   end
  162.   def self.create_simplemap(map_id)
  163.     map = load_data(sprintf("Data/Map%03d.rvdata2", map_id))
  164.     bitmap = Bitmap.new(map.width * TileSize, map.height * TileSize)
  165.     map.width.times do |x|; map.height.times do |y|
  166.       index0 = (map.data[x, y, 0] - 2048) / 48
  167.       index1 = (map.data[x, y, 1] - 2048) / 48
  168.       if index0 < 16
  169.         color = (index1 == 1 ? Sea : Ford)
  170.       else
  171.         case index1
  172.         when 20,21,28,36,44; color = Fst
  173.         when 22,30,38,46;    color = Hill
  174.         when 23,31,39,47;    color = Mtn
  175.         else                 color = Land
  176.         end
  177.       end
  178.       bitmap.fill_rect(x * TileSize, y * TileSize, TileSize, TileSize, color)
  179.     end; end
  180.     bitmap.blur if MapBlur
  181.     bitmap
  182.   end
  183.  
  184. end
  185.  
  186.   [url=home.php?mod=space&uid=341345]@Cache[/url] ||= {}
  187.   def self.load_simplemap(map_id)
  188.     key = sprintf("SimpleMap/%03d", map_id)
  189.     @cache.delete(key) if @cache.include?(key) && @cache[key].disposed?
  190.     @cache[key] ||= SimpMap.create_simplemap(map_id)
  191.   end
  192.   def self.save_simplemap(map_id, bitmap)
  193.     key = sprintf("SimpleMap/%03d", map_id)
  194.     @cache[key] = bitmap
  195.   end
  196.   def self.delete_simplemap(map_id)
  197.     key = sprintf("SimpleMap/%03d", map_id)
  198.     @cache.delete(key)
  199.   end
  200.  
  201.   @material ||= []
  202.   @material << :SimpMap
  203.   def self.include?(sym)
  204.     @material.include?(sym)
  205.   end
  206.  
  207. end
  208.  
  209. #==============================================================================
  210. # ■ Bitmap
  211. #==============================================================================
  212. class Bitmap
  213.   #--------------------------------------------------------------------------
  214.   # ● 円の描写
  215.   #--------------------------------------------------------------------------
  216.   def draw_circle(x, y, radius, color)
  217.     r = radius.ceil
  218.     (x - r).upto(x + r) do |dx|
  219.       (y - r).upto(y + r) do |dy|
  220.         color.alpha = 192 * (radius + 0.5 - Math.hypot(x - dx - 0.5, y - dy - 0.5))
  221.         set_pixel(dx, dy, color)
  222.       end
  223.     end
  224.   end
  225. end
  226.  
  227. #==============================================================================
  228. # ■ DataManager
  229. #==============================================================================
  230. class << DataManager
  231.   #--------------------------------------------------------------------------
  232.   # ◯ モジュール初期化
  233.   #--------------------------------------------------------------------------
  234.   alias _wdtk_simpmap_init init
  235.   def init
  236.     _wdtk_simpmap_init
  237.     WdTk::SimpMap.init
  238.   end
  239. end
  240.  
  241. #==============================================================================
  242. # ■ Game_Player
  243. #==============================================================================
  244. class Game_Player
  245.   #--------------------------------------------------------------------------
  246.   # ● マーカーの色
  247.   #--------------------------------------------------------------------------
  248.   def mark_index
  249.     return 0
  250.   end
  251. end
  252.  
  253. #==============================================================================
  254. # ■ Game_Vehicle
  255. #==============================================================================
  256. class Game_Vehicle
  257.   #--------------------------------------------------------------------------
  258.   # ● マーカーの色
  259.   #--------------------------------------------------------------------------
  260.   def mark_index
  261.     return 6
  262.   end
  263. end
  264.  
  265. #==============================================================================
  266. # ■ Game_Event
  267. #==============================================================================
  268. class Game_Event
  269.   #--------------------------------------------------------------------------
  270.   # ● 公開インスタンス変数
  271.   #--------------------------------------------------------------------------
  272.   attr_reader   :mark_index
  273.   #--------------------------------------------------------------------------
  274.   # ◯ イベントページの設定をセットアップ
  275.   #--------------------------------------------------------------------------
  276.   alias _wdtk_simpmap_setup_page_settings setup_page_settings
  277.   def setup_page_settings
  278.     _wdtk_simpmap_setup_page_settings
  279.     clear_simpmap_params
  280.     setup_simpmap_params
  281.   end
  282.   #--------------------------------------------------------------------------
  283.   # ● イベント内容から設定をセットアップ
  284.   #--------------------------------------------------------------------------
  285.   def setup_simpmap_params
  286.     @list.each do |cmd|
  287.       case cmd.code
  288.       when 108,408
  289.         case cmd.parameters[0]
  290.         when /マーカー\s*[::]\s*(\d+)/
  291.           @mark_index = $1.to_i
  292.         end
  293.       else
  294.         return
  295.       end
  296.     end
  297.   end
  298.   #--------------------------------------------------------------------------
  299.   # ● イベント立体表示の設定をクリア
  300.   #--------------------------------------------------------------------------
  301.   def clear_simpmap_params
  302.     @mark_index = nil
  303.   end
  304. end
  305.  
  306. #==============================================================================
  307. # ■ Spriteset_SimpleMap
  308. #==============================================================================
  309. class Spriteset_SimpleMap
  310.   #--------------------------------------------------------------------------
  311.   # ● モジュール
  312.   #--------------------------------------------------------------------------
  313.   include WdTk::SimpMap
  314.   #--------------------------------------------------------------------------
  315.   # ● オブジェクト初期化
  316.   #--------------------------------------------------------------------------
  317.   def initialize
  318.     @update_count = 0
  319.     @marker_bitmaps = {}
  320.     @rect = Rect.new
  321.     create_simpmap
  322.     create_marker
  323.     create_player
  324.     create_frame
  325.     create_map_bitmap
  326.     update
  327.   end
  328.   #--------------------------------------------------------------------------
  329.   # ● 簡易マップの作成
  330.   #--------------------------------------------------------------------------
  331.   def create_simpmap
  332.     @simpmap_sprite = Sprite.new
  333.     @simpmap_sprite.z = 150
  334.   end
  335.   #--------------------------------------------------------------------------
  336.   # ● マーカーの作成
  337.   #--------------------------------------------------------------------------
  338.   def create_marker
  339.     @marker_sprite = Sprite.new
  340.     @marker_sprite.z = 151
  341.   end
  342.   #--------------------------------------------------------------------------
  343.   # ● プレイヤーの作成
  344.   #--------------------------------------------------------------------------
  345.   def create_player
  346.     @player_sprite = Sprite.new
  347.     @player_sprite.z = 152
  348.     if Player.empty?
  349.       i = $game_player.mark_index
  350.       @player_bitmap = make_marker(get_color(i), Radius)
  351.     else
  352.       @player_bitmap = Cache.load_bitmap(DirName, Player)
  353.     end
  354.     if !Vehicle.empty?
  355.       @vehicle_bitmap = Cache.load_bitmap(DirName, Vehicle)
  356.     elsif TurnVeh
  357.       i = $game_player.mark_index
  358.       @vehicle_bitmap = make_marker(get_color(i), Radius, 1)
  359.     else
  360.       @vehicle_bitmap = @player_bitmap
  361.     end
  362.   end
  363.   #--------------------------------------------------------------------------
  364.   # ● フレームの作成
  365.   #--------------------------------------------------------------------------
  366.   def create_frame
  367.     @frame_sprite = Sprite.new
  368.     @frame_sprite.z = 152
  369.   end
  370.   #--------------------------------------------------------------------------
  371.   # ● マップ画像の作成
  372.   #--------------------------------------------------------------------------
  373.   def create_map_bitmap
  374.     @loop_bitmap.dispose if @loop_bitmap
  375.     if !Map.include?($game_map.map_id)
  376.       @loop_bitmap = nil
  377.       return
  378.     elsif !Map[$game_map.map_id].empty?
  379.       map_bitmap = Cache.load_bitmap(DirName, Map[$game_map.map_id])
  380.     else
  381.       map_bitmap = WdTk.load_simplemap($game_map.map_id)
  382.     end
  383.     @map_width = map_bitmap.width
  384.     @map_height = map_bitmap.height
  385.     width = $game_map.loop_horizontal? ? @map_width * 2 : @map_width
  386.     height = $game_map.loop_vertical? ? @map_height * 2 : @map_height
  387.     @loop_bitmap = Bitmap.new(width, height)
  388.     @loop_bitmap.blt(0,           0, map_bitmap, map_bitmap.rect)
  389.     @loop_bitmap.blt(@map_width,  0, map_bitmap, map_bitmap.rect)
  390.     @loop_bitmap.blt(0, @map_height, @loop_bitmap, @loop_bitmap.rect)
  391.   end
  392.   #--------------------------------------------------------------------------
  393.   # ● 色の取得
  394.   #--------------------------------------------------------------------------
  395.   def get_color(index)
  396.     bitmap = Cache.system("Window")
  397.     bitmap.get_pixel(64 + (index % 8) * 8, 96 + (index / 8) * 8)
  398.   end
  399.   #--------------------------------------------------------------------------
  400.   # ● マーカー画像の取得
  401.   #--------------------------------------------------------------------------
  402.   def make_marker(color, radius, type=0)
  403.     r = radius.ceil
  404.     case type
  405.     when 0
  406.       bitmap = Bitmap.new(r * 2, r * 2)
  407.       bitmap.draw_circle(r, r, radius, color)
  408.     when 1
  409.       bitmap = Bitmap.new(r * 2, r * 4)
  410.       bitmap.draw_circle(r, r, radius / 2.0, color)
  411.       bitmap.draw_circle(r, r * 3, radius, color)
  412.     end
  413.     bitmap
  414.   end
  415.   #--------------------------------------------------------------------------
  416.   # ● 解放
  417.   #--------------------------------------------------------------------------
  418.   def dispose
  419.     @simpmap_sprite.dispose
  420.     @loop_bitmap.dispose if @loop_bitmap
  421.     @marker_sprite.bitmap.dispose if @marker_sprite.bitmap
  422.     @marker_sprite.dispose
  423.     @player_sprite.dispose
  424.     @frame_sprite.dispose
  425.     @player_bitmap.dispose
  426.     @vehicle_bitmap.dispose
  427.     @marker_bitmaps.each_value {|bitmap| bitmap.dispose }
  428.   end
  429.   #--------------------------------------------------------------------------
  430.   # ● ビューポートの設定
  431.   #--------------------------------------------------------------------------
  432.   def viewport=(v)
  433.     @simpmap_sprite.viewport = v
  434.     @marker_sprite.viewport = v
  435.     @player_sprite.viewport = v
  436.     @frame_sprite.viewport = v
  437.   end
  438.   #--------------------------------------------------------------------------
  439.   # ● セットアップ
  440.   #--------------------------------------------------------------------------
  441.   def setup
  442.     @simpmap_sprite.bitmap.dispose if @params && @params[:type] == 3
  443.     @marker_sprite.bitmap.dispose if @marker_sprite.bitmap
  444.     @params = (@loop_bitmap ? Data[@index] : nil)
  445.     case (@params ? @params[:type] : 0)
  446.     when 1 # 一部拡大四角表示
  447.       [url=home.php?mod=space&uid=98379]@zoom[/url] = @params[:zoom]
  448.       @rect.width = [@params[:width], @map_width * @zoom].min
  449.       @rect.height = [@params[:height], @map_height * @zoom].min
  450.       @rect.x = @params[:x] + (@params[:width] - @rect.width) / 2
  451.       @rect.y = @params[:y] + (@params[:height] - @rect.height) / 2
  452.       setup_square
  453.     when 2 # 全体表示
  454.       @zoom = [@params[:width].to_f / @map_width,
  455.                @params[:height].to_f / @map_height].min
  456.       @rect.width = @map_width * @zoom
  457.       @rect.height = @map_height * @zoom
  458.       @rect.x = @params[:x] + (@params[:width] - @rect.width) / 2
  459.       @rect.y = @params[:y] + (@params[:height] - @rect.height) / 2
  460.       setup_square
  461.     when 3 # 一部拡大円形表示
  462.       @zoom = @params[:zoom]
  463.       @rect.set(@params[:x], @params[:y], @params[:width], @params[:height])
  464.       setup_circle
  465.     else   # 表示しない
  466.       @simpmap_sprite.visible = @marker_sprite.visible =
  467.       @player_sprite.visible = @frame_sprite.visible = false
  468.       return
  469.     end
  470.     @update_count = 71
  471.   end
  472.   #--------------------------------------------------------------------------
  473.   # ● 共通のセットアップ
  474.   #--------------------------------------------------------------------------
  475.   def setup_base
  476.     @simpmap_sprite.visible = true
  477.     @simpmap_sprite.x = @rect.x
  478.     @simpmap_sprite.y = @rect.y
  479.     @simpmap_sprite.zoom_x = @simpmap_sprite.zoom_y = @zoom
  480.     @marker_sprite.visible = true
  481.     @marker_sprite.x = @rect.x
  482.     @marker_sprite.y = @rect.y
  483.     @player_sprite.visible = true
  484.     if @params[:frame] && !@params[:frame].empty?
  485.       @frame_sprite.visible = true
  486.       @frame_sprite.bitmap = Cache.load_bitmap(DirName, @params[:frame])
  487.     else
  488.       @frame_sprite.visible = false
  489.     end
  490.     @simpmap_sprite.opacity = @params[:opacity]
  491.   end
  492.   #--------------------------------------------------------------------------
  493.   # ● 四角タイプのセットアップ
  494.   #--------------------------------------------------------------------------
  495.   def setup_square
  496.     setup_base
  497.     @simpmap_sprite.bitmap = @loop_bitmap
  498.     @simpmap_sprite.ox = @simpmap_sprite.oy = 0
  499.     @simpmap_sprite.angle = 0
  500.     w = (@rect.width / @zoom).ceil
  501.     h = (@rect.height / @zoom).ceil
  502.     @simpmap_sprite.src_rect.set(0, 0, w, h)
  503.     w = @map_width * @zoom * 2
  504.     h = @map_height * @zoom * 2
  505.     @marker_sprite.bitmap = Bitmap.new(w, h)
  506.     @marker_sprite.ox = @marker_sprite.oy = 0
  507.     @marker_sprite.src_rect.set(@rect)
  508.     @frame_sprite.x = @rect.x + (@rect.width - @frame_sprite.width) / 2
  509.     @frame_sprite.y = @rect.y + (@rect.height - @frame_sprite.height) / 2
  510.     @frame_sprite.ox = @frame_sprite.oy = 0
  511.   end
  512.   #--------------------------------------------------------------------------
  513.   # ● 円形タイプのセットアップ
  514.   #--------------------------------------------------------------------------
  515.   def setup_circle
  516.     setup_base
  517.     w = (@rect.width / @zoom).ceil
  518.     h = (@rect.height / @zoom).ceil
  519.     @simpmap_sprite.bitmap = Bitmap.new(w, h)
  520.     @simpmap_sprite.ox = w / 2
  521.     @simpmap_sprite.oy = h / 2
  522.     @simpmap_sprite.zoom_x = @simpmap_sprite.zoom_y = @zoom
  523.     @marker_sprite.bitmap = Bitmap.new(@rect.width, @rect.height)
  524.     @marker_sprite.ox = @rect.width / 2
  525.     @marker_sprite.oy = @rect.height / 2
  526.     @marker_sprite.opacity = 255
  527.     @frame_sprite.x = @rect.x
  528.     @frame_sprite.y = @rect.y
  529.     @frame_sprite.ox = @frame_sprite.width / 2
  530.     @frame_sprite.oy = @frame_sprite.height / 2
  531.   end
  532.   #--------------------------------------------------------------------------
  533.   # ● フレーム更新
  534.   #--------------------------------------------------------------------------
  535.   def update
  536.     if @map_id != $game_map.map_id || @index != $game_variables[VariableID]
  537.       create_map_bitmap if @map_id != $game_map.map_id
  538.       @map_id = $game_map.map_id
  539.       @index = $game_variables[VariableID]
  540.       setup
  541.     end
  542.     if @params
  543.       case @params[:type]
  544.       when 1; update_all_marker(true)
  545.       when 2; update_all_marker(false)
  546.       when 3; update_type3
  547.       end
  548.     end
  549.   end
  550.   #--------------------------------------------------------------------------
  551.   # ● 全マーカーの更新
  552.   #--------------------------------------------------------------------------
  553.   def update_all_marker(loop = true)
  554.     @update_count = (@update_count + 1) % 72
  555.     player = vehicle? ? $game_player.vehicle : $game_player
  556.     px = (player.real_x + 0.5) * @map_width / $game_map.width
  557.     py = (player.real_y + 0.5) * @map_height / $game_map.height
  558.     ox = px - (@rect.width / @zoom / 2).ceil
  559.     unless loop && $game_map.loop_horizontal?
  560.       ox = [[ox, @map_width - @simpmap_sprite.width].min, 0].max
  561.     end
  562.     ox %= @map_width
  563.     oy = py - (@rect.height / @zoom / 2).ceil
  564.     unless loop && $game_map.loop_vertical?
  565.       oy = [[oy, @map_height - @simpmap_sprite.height].min, 0].max
  566.     end
  567.     oy %= @map_height
  568.     update_player(px - ox, py - oy)
  569.     update_simpmap(ox, oy)
  570.     update_marker(ox, oy)
  571.   end
  572.   #--------------------------------------------------------------------------
  573.   # ● プレイヤーの更新
  574.   #--------------------------------------------------------------------------
  575.   def update_player(x, y)
  576.     if vehicle?
  577.       @player_sprite.bitmap = @vehicle_bitmap
  578.       case VehOrPos
  579.       when 0; @player_sprite.oy = VehOrPlus
  580.       when 1; @player_sprite.oy = @player_sprite.height / 2 + VehOrPlus
  581.       when 2; @player_sprite.oy = @player_sprite.height + VehOrPlus
  582.       end
  583.       if WdTk.include?(:Veh3D)
  584.         @player_sprite.angle = TurnVeh ? $game_player.vehicle.angle : 0
  585.       else
  586.         @player_sprite.angle = TurnVeh ? player_angle : 0
  587.       end
  588.     else
  589.       @player_sprite.bitmap = @player_bitmap
  590.       case PlyOrPos
  591.       when 0; @player_sprite.oy = PlyOrPlus
  592.       when 1; @player_sprite.oy = @player_sprite.height / 2 + PlyOrPlus
  593.       when 2; @player_sprite.oy = @player_sprite.height + PlyOrPlus
  594.       end
  595.       @player_sprite.angle = (TurnPly ? player_angle : 0)
  596.     end
  597.     @player_sprite.ox = @player_sprite.width / 2
  598.     @player_sprite.x = @rect.x + x % @map_width * @zoom
  599.     @player_sprite.y = @rect.y + y % @map_height * @zoom
  600.   end
  601.   #--------------------------------------------------------------------------
  602.   # ● 簡易マップの更新
  603.   #--------------------------------------------------------------------------
  604.   def update_simpmap(x, y)
  605.     @simpmap_sprite.src_rect.x = x
  606.     @simpmap_sprite.src_rect.y = y
  607.   end
  608.   #--------------------------------------------------------------------------
  609.   # ● マーカーの更新
  610.   #--------------------------------------------------------------------------
  611.   def update_marker(x, y)
  612.     @marker_sprite.opacity = 256 - @update_count * 3
  613.     redraw_marker if @update_count == 0
  614.     @marker_sprite.src_rect.x = x * @zoom
  615.     @marker_sprite.src_rect.y = y * @zoom
  616.   end
  617.   #--------------------------------------------------------------------------
  618.   # ● マーカーの再描写
  619.   #--------------------------------------------------------------------------
  620.   def redraw_marker
  621.     bitmap = @marker_sprite.bitmap
  622.     bitmap.clear
  623.     x_rate = bitmap.width / 2.0 / $game_map.width
  624.     y_rate = bitmap.height / 2.0 / $game_map.height
  625.     all_events.each do |event|
  626.       i = event.mark_index
  627.       next unless i
  628.       @marker_bitmaps[i] ||= make_marker(get_color(i), Radius)
  629.       marker = @marker_bitmaps[i]
  630.       ex = (event.x + 0.5) * x_rate - marker.width / 2
  631.       ey = (event.y + 0.5) * y_rate - marker.height / 2
  632.       bitmap.blt(ex, ey, marker, marker.rect)
  633.     end
  634.     bitmap.blt(bitmap.width / 2,  0, bitmap, bitmap.rect)
  635.     bitmap.blt(0, bitmap.height / 2, bitmap, bitmap.rect)
  636.   end
  637.   #--------------------------------------------------------------------------
  638.   # ● 全てのイベントを取得
  639.   #--------------------------------------------------------------------------
  640.   def all_events
  641.     $game_map.events.values +
  642.     $game_map.vehicles.reject {|v| v.transparent || v.driving }
  643.   end
  644.   #--------------------------------------------------------------------------
  645.   # ● 乗り物に乗っているかどうか
  646.   #--------------------------------------------------------------------------
  647.   def vehicle?
  648.     if WdTk.include?(:Veh3D)
  649.       $game_player.in_vehicle
  650.     else
  651.       $game_player.vehicle && $game_player.vehicle.movable?
  652.     end
  653.   end
  654.   #--------------------------------------------------------------------------
  655.   # ● プレイヤーの向きから角度を取得
  656.   #--------------------------------------------------------------------------
  657.   def player_angle
  658.     case $game_player.direction
  659.     when 2; 180
  660.     when 4; 90
  661.     when 6; 270
  662.     when 8; 0
  663.     end
  664.   end
  665.   #--------------------------------------------------------------------------
  666.   # ● フレーム更新 (タイプ 3)
  667.   #--------------------------------------------------------------------------
  668.   def update_type3
  669.     @update_count = (@update_count + 1) % 72
  670.     if WdTk.include?(:Veh3D) && $game_player.in_vehicle
  671.       return unless WdTk::Veh3D.update_even?
  672.     else
  673.       return if @update_count.odd?
  674.     end
  675.     player = vehicle? ? $game_player.vehicle : $game_player
  676.     px = (player.real_x + 0.5) * @map_width / $game_map.width
  677.     py = (player.real_y + 0.5) * @map_height / $game_map.height
  678.     ox = (px - @rect.width / @zoom / 2)
  679.     ox %= @map_width if $game_map.loop_horizontal?
  680.     oy = (py - @rect.height / @zoom / 2)
  681.     oy %= @map_height if $game_map.loop_vertical?
  682.     update_player(0, 0)
  683.     update_simpmap_t3(ox, oy)
  684.     update_marker_t3(player)
  685.     if turn_map?
  686.       @player_sprite.angle = 0
  687.       @simpmap_sprite.angle = -player.angle
  688.       @frame_sprite.angle = -player.angle
  689.     end
  690.   end
  691.   #--------------------------------------------------------------------------
  692.   # ● 簡易マップの更新(タイプ 3 用)
  693.   #--------------------------------------------------------------------------
  694.   def update_simpmap_t3(x, y)
  695.     bitmap = @simpmap_sprite.bitmap
  696.     bitmap.clear
  697.     rect = Rect.new
  698.     @params[:cal].each_with_index do |n, i|
  699.       m = (@rect.width / 2 / @zoom).ceil - n
  700.       rect.set(x + m, y + i, n * 2, 1)
  701.       bitmap.blt(m, i, @loop_bitmap, rect)
  702.     end
  703.   end
  704.   #--------------------------------------------------------------------------
  705.   # ● マーカーの更新(タイプ 3 用)
  706.   #--------------------------------------------------------------------------
  707.   def update_marker_t3(player)
  708.     @marker_sprite.opacity = 256 - @update_count * 3
  709.     bitmap = @marker_sprite.bitmap
  710.     bitmap.clear
  711.     x_rate = @map_width / $game_map.width * @zoom
  712.     y_rate = @map_height / $game_map.height * @zoom
  713.     psx = $game_map.adjust_x(player.real_x)
  714.     psy = $game_map.adjust_y(player.real_y)
  715.     cx = bitmap.width / 2
  716.     cy = bitmap.height / 2
  717.     radian = turn_map? ? -player.angle * Math::PI / 180 : 0
  718.     all_events.each do |event|
  719.       i = event.mark_index
  720.       next unless i
  721.       dx = (($game_map.adjust_x(event.real_x) - psx) * x_rate).to_i
  722.       dy = (($game_map.adjust_y(event.real_y) - psy) * y_rate).to_i
  723.       next unless dy.between?(-cy, cy)
  724.       m = Math.sqrt(cy ** 2 - dy ** 2) * cx / cy
  725.       next unless dx.between?(-m, m)
  726.       @marker_bitmaps[i] ||= make_marker(get_color(i), Radius)
  727.       marker = @marker_bitmaps[i]
  728.       if radian != 0 && (dx != 0 || dy != 0)
  729.         rr = Math.atan2(dx, dy) + radian
  730.         ed = Math.hypot(dx, dy)
  731.         dx = (ed * Math.sin(rr)).to_i
  732.         dy = (ed * Math.cos(rr)).to_i
  733.       end
  734.       mx = cx + dx - marker.width / 2
  735.       my = cy + dy - marker.height / 2
  736.       bitmap.blt(mx, my, marker, marker.rect)
  737.     end
  738.   end
  739.   #--------------------------------------------------------------------------
  740.   # ● マップ側を回転させるかどうか
  741.   #--------------------------------------------------------------------------
  742.   def turn_map?
  743.     WdTk.include?(:Veh3D) && $game_player.in_vehicle && @params[:turnmap]
  744.   end
  745. end
  746.  
  747. #==============================================================================
  748. # ■ Spriteset_Map
  749. #==============================================================================
  750. class Spriteset_Map
  751.   #--------------------------------------------------------------------------
  752.   # ○ オブジェクト初期化
  753.   #--------------------------------------------------------------------------
  754.   alias _wdtk_simpmap_initialize initialize
  755.   def initialize
  756.     create_simpmap
  757.     _wdtk_simpmap_initialize
  758.   end
  759.   #--------------------------------------------------------------------------
  760.   # ○ 解放
  761.   #--------------------------------------------------------------------------
  762.   alias _wdtk_simpmap_dispose dispose
  763.   def dispose
  764.     @spriteset_simpmap.dispose
  765.     _wdtk_simpmap_dispose
  766.   end
  767.   #--------------------------------------------------------------------------
  768.   # ○ フレーム更新
  769.   #--------------------------------------------------------------------------
  770.   alias _wdtk_simpmap_update update
  771.   def update
  772.     _wdtk_simpmap_update
  773.     @spriteset_simpmap.update
  774.   end
  775.   #--------------------------------------------------------------------------
  776.   # ● 簡易マップの作成
  777.   #--------------------------------------------------------------------------
  778.   def create_simpmap
  779.     @spriteset_simpmap   = Spriteset_SimpleMap.new
  780.   end
  781. end
  782.  
  783. if WdTk.include?(:Veh3D)
  784. module WdTk::Veh3D
  785.   def self.update_even?
  786.     need_update? && @@frame_count.even?
  787.   end
  788. end
  789. #==============================================================================
  790. # ■ Scene_Vehicle
  791. #==============================================================================
  792. class Scene_Vehicle
  793.   #--------------------------------------------------------------------------
  794.   # ● 簡易マップの作成
  795.   #--------------------------------------------------------------------------
  796.   def create_simpmap
  797.     super
  798.     @spriteset_simpmap.viewport = @window_viewport
  799.   end
  800. end
  801. end



然后,先看这个脚本的注释得知了使用方法是通过改变变量1的值来显示地图,而地图文件则需要放进Graphics/System/文件夹里
那么变量1的值为2的时候则在正中央显示整张地图(具体看注释)
于是,我们就开始制作技能了。



评分

参与人数 1梦石 +1 收起 理由
RaidenInfinity + 1 认可答案

查看全部评分

笨肉包的首款像素OC游戏《花城梦之心》尝试制作中~
目前的坑 【不可思议的迷宫】幽灵契约外传:歌莉娅
持续更新中~ 当前进度 v0.28
大版本更新时才会更新网盘文件,预计下次大版本更新:v0.30
完成度:
主线 15% 支线 0% 数据库 6% 系统 86% 美术 6%
两边同时填坑~
( 这里是笨肉包~专修魔法!目标是大魔法师!
( 坑太大啦,一个人填不完啦hhh 一定会填完的嗯...
( 每天都和bug们比试魔力~吾之魔法将扫平一切!
( 弱点是美术,魔法修行之余再补补课吧~
( 哼哼哼~这便是魔法的力量!
大家都离开啦,笨肉包也不知道还能坚持多久呀...
这是属于笨肉包一个人的旅行(再见了...蚊子湯,七重酱,笨肉包永远想你们!TwT
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
878
在线时间
576 小时
注册时间
2010-6-26
帖子
793
3
 楼主| 发表于 2017-4-9 23:09:20 | 只看该作者
魔法丶小肉包 发表于 2017-4-9 15:26
首先,使用木星ペンギン大大的脚本
=begin

大神这个脚本这里报错怎么办呀?


点评

这是论坛的BUG,把186行改成 @Cache ||= {} 即可  发表于 2017-4-10 00:07
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
5039
在线时间
1780 小时
注册时间
2012-7-3
帖子
1799

开拓者

4
发表于 2017-4-9 23:13:06 | 只看该作者
不用脚本的话……
直接找一张大地图的图片然后通过换算坐标将示意主角位置的点叠上去就好啦……

点评

那种的也可以啊,拿一个点把整个地图遍历一边就行了 遍历的结果显示在底层,上面照样叠主角位置就行了_(:з)∠)_ 脚本做的事情其实和这个差不多  发表于 2017-4-10 14:47
除非是那种野外生存、随机地牢类的游戏,地图会随时发生变化,那个倒是必须需要一个生成小地图的脚本……  发表于 2017-4-10 11:15
而且通用啊…… 同样的方法换到fusion或者construct里面照样能用_(:з)∠)_  发表于 2017-4-10 09:58
其实我也觉得这样最好,用事件就能解决,又方便又无冲突。但是懒得人还是多啊,懒得画大地图……  发表于 2017-4-10 00:32
Project Ktr进行中:
   
------------------
SRPG开发之六-天气与地形互动
→→围观
→→→去Lofter围观
------------------
离经叛道的扯淡者/伪独立游戏爱好者/Decade Studio(?)/造轮子真TM开心呀
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
878
在线时间
576 小时
注册时间
2010-6-26
帖子
793
5
 楼主| 发表于 2017-4-10 10:18:55 | 只看该作者
魔法丶小肉包 发表于 2017-4-9 15:26
首先,使用木星ペンギン大大的脚本
=begin

感谢大神!我好好研究下这个脚本!!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-17 06:52

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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