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

Project1

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

[已经解决] RMVA在地图上显示坐标和地名

[复制链接]

Lv1.梦旅人

梦石
0
星屑
85
在线时间
210 小时
注册时间
2013-7-26
帖子
346
跳转到指定楼层
1
发表于 2014-7-13 20:25:04 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 夕仔 于 2014-7-13 21:12 编辑

如题,在地图左上角显示地名和坐标

Lv1.梦旅人

梦石
0
星屑
155
在线时间
129 小时
注册时间
2014-2-22
帖子
233
2
发表于 2014-7-13 20:43:14 | 只看该作者
地图寻路?我想你需要this one
很多年了呢,坑还是没填完…………(草
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

无限の剣制

梦石
0
星屑
10074
在线时间
5020 小时
注册时间
2013-2-28
帖子
5030

开拓者贵宾

3
发表于 2014-7-13 20:44:20 | 只看该作者
本帖最后由 VIPArcher 于 2014-7-14 18:19 编辑

小地图脚本
迷你地图省事版
显示位置坐标信息,
貌似很难看233
笑果如图

点评

稍微改了一下,写的不好。  发表于 2014-7-13 22:39
我把斜杠换成空格 好看多点。。  发表于 2014-7-13 22:22
稍后会更新一下,现在去送一下货233  发表于 2014-7-13 21:56
不好意思没注意设置,ok 问题解决了 赞一个,谢谢  发表于 2014-7-13 21:50
↓ 已更新  发表于 2014-7-13 21:50

评分

参与人数 1梦石 +2 收起 理由
taroxd + 2 你懂得

查看全部评分

回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

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

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

开拓者贵宾

4
发表于 2014-7-13 21:50:53 | 只看该作者
本帖最后由 taroxd 于 2014-7-13 21:54 编辑
VIPArcher 发表于 2014-7-13 20:44
小地图脚本
迷你地图省事版
显示位置坐标信息,


1. 为什么要把地图的X、Y实时存储到变量里?

2. 不用一个开关控制这个功能的打开/关闭吗?没有必要用全局变量吧

3. 每帧刷新是闹那样。坐标没有改变的时候没有必要刷新(refresh)啊

4. variable_show_text 你用在哪里了


虽然我给了两张卡,但这份脚本写得不好,真的

点评

关键是第三点啊-。- 每帧refresh很浪费的  发表于 2014-7-14 06:46
噗……事件获取不就是 $game_player.x 么,还得绕一层 get_character  发表于 2014-7-13 21:56
没想那么多,刚刚开始想用并行的公共事件来记录地图XY,后来想起来还有 $game_player.x可以用233  发表于 2014-7-13 21:55
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
22943
在线时间
8638 小时
注册时间
2011-12-31
帖子
3367
5
发表于 2014-7-14 09:09:32 | 只看该作者
本帖最后由 VIPArcher 于 2014-7-14 17:52 编辑

叧一個簡易地圖表示
指定変数(予設為変数1)的不同値改変成不同的簡易地圖
1:在右下角小地圖

2:正中央大地圖

3:在右下角小地圖

0:不表示
在亊件開頭注訳[マーカー:n](n為顔色),則可以n色在簡易地圖表示該事件
帮你@zoom @Cache 一下
  1. =begin

  2. ▼ 簡易マップ表示 ver. 1.1

  3. RPGツクールVXAce用スクリプト

  4. 制作 : 木星ペンギン
  5. URL  : http://woodpenguin.blog.fc2.com/

  6. ------------------------------------------------------------------------------
  7. 概要

  8. □ 簡易マップを画面に表示させます。

  9. □ 乗り物擬似3D化と併用する場合、こちらのスクリプトを下にしてください。

  10. ------------------------------------------------------------------------------
  11. 各タイプの説明

  12. □ タイプ 1
  13.   ・プレイヤーの周辺を表示するタイプ。表示範囲は四角形。
  14.   
  15. □ タイプ 2
  16.   ・指定した範囲にマップ全体を表示するタイプ。
  17.   
  18. □ タイプ 3
  19.   ・プレイヤーの周辺を表示するタイプ。表示範囲は円形。若干処理重め。
  20.   ・スクロールタイプに関係なく、ループ表示します。
  21.   ・<マップ側回転フラグ>はさらに重くなるので注意。
  22.   ・幅と高さは同じ値にしてください。
  23.   ・標示範囲よりマップ画像が小さい場合、標示がおかしくなります。
  24.   
  25. =end

  26. #//////////////////////////////////////////////////////////////////////////////
  27. #
  28. # 設定項目
  29. #
  30. #//////////////////////////////////////////////////////////////////////////////
  31. module WdTk
  32. module SimpMap
  33.   #--------------------------------------------------------------------------
  34.   # ● 画像を参照するフォルダ名
  35.   #--------------------------------------------------------------------------
  36.   DirName = "Graphics/System/"
  37.   
  38.   #--------------------------------------------------------------------------
  39.   # ● 使用するマップ画像
  40.   #     マップ ID をキーとして、マップ画像のファイル名を指定してください。
  41.   #     マップ画像名を "" (空の文字列) にした場合は自動生成されます。
  42.   #     設定していないマップでは、簡易マップは標示されません。
  43.   #--------------------------------------------------------------------------
  44.   Map = {5 => "", 6 => ""}
  45.   
  46.   #--------------------------------------------------------------------------
  47.   # ● 使用する変数 ID
  48.   #     この変数の値で簡易マップの表示タイプを変えることが出来ます。
  49.   #     変数の値が 0 で非表示。他は各設定を参照。
  50.   #--------------------------------------------------------------------------
  51.   VariableID = 1
  52.   
  53.   #--------------------------------------------------------------------------
  54.   # ● 基本設定
  55.   #     変数に入っている数値をキーとして、各パラメータを設定します。
  56.   #--------------------------------------------------------------------------
  57.   Data = {}
  58.   Data[0] = nil  # 非表示
  59.   
  60.   # 変数の値が 1 の場合 (タイプ 1 サンプル)
  61.   params = {}
  62.   params[:type]    = 1     # タイプ
  63.   params[:width]   = 128   # 幅
  64.   params[:height]  = 96    # 高さ
  65.   params[:x]       = Graphics.width - params[:width] - 16   # X 座標
  66.   params[:y]       = Graphics.height - params[:height] - 16 # Y 座標
  67.   params[:opacity] = 200   # 不透明度
  68.   params[:zoom]    = 1.0   # 拡大率
  69.   params[:frame]   = ""    # フレームの画像ファイル名
  70.   Data[1] = params
  71.   
  72.   # 変数の値が 2 の場合 (タイプ 2 サンプル)
  73.   params = {}
  74.   params[:type]    = 2     # タイプ
  75.   params[:x]       = 16    # X 座標
  76.   params[:y]       = 16    # Y 座標
  77.   params[:width]   = Graphics.width - params[:x] * 2  # 幅
  78.   params[:height]  = Graphics.height - params[:y] * 2 # 高さ
  79.   params[:opacity] = 224   # 不透明度
  80.   params[:frame]   = ""    # フレームの画像ファイル名
  81.   Data[2] = params
  82.   
  83.   # 変数の値が 3 の場合 (タイプ 3 サンプル)
  84.   params = {}
  85.   params[:type]    = 3     # タイプ
  86.   params[:width]   = 128   # 幅
  87.   params[:height]  = 128   # 高さ
  88.   params[:x]       = Graphics.width - params[:width] / 2 - 16   # X 座標
  89.   params[:y]       = Graphics.height - params[:height] / 2 - 16 # Y 座標
  90.   params[:opacity] = 200   # 不透明度
  91.   params[:zoom]    = 1.0   # 拡大率
  92.   params[:turnmap] = false # マップ回転フラグ(乗り物擬似3D化中のみ)
  93.   params[:frame]   = ""    # フレームの画像ファイル名
  94.   Data[3] = params
  95.   
  96.   #--------------------------------------------------------------------------
  97.   # ● プレイヤーのマーカー
  98.   #     画像ファイルが未設定の場合は自動生成されます。
  99.   #     画像の原点は、 X軸は中心位置となります。Y軸は設定できます。
  100.   #     回転させる場合、北向きが基本となります。
  101.   #--------------------------------------------------------------------------
  102.   Player   = ""         # プレイヤーの画像ファイル名
  103.   PlyOrBtm = 0          # プレイヤー画像の Y 軸原点(下からのドット数)
  104.   TurnPly  = false      # プレイヤーの向きにあわせて画像を回転させるかどうか
  105.   
  106.   Vehicle  = ""         # 乗り物搭乗時の画像ファイル名
  107.   VehOrBtm = 2          # 乗り物画像の Y 軸原点(下からのドット数)
  108.   TurnVeh  = true       # 乗り物の向きにあわせて画像を回転させるかどうか
  109.   
  110.   #--------------------------------------------------------------------------
  111.   # ● マップ自動生成用の設定
  112.   #--------------------------------------------------------------------------
  113.   # タイルの色
  114.   Land = Color.new(192, 192, 192)      # 陸地
  115.   Sea  = Color.new(  0,   0,   0, 128) # 深海
  116.   Ford = Color.new( 64,  64,  64, 192) # 浅瀬・沼
  117.   Mtn  = Color.new( 96,  96,  96)      # 高い山
  118.   Hill = Color.new(128, 128, 128)      # 低い山
  119.   Fst  = Color.new(160, 160, 160)      # 森
  120.   
  121.   TileSize  = 4         # 1 タイルの大きさ
  122.   MapBlur   = true      # ぼかし処理
  123.   StartInit = false     # ゲーム起動時にマップ生成

  124. #//////////////////////////////////////////////////////////////////////////////
  125. #
  126. # 以降、変更する必要なし
  127. #
  128. #//////////////////////////////////////////////////////////////////////////////

  129.   def self.init
  130.     return unless StartInit
  131.     Map.each {|map_id, name| create_simplemap(map_id) if name.empty? }
  132.   end
  133.   def self.create_simplemap(map_id)
  134.     map = load_data(sprintf("Data/Map%03d.rvdata2", map_id))
  135.     bitmap = Bitmap.new(map.width * TileSize, map.height * TileSize)
  136.     map.width.times do |x|; map.height.times do |y|
  137.       index0 = (map.data[x, y, 0] - 2048) / 48
  138.       index1 = (map.data[x, y, 1] - 2048) / 48
  139.       if index0 < 16
  140.         color = (index1 == 1 ? Sea : Ford)
  141.       else
  142.         case index1
  143.         when 20,21,28,36,44; color = Fst
  144.         when 22,30,38,46;    color = Hill
  145.         when 23,31,39,47;    color = Mtn
  146.         else                 color = Land
  147.         end
  148.       end
  149.       bitmap.fill_rect(x * TileSize, y * TileSize, TileSize, TileSize, color)
  150.     end; end
  151.     bitmap.blur if MapBlur
  152.     bitmap
  153.   end
  154.   Data.each_value do |params|
  155.     next unless params && params[:type] == 3
  156.     params[:cal] = []
  157.     (params[:height] / params[:zoom]).ceil.times do |i|
  158.       r = params[:width] / 2.0 / params[:zoom]
  159.       params[:cal] << Math.sqrt(r ** 2 - (r - i - 0.5) ** 2).ceil
  160.     end
  161.   end
  162.   
  163. end

  164.   [url=home.php?mod=space&uid=341345]@Cache[/url] ||= {}
  165.   def self.load_simplemap(map_id)
  166.     key = sprintf("SimpleMap/%03d", map_id)
  167.     @cache.delete(key) if @cache.include?(key) && @cache[key].disposed?
  168.     @cache[key] ||= SimpMap.create_simplemap(map_id)
  169.   end
  170.   def self.save_simplemap(map_id, bitmap)
  171.     key = sprintf("SimpleMap/%03d", map_id)
  172.     @cache[key] = bitmap
  173.   end
  174.   def self.delete_simplemap(map_id)
  175.     key = sprintf("SimpleMap/%03d", map_id)
  176.     @cache.delete(key)
  177.   end
  178.   
  179.   @material ||= []
  180.   @material << :SimpMap
  181.   def self.include?(sym)
  182.     @material.include?(sym)
  183.   end
  184.   
  185. end

  186. #==============================================================================
  187. # ■ DataManager
  188. #==============================================================================
  189. class << DataManager
  190.   #--------------------------------------------------------------------------
  191.   # ◯ モジュール初期化
  192.   #--------------------------------------------------------------------------
  193.   alias _wdtk_simpmap_init init
  194.   def init
  195.     _wdtk_simpmap_init
  196.     WdTk::SimpMap.init
  197.   end
  198. end

  199. #==============================================================================
  200. # ■ Game_Player
  201. #==============================================================================
  202. class Game_Player
  203.   #--------------------------------------------------------------------------
  204.   # ● マーカーの色
  205.   #--------------------------------------------------------------------------
  206.   def mark_index
  207.     return 0
  208.   end
  209. end

  210. #==============================================================================
  211. # ■ Game_Vehicle
  212. #==============================================================================
  213. class Game_Vehicle
  214.   #--------------------------------------------------------------------------
  215.   # ● マーカーの色
  216.   #--------------------------------------------------------------------------
  217.   def mark_index
  218.     return 6
  219.   end
  220. end

  221. #==============================================================================
  222. # ■ Game_Event
  223. #==============================================================================
  224. class Game_Event
  225.   #--------------------------------------------------------------------------
  226.   # ● 公開インスタンス変数
  227.   #--------------------------------------------------------------------------
  228.   attr_reader   :mark_index               # マーカーの色
  229.   #--------------------------------------------------------------------------
  230.   # ◯ イベントページの設定をセットアップ
  231.   #--------------------------------------------------------------------------
  232.   alias _wdtk_simpmap_setup_page_settings setup_page_settings
  233.   def setup_page_settings
  234.     _wdtk_simpmap_setup_page_settings
  235.     clear_simpmap_params
  236.     setup_simpmap_params
  237.   end
  238.   #--------------------------------------------------------------------------
  239.   # ● イベント内容から設定をセットアップ
  240.   #--------------------------------------------------------------------------
  241.   def setup_simpmap_params
  242.     @list.each do |cmd|
  243.       case cmd.code
  244.       when 108,408
  245.         case cmd.parameters[0]
  246.         when /マーカー\s*[::]\s*(\d+)/
  247.           @mark_index = $1.to_i
  248.         end
  249.       else
  250.         return
  251.       end
  252.     end
  253.   end
  254.   #--------------------------------------------------------------------------
  255.   # ● イベント立体表示の設定をクリア
  256.   #--------------------------------------------------------------------------
  257.   def clear_simpmap_params
  258.     @mark_index = nil
  259.   end
  260. end

  261. #==============================================================================
  262. # ■ Spriteset_SimpleMap
  263. #==============================================================================
  264. class Spriteset_SimpleMap
  265.   #--------------------------------------------------------------------------
  266.   # ● モジュール
  267.   #--------------------------------------------------------------------------
  268.   include WdTk::SimpMap
  269.   #--------------------------------------------------------------------------
  270.   # ● 定数
  271.   #--------------------------------------------------------------------------
  272.   PlayerData  = [[ 64,224,224, 64],
  273.                  [224,255,255,224],
  274.                  [224,255,255,224],
  275.                  [ 64,224,224, 64]]
  276.   VehicleData = [[  0,224,224,  0],
  277.                  [  0,224,224,  0],
  278.                  [  0,  0,  0,  0],
  279.                  [  0,  0,  0,  0],
  280.                  [ 64,224,224, 64],
  281.                  [224,255,255,224],
  282.                  [224,255,255,224],
  283.                  [ 64,224,224, 64]]
  284.   MarkerData  = [[ 64,224,224, 64],
  285.                  [224,255,255,224],
  286.                  [224,255,255,224],
  287.                  [ 64,224,224, 64]]
  288.   #--------------------------------------------------------------------------
  289.   # ● オブジェクト初期化
  290.   #--------------------------------------------------------------------------
  291.   def initialize
  292.     @update_count = 0
  293.     @marker_bitmaps = {}
  294.     @rect = Rect.new
  295.     create_simpmap
  296.     create_marker
  297.     create_player
  298.     create_frame
  299.     create_map_bitmap
  300.     update
  301.   end
  302.   #--------------------------------------------------------------------------
  303.   # ● 簡易マップの作成
  304.   #--------------------------------------------------------------------------
  305.   def create_simpmap
  306.     @simpmap_sprite = Sprite.new
  307.     @simpmap_sprite.z = 150
  308.   end
  309.   #--------------------------------------------------------------------------
  310.   # ● マーカーの作成
  311.   #--------------------------------------------------------------------------
  312.   def create_marker
  313.     @marker_sprite = Sprite.new
  314.     @marker_sprite.z = 151
  315.   end
  316.   #--------------------------------------------------------------------------
  317.   # ● プレイヤーの作成
  318.   #--------------------------------------------------------------------------
  319.   def create_player
  320.     @player_sprite = Sprite.new
  321.     @player_sprite.z = 152
  322.     if Player.empty?
  323.       i = $game_player.mark_index
  324.       @player_bitmap = make_marker_bitmap(PlayerData, get_color(i))
  325.     else
  326.       @player_bitmap = Cache.load_bitmap(DirName, Player)
  327.     end
  328.     if !Vehicle.empty?
  329.       @vehicle_bitmap = Cache.load_bitmap(DirName, Vehicle)
  330.     elsif TurnVeh
  331.       i = $game_player.mark_index
  332.       @vehicle_bitmap = make_marker_bitmap(VehicleData, get_color(i))
  333.     else
  334.       @vehicle_bitmap = @player_bitmap
  335.     end
  336.   end
  337.   #--------------------------------------------------------------------------
  338.   # ● フレームの作成
  339.   #--------------------------------------------------------------------------
  340.   def create_frame
  341.     @frame_sprite = Sprite.new
  342.     @frame_sprite.z = 152
  343.   end
  344.   #--------------------------------------------------------------------------
  345.   # ● マップ画像の作成
  346.   #--------------------------------------------------------------------------
  347.   def create_map_bitmap
  348.     @loop_bitmap.dispose if @loop_bitmap
  349.     if !Map.include?($game_map.map_id)
  350.       @loop_bitmap = nil
  351.       return
  352.     elsif !Map[$game_map.map_id].empty?
  353.       map_bitmap = Cache.load_bitmap(DirName, Map[$game_map.map_id])
  354.     else
  355.       map_bitmap = WdTk.load_simplemap($game_map.map_id)
  356.     end
  357.     @map_width = map_bitmap.width
  358.     @map_height = map_bitmap.height
  359.     @loop_bitmap = Bitmap.new(@map_width * 2, @map_height * 2)
  360.     @loop_bitmap.blt(0,           0, map_bitmap, map_bitmap.rect)
  361.     @loop_bitmap.blt(@map_width,  0, map_bitmap, map_bitmap.rect)
  362.     @loop_bitmap.blt(0, @map_height, @loop_bitmap, @loop_bitmap.rect)
  363.   end
  364.   #--------------------------------------------------------------------------
  365.   # ● 色の取得
  366.   #--------------------------------------------------------------------------
  367.   def get_color(index)
  368.     bitmap = Cache.system("Window")
  369.     bitmap.get_pixel(64 + (index % 8) * 8, 96 + (index / 8) * 8)
  370.   end
  371.   #--------------------------------------------------------------------------
  372.   # ● マーカー画像の取得
  373.   #--------------------------------------------------------------------------
  374.   def make_marker_bitmap(alpha_data, color)
  375.     bitmap = Bitmap.new(alpha_data[0].size, alpha_data.size)
  376.     alpha_data.each_with_index do |data, y|; data.each_with_index do |alpha, x|
  377.       color.alpha = alpha
  378.       bitmap.set_pixel(x, y, color)
  379.     end; end
  380.     bitmap
  381.   end
  382.   #--------------------------------------------------------------------------
  383.   # ● 解放
  384.   #--------------------------------------------------------------------------
  385.   def dispose
  386.     @simpmap_sprite.dispose
  387.     @loop_bitmap.dispose if @loop_bitmap
  388.     @marker_sprite.bitmap.dispose if @marker_sprite.bitmap
  389.     @marker_sprite.dispose
  390.     @player_sprite.dispose
  391.     @frame_sprite.dispose
  392.     @player_bitmap.dispose
  393.     @vehicle_bitmap.dispose
  394.     @marker_bitmaps.each_value {|bitmap| bitmap.dispose }
  395.   end
  396.   #--------------------------------------------------------------------------
  397.   # ● ビューポートの設定
  398.   #--------------------------------------------------------------------------
  399.   def viewport=(v)
  400.     @simpmap_sprite.viewport = v
  401.     @marker_sprite.viewport = v
  402.     @player_sprite.viewport = v
  403.     @frame_sprite.viewport = v
  404.   end
  405.   #--------------------------------------------------------------------------
  406.   # ● セットアップ
  407.   #--------------------------------------------------------------------------
  408.   def setup
  409.     @simpmap_sprite.bitmap.dispose if @params && @params[:type] == 3
  410.     @marker_sprite.bitmap.dispose if @marker_sprite.bitmap
  411.     @params = (@loop_bitmap ? Data[@index] : nil)
  412.     case (@params ? @params[:type] : 0)
  413.     when 1 # 一部拡大四角表示
  414.       @zoom = @params[:zoom]
  415.       @rect.width = [@params[:width], @map_width * @zoom].min
  416.       @rect.height = [@params[:height], @map_height * @zoom].min
  417.       @rect.x = @params[:x] + (@params[:width] - @rect.width) / 2
  418.       @rect.y = @params[:y] + (@params[:height] - @rect.height) / 2
  419.       setup_square
  420.     when 2 # 全体表示
  421.       @zoom = [@params[:width].to_f / @map_width,
  422.                @params[:height].to_f / @map_height].min
  423.       @rect.width = @map_width * @zoom
  424.       @rect.height = @map_height * @zoom
  425.       @rect.x = @params[:x] + (@params[:width] - @rect.width) / 2
  426.       @rect.y = @params[:y] + (@params[:height] - @rect.height) / 2
  427.       setup_square
  428.     when 3 # 一部拡大円形表示
  429.       @zoom = @params[:zoom]
  430.       @rect.set(@params[:x], @params[:y], @params[:width], @params[:height])
  431.       setup_circle
  432.     else   # 表示しない
  433.       @simpmap_sprite.visible = @marker_sprite.visible =
  434.       @player_sprite.visible = @frame_sprite.visible = false
  435.       return
  436.     end
  437.     @update_count = 71
  438.   end
  439.   #--------------------------------------------------------------------------
  440.   # ● 共通のセットアップ
  441.   #--------------------------------------------------------------------------
  442.   def setup_base
  443.     @simpmap_sprite.visible = true
  444.     @simpmap_sprite.x = @rect.x
  445.     @simpmap_sprite.y = @rect.y
  446.     @simpmap_sprite.zoom_x = @simpmap_sprite.zoom_y = @zoom
  447.     @marker_sprite.visible = true
  448.     @marker_sprite.x = @rect.x
  449.     @marker_sprite.y = @rect.y
  450.     @player_sprite.visible = true
  451.     if @params[:frame] && !@params[:frame].empty?
  452.       @frame_sprite.visible = true
  453.       @frame_sprite.bitmap = Cache.load_bitmap(DirName, @params[:frame])
  454.     else
  455.       @frame_sprite.visible = false
  456.     end
  457.     @simpmap_sprite.opacity = @params[:opacity]
  458.   end
  459.   #--------------------------------------------------------------------------
  460.   # ● 四角タイプのセットアップ
  461.   #--------------------------------------------------------------------------
  462.   def setup_square
  463.     setup_base
  464.     @simpmap_sprite.bitmap = @loop_bitmap
  465.     @simpmap_sprite.ox = @simpmap_sprite.oy = 0
  466.     @simpmap_sprite.angle = 0
  467.     w = (@rect.width / @zoom).ceil
  468.     h = (@rect.height / @zoom).ceil
  469.     @simpmap_sprite.src_rect.set(0, 0, w, h)
  470.     w = @map_width * @zoom * 2
  471.     h = @map_height * @zoom * 2
  472.     @marker_sprite.bitmap = Bitmap.new(w, h)
  473.     @marker_sprite.ox = @marker_sprite.oy = 0
  474.     @marker_sprite.src_rect.set(@rect)
  475.     @frame_sprite.x = @rect.x + (@rect.width - @frame_sprite.width) / 2
  476.     @frame_sprite.y = @rect.y + (@rect.height - @frame_sprite.height) / 2
  477.   end
  478.   #--------------------------------------------------------------------------
  479.   # ● 円形タイプのセットアップ
  480.   #--------------------------------------------------------------------------
  481.   def setup_circle
  482.     setup_base
  483.     w = (@rect.width / @zoom).ceil
  484.     h = (@rect.height / @zoom).ceil
  485.     @simpmap_sprite.bitmap = Bitmap.new(w, h)
  486.     @simpmap_sprite.ox = w / 2
  487.     @simpmap_sprite.oy = h / 2
  488.     @simpmap_sprite.zoom_x = @simpmap_sprite.zoom_y = @zoom
  489.     @marker_sprite.bitmap = Bitmap.new(@rect.width, @rect.height)
  490.     @marker_sprite.ox = @rect.width / 2
  491.     @marker_sprite.oy = @rect.height / 2
  492.     @marker_sprite.opacity = 255
  493.     @player_sprite.x = @rect.x
  494.     @player_sprite.y = @rect.y
  495.     @frame_sprite.x = @rect.x
  496.     @frame_sprite.y = @rect.y
  497.     @frame_sprite.ox = @frame_sprite.width / 2
  498.     @frame_sprite.oy = @frame_sprite.height / 2
  499.   end
  500.   #--------------------------------------------------------------------------
  501.   # ● フレーム更新
  502.   #--------------------------------------------------------------------------
  503.   def update
  504.     if @map_id != $game_map.map_id || @index != $game_variables[VariableID]
  505.       create_map_bitmap if @map_id != $game_map.map_id
  506.       @map_id = $game_map.map_id
  507.       @index = $game_variables[VariableID]
  508.       setup
  509.     end
  510.     if @params
  511.       case @params[:type]
  512.       when 1; update_all_marker(true)
  513.       when 2; update_all_marker(false)
  514.       when 3; update_type3
  515.       end
  516.     end
  517.   end
  518.   #--------------------------------------------------------------------------
  519.   # ● 全マーカーの更新
  520.   #--------------------------------------------------------------------------
  521.   def update_all_marker(loop = true)
  522.     @update_count = (@update_count + 1) % 72
  523.     player = vehicle? ? $game_player.vehicle : $game_player
  524.     px = (player.real_x + 0.5) * @map_width / $game_map.width
  525.     py = (player.real_y + 0.5) * @map_height / $game_map.height
  526.     ox = px - (@rect.width / @zoom / 2).ceil
  527.     unless loop && $game_map.loop_horizontal?
  528.       ox = [[ox, @map_width - @simpmap_sprite.width].min, 0].max
  529.     end
  530.     ox %= @map_width
  531.     oy = py - (@rect.height / @zoom / 2).ceil
  532.     unless loop && $game_map.loop_vertical?
  533.       oy = [[oy, @map_height - @simpmap_sprite.height].min, 0].max
  534.     end
  535.     oy %= @map_height
  536.     update_player(px - ox, py - oy)
  537.     update_simpmap(ox, oy)
  538.     update_marker(ox, oy)
  539.   end
  540.   #--------------------------------------------------------------------------
  541.   # ● プレイヤーの更新
  542.   #--------------------------------------------------------------------------
  543.   def update_player(x, y)
  544.     if vehicle?
  545.       @player_sprite.bitmap = @vehicle_bitmap
  546.       @player_sprite.ox = @vehicle_bitmap.width / 2
  547.       @player_sprite.oy = @vehicle_bitmap.height - VehOrBtm
  548.       if !TurnVeh
  549.         @player_sprite.angle = 0
  550.       elsif WdTk.include?(:Veh3D) && $game_player.in_vehicle
  551.         @player_sprite.angle = $game_player.vehicle.angle
  552.       else
  553.         @player_sprite.angle = player_angle
  554.       end
  555.     else
  556.       @player_sprite.bitmap = @player_bitmap
  557.       @player_sprite.ox = @player_bitmap.width / 2
  558.       @player_sprite.oy = @player_bitmap.height - PlyOrBtm
  559.       @player_sprite.angle = (TurnPly ? player_angle : 0)
  560.     end
  561.     @player_sprite.x = @rect.x + x % @map_width * @zoom
  562.     @player_sprite.y = @rect.y + y % @map_height * @zoom
  563.   end
  564.   #--------------------------------------------------------------------------
  565.   # ● 簡易マップの更新
  566.   #--------------------------------------------------------------------------
  567.   def update_simpmap(x, y)
  568.     @simpmap_sprite.src_rect.x = x
  569.     @simpmap_sprite.src_rect.y = y
  570.   end
  571.   #--------------------------------------------------------------------------
  572.   # ● マーカーの更新
  573.   #--------------------------------------------------------------------------
  574.   def update_marker(x, y)
  575.     @marker_sprite.opacity = 256 - @update_count * 3
  576.     redraw_marker if @update_count == 0
  577.     @marker_sprite.src_rect.x = x * @zoom
  578.     @marker_sprite.src_rect.y = y * @zoom
  579.   end
  580.   #--------------------------------------------------------------------------
  581.   # ● マーカーの再描写
  582.   #--------------------------------------------------------------------------
  583.   def redraw_marker
  584.     bitmap = @marker_sprite.bitmap
  585.     bitmap.clear
  586.     x_rate = bitmap.width / 2.0 / $game_map.width
  587.     y_rate = bitmap.height / 2.0 / $game_map.height
  588.     events = $game_map.events.values
  589.     $game_map.vehicles.each {|v| events << v unless v.transparent || v.driving }
  590.     events.each do |event|
  591.       i = event.mark_index
  592.       next unless i
  593.       @marker_bitmaps[i] ||= make_marker_bitmap(MarkerData, get_color(i))
  594.       marker = @marker_bitmaps[i]
  595.       ex = (event.x + 0.5) * x_rate - marker.width / 2
  596.       ey = (event.y + 0.5) * y_rate - marker.height / 2
  597.       bitmap.blt(ex, ey, marker, marker.rect)
  598.     end
  599.     bitmap.blt(bitmap.width / 2,  0, bitmap, bitmap.rect)
  600.     bitmap.blt(0, bitmap.height / 2, bitmap, bitmap.rect)
  601.   end
  602.   #--------------------------------------------------------------------------
  603.   # ● 乗り物に乗っているかどうか
  604.   #--------------------------------------------------------------------------
  605.   def vehicle?
  606.     if WdTk.include?(:Veh3D)
  607.       $game_player.in_vehicle
  608.     else
  609.       $game_player.vehicle && $game_player.vehicle.movable?
  610.     end
  611.   end
  612.   #--------------------------------------------------------------------------
  613.   # ● プレイヤーの向きから角度を取得
  614.   #--------------------------------------------------------------------------
  615.   def player_angle
  616.     case $game_player.direction
  617.     when 2; 180
  618.     when 4; 90
  619.     when 6; 270
  620.     when 8; 0
  621.     end
  622.   end
  623.   #--------------------------------------------------------------------------
  624.   # ● フレーム更新 (タイプ 3)
  625.   #--------------------------------------------------------------------------
  626.   def update_type3
  627.     @update_count = (@update_count + 1) % 72
  628.     return if @update_count.odd?
  629.     player = vehicle? ? $game_player.vehicle : $game_player
  630.     px = (player.real_x + 0.5) * @map_width / $game_map.width
  631.     py = (player.real_y + 0.5) * @map_height / $game_map.height
  632.     ox = (px - @rect.width / @zoom / 2) % @map_width
  633.     oy = (py - @rect.height / @zoom / 2) % @map_width
  634.     update_player_t3
  635.     update_simpmap_t3(ox, oy)
  636.     update_marker_t3(player)
  637.     if WdTk.include?(:Veh3D) && $game_player.in_vehicle && @params[:turnmap]
  638.       @simpmap_sprite.angle = -player.angle
  639.       @frame_sprite.angle = -player.angle
  640.     end
  641.   end
  642.   #--------------------------------------------------------------------------
  643.   # ● プレイヤーの更新(タイプ 3 用)
  644.   #--------------------------------------------------------------------------
  645.   def update_player_t3
  646.     if vehicle?
  647.       @player_sprite.bitmap = @vehicle_bitmap
  648.       @player_sprite.ox = @vehicle_bitmap.width / 2
  649.       @player_sprite.oy = @vehicle_bitmap.height - VehOrBtm
  650.       if WdTk.include?(:Veh3D) && $game_player.in_vehicle
  651.         if @params[:turnmap] || !TurnVeh
  652.           @player_sprite.angle = 0
  653.         else
  654.           @player_sprite.angle = $game_player.vehicle.angle
  655.         end
  656.       elsif TurnVeh
  657.         @player_sprite.angle = player_angle
  658.       else
  659.         @player_sprite.angle = 0
  660.       end
  661.     else
  662.       @player_sprite.bitmap = @player_bitmap
  663.       @player_sprite.ox = @player_bitmap.width / 2
  664.       @player_sprite.oy = @player_bitmap.height - PlyOrBtm
  665.       @player_sprite.angle = 0
  666.     end
  667.   end
  668.   #--------------------------------------------------------------------------
  669.   # ● 簡易マップの更新(タイプ 3 用)
  670.   #--------------------------------------------------------------------------
  671.   def update_simpmap_t3(x, y)
  672.     bitmap = @simpmap_sprite.bitmap
  673.     bitmap.clear
  674.     rect = Rect.new
  675.     @params[:cal].each_with_index do |n, i|
  676.       m = (@rect.width / 2 / @zoom).ceil - n
  677.       rect.set(x + m, y + i, n * 2, 1)
  678.       bitmap.blt(m, i, @loop_bitmap, rect)
  679.     end
  680.   end
  681.   #--------------------------------------------------------------------------
  682.   # ● マーカーの更新(タイプ 3 用)
  683.   #--------------------------------------------------------------------------
  684.   def update_marker_t3(player)
  685.     @marker_sprite.opacity = 256 - @update_count * 3
  686.     bitmap = @marker_sprite.bitmap
  687.     bitmap.clear
  688.     x_rate = @map_width / $game_map.width * @zoom
  689.     y_rate = @map_height / $game_map.height * @zoom
  690.     psx = $game_map.adjust_x(player.real_x)
  691.     psy = $game_map.adjust_y(player.real_y)
  692.     radius = @rect.width / x_rate / 2
  693.     cx = bitmap.width / 2
  694.     cy = bitmap.height / 2
  695.     if WdTk.include?(:Veh3D) && $game_player.in_vehicle && @params[:turnmap]
  696.       radian = -player.angle * Math::PI / 180
  697.     else
  698.       radian = 0
  699.     end
  700.     events = $game_map.events.values
  701.     $game_map.vehicles.each {|v| events << v unless v.transparent || v.driving }
  702.     events.each do |event|
  703.       i = event.mark_index
  704.       next unless i
  705.       dx = $game_map.adjust_x(event.real_x) - psx
  706.       dy = $game_map.adjust_y(event.real_y) - psy
  707.       ed = Math.hypot(dx, dy)
  708.       next if ed > radius || ed == 0
  709.       @marker_bitmaps[i] ||= make_marker_bitmap(MarkerData, get_color(i))
  710.       marker = @marker_bitmaps[i]
  711.       if radian != 0
  712.         rr = Math.atan2(dx, dy) + radian
  713.         dx = ed * Math.sin(rr)
  714.         dy = ed * Math.cos(rr)
  715.       end
  716.       ex = dx * x_rate - marker.width / 2
  717.       ey = dy * y_rate - marker.height / 2
  718.       bitmap.blt(cx + ex, cy + ey, marker, marker.rect)
  719.     end
  720.   end
  721. end

  722. #==============================================================================
  723. # ■ Spriteset_Map
  724. #==============================================================================
  725. class Spriteset_Map
  726.   #--------------------------------------------------------------------------
  727.   # ○ オブジェクト初期化
  728.   #--------------------------------------------------------------------------
  729.   alias _wdtk_simpmap_initialize initialize
  730.   def initialize
  731.     create_simpmap
  732.     _wdtk_simpmap_initialize
  733.   end
  734.   #--------------------------------------------------------------------------
  735.   # ○ 解放
  736.   #--------------------------------------------------------------------------
  737.   alias _wdtk_simpmap_dispose dispose
  738.   def dispose
  739.     dispose_simpmap
  740.     _wdtk_simpmap_dispose
  741.   end
  742.   #--------------------------------------------------------------------------
  743.   # ○ フレーム更新
  744.   #--------------------------------------------------------------------------
  745.   alias _wdtk_simpmap_update update
  746.   def update
  747.     _wdtk_simpmap_update
  748.     update_simpmap
  749.   end
  750.   #--------------------------------------------------------------------------
  751.   # ● 簡易マップの作成
  752.   #--------------------------------------------------------------------------
  753.   def create_simpmap
  754.     @spriteset_simpmap   = Spriteset_SimpleMap.new
  755.     @spriteset_simpmap.viewport = @viewport if WdTk.include?(:Veh3D)
  756.   end
  757.   #--------------------------------------------------------------------------
  758.   # ● 簡易マップの解放
  759.   #--------------------------------------------------------------------------
  760.   def dispose_simpmap
  761.     @spriteset_simpmap.dispose
  762.   end
  763.   #--------------------------------------------------------------------------
  764.   # ● 簡易マップの更新
  765.   #--------------------------------------------------------------------------
  766.   def update_simpmap
  767.     @spriteset_simpmap.update
  768.   end
  769. end

  770. #==============================================================================
  771. # ■ Spriteset_Vehicle
  772. #==============================================================================
  773. if WdTk.include?(:Veh3D)
  774. class Spriteset_Vehicle
  775.   #--------------------------------------------------------------------------
  776.   # ● 簡易マップの更新
  777.   #--------------------------------------------------------------------------
  778.   def update_simpmap
  779.     (60 / Graphics.frame_rate).times { super }
  780.   end
  781. end
  782. end
复制代码

点评

谢谢哦  发表于 2014-7-14 17:38
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-14 08:44

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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