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

Project1

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

[有事请教] 关于ACE载具精灵切换绑定往返地图环境的问题(已完成)

[复制链接]

Lv2.观梦者

梦石
0
星屑
784
在线时间
131 小时
注册时间
2016-8-12
帖子
59
跳转到指定楼层
1
发表于 2026-2-14 22:33:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 zsy120989 于 2026-2-20 16:20 编辑

RUBY 代码复制下载
  1. #encoding:utf-8
  2. #==============================================================================
  3. # ■ Game_Map
  4. #------------------------------------------------------------------------------
  5. #  管理地图的类。拥有卷动地图以及判断通行度的功能。
  6. #   本类的实例请参考 $game_map 。
  7. #==============================================================================
  8.  
  9. class Game_Map
  10.   #--------------------------------------------------------------------------
  11.   # ● 定义实例变量
  12.   #--------------------------------------------------------------------------
  13.   attr_reader   :screen                   # 地图画面的状态
  14.   attr_reader   :interpreter              # 地图事件用事件解释器
  15.   attr_reader   :events                   # 事件
  16.   attr_reader   :display_x                # 显示 X 坐标
  17.   attr_reader   :display_y                # 显示 Y 坐标
  18.   attr_reader   :parallax_name            # 远景图文件名
  19.   attr_reader   :vehicles                 # 载具
  20.   attr_reader   :battleback1_name         # 战斗背景(地面)文件名
  21.   attr_reader   :battleback2_name         # 战斗背景(墙壁)文件名
  22.   attr_accessor :name_display             # 地图名显示的标志
  23.   attr_accessor :need_refresh             # 刷新要求的标志
  24.   #--------------------------------------------------------------------------
  25.   # ● 初始化对象
  26.   #--------------------------------------------------------------------------
  27.   def initialize
  28.     @screen = Game_Screen.new
  29.     @interpreter = Game_Interpreter.new
  30.     @map_id = 0
  31.     @events = {}
  32.     @display_x = 0
  33.     @display_y = 0
  34.     create_vehicles
  35.     @name_display = true
  36.   end
  37.   #--------------------------------------------------------------------------
  38.   # ● 设置
  39.   #--------------------------------------------------------------------------
  40.   def setup(map_id)
  41.     @map_id = map_id
  42.     @map = load_data(sprintf("Data/Map%03d.rvdata2", @map_id))
  43.     @tileset_id = @map.tileset_id
  44.     @display_x = 0
  45.     @display_y = 0
  46.     referesh_vehicles
  47.     setup_events
  48.     setup_scroll
  49.     setup_parallax
  50.     setup_battleback
  51.     @need_refresh = false
  52.   end
  53.   #--------------------------------------------------------------------------
  54.   # ● 生成载具
  55.   #--------------------------------------------------------------------------
  56.   def create_vehicles
  57.     @vehicles = []
  58.     @vehicles[0] = Game_Vehicle.new(:boat)
  59.     @vehicles[1] = Game_Vehicle.new(:ship)
  60.     @vehicles[2] = Game_Vehicle.new(:airship)
  61.   end
  62.   #--------------------------------------------------------------------------
  63.   # ● 更新载具
  64.   #--------------------------------------------------------------------------
  65.   def referesh_vehicles
  66.     @vehicles.each {|vehicle| vehicle.refresh }
  67.   end
  68.   #--------------------------------------------------------------------------
  69.   # ● 获取载具
  70.   #--------------------------------------------------------------------------
  71.   def vehicle(type)
  72.     return @vehicles[0] if type == :boat
  73.     return @vehicles[1] if type == :ship
  74.     return @vehicles[2] if type == :airship
  75.     return nil
  76.   end
  77.   #--------------------------------------------------------------------------
  78.   # ● 获取汽车
  79.   #--------------------------------------------------------------------------
  80.   def boat
  81.     @vehicles[0]
  82.   end
  83.   #--------------------------------------------------------------------------
  84.   # ● 获取大船
  85.   #--------------------------------------------------------------------------
  86.   def ship
  87.     @vehicles[1]
  88.   end
  89.   #--------------------------------------------------------------------------
  90.   # ● 获取飞艇
  91.   #--------------------------------------------------------------------------
  92.   def airship
  93.     @vehicles[2]
  94.   end
  95.   #--------------------------------------------------------------------------
  96.   # ● 设置事件
  97.   #--------------------------------------------------------------------------
  98.   def setup_events
  99.     @events = {}
  100.     @map.events.each do |i, event|
  101.       @events[i] = Game_Event.new(@map_id, event)
  102.     end
  103.     @common_events = parallel_common_events.collect do |common_event|
  104.       Game_CommonEvent.new(common_event.id)
  105.     end
  106.     refresh_tile_events
  107.   end
  108.   #--------------------------------------------------------------------------
  109.   # ● 获取并行处理的公共事件的数组
  110.   #--------------------------------------------------------------------------
  111.   def parallel_common_events
  112.     $data_common_events.select {|event| event && event.parallel? }
  113.   end
  114.   #--------------------------------------------------------------------------
  115.   # ● 设置卷动
  116.   #--------------------------------------------------------------------------
  117.   def setup_scroll
  118.     @scroll_direction = 2
  119.     @scroll_rest = 0
  120.     @scroll_speed = 4
  121.   end
  122.   #--------------------------------------------------------------------------
  123.   # ● 设置远景图
  124.   #--------------------------------------------------------------------------
  125.   def setup_parallax
  126.     @parallax_name = @map.parallax_name
  127.     @parallax_loop_x = @map.parallax_loop_x
  128.     @parallax_loop_y = @map.parallax_loop_y
  129.     @parallax_sx = @map.parallax_sx
  130.     @parallax_sy = @map.parallax_sy
  131.     @parallax_x = 0
  132.     @parallax_y = 0
  133.   end
  134.   #--------------------------------------------------------------------------
  135.   # ● 设置战斗背景
  136.   #--------------------------------------------------------------------------
  137.   def setup_battleback
  138.     if @map.specify_battleback
  139.       @battleback1_name = @map.battleback1_name
  140.       @battleback2_name = @map.battleback2_name
  141.     else
  142.       @battleback1_name = nil
  143.       @battleback2_name = nil
  144.     end
  145.   end
  146.   #--------------------------------------------------------------------------
  147.   # ● 设置显示位置
  148.   #--------------------------------------------------------------------------
  149.   def set_display_pos(x, y)
  150.     x = [0, [x, width - screen_tile_x].min].max unless loop_horizontal?
  151.     y = [0, [y, height - screen_tile_y].min].max unless loop_vertical?
  152.     @display_x = (x + width) % width
  153.     @display_y = (y + height) % height
  154.     @parallax_x = x
  155.     @parallax_y = y
  156.   end
  157.   #--------------------------------------------------------------------------
  158.   # ● 计算远景图显示的原点 X 坐标
  159.   #--------------------------------------------------------------------------
  160.   def parallax_ox(bitmap)
  161.     if @parallax_loop_x
  162.       @parallax_x * 16
  163.     else
  164.       w1 = [bitmap.width - Graphics.width, 0].max
  165.       w2 = [width * 32 - Graphics.width, 1].max
  166.       @parallax_x * 16 * w1 / w2
  167.     end
  168.   end
  169.   #--------------------------------------------------------------------------
  170.   # ● 计算远景图显示的原点 Y 坐标
  171.   #--------------------------------------------------------------------------
  172.   def parallax_oy(bitmap)
  173.     if @parallax_loop_y
  174.       @parallax_y * 16
  175.     else
  176.       h1 = [bitmap.height - Graphics.height, 0].max
  177.       h2 = [height * 32 - Graphics.height, 1].max
  178.       @parallax_y * 16 * h1 / h2
  179.     end
  180.   end
  181.   #--------------------------------------------------------------------------
  182.   # ● 获取地图 ID
  183.   #--------------------------------------------------------------------------
  184.   def map_id
  185.     @map_id
  186.   end
  187.   #--------------------------------------------------------------------------
  188.   # ● 获取图块组
  189.   #--------------------------------------------------------------------------
  190.   def tileset
  191.     $data_tilesets[@tileset_id]
  192.   end
  193.   #--------------------------------------------------------------------------
  194.   # ● 获取显示名称
  195.   #--------------------------------------------------------------------------
  196.   def display_name
  197.     @map.display_name
  198.   end
  199.   #--------------------------------------------------------------------------
  200.   # ● 获取宽度
  201.   #--------------------------------------------------------------------------
  202.   def width
  203.     @map.width
  204.   end
  205.   #--------------------------------------------------------------------------
  206.   # ● 获取高度
  207.   #--------------------------------------------------------------------------
  208.   def height
  209.     @map.height
  210.   end
  211.   #--------------------------------------------------------------------------
  212.   # ● 获取是否横向循环
  213.   #--------------------------------------------------------------------------
  214.   def loop_horizontal?
  215.     @map.scroll_type == 2 || @map.scroll_type == 3
  216.   end
  217.   #--------------------------------------------------------------------------
  218.   # ● 获取是否纵向循环
  219.   #--------------------------------------------------------------------------
  220.   def loop_vertical?
  221.     @map.scroll_type == 1 || @map.scroll_type == 3
  222.   end
  223.   #--------------------------------------------------------------------------
  224.   # ● 获取是否禁止跑步
  225.   #--------------------------------------------------------------------------
  226.   def disable_dash?
  227.     @map.disable_dashing
  228.   end
  229.   #--------------------------------------------------------------------------
  230.   # ● 获取遇敌列表
  231.   #--------------------------------------------------------------------------
  232.   def encounter_list
  233.     @map.encounter_list
  234.   end
  235.   #--------------------------------------------------------------------------
  236.   # ● 获取遇敌步数
  237.   #--------------------------------------------------------------------------
  238.   def encounter_step
  239.     @map.encounter_step
  240.   end
  241.   #--------------------------------------------------------------------------
  242.   # ● 获取地图数据
  243.   #--------------------------------------------------------------------------
  244.   def data
  245.     @map.data
  246.   end
  247.   #--------------------------------------------------------------------------
  248.   # ● 是否环球类型
  249.   #--------------------------------------------------------------------------
  250.   def overworld?
  251.     tileset.mode == 0
  252.   end
  253.   #--------------------------------------------------------------------------
  254.   # ● 画面的横向图块数
  255.   #--------------------------------------------------------------------------
  256.   def screen_tile_x
  257.     Graphics.width / 32
  258.   end
  259.   #--------------------------------------------------------------------------
  260.   # ● 画面的纵向图块数
  261.   #--------------------------------------------------------------------------
  262.   def screen_tile_y
  263.     Graphics.height / 32
  264.   end
  265.   #--------------------------------------------------------------------------
  266.   # ● 计算显示坐标的剩余 X 坐标
  267.   #--------------------------------------------------------------------------
  268.   def adjust_x(x)
  269.     if loop_horizontal? && x < @display_x - (width - screen_tile_x) / 2
  270.       x - @display_x + @map.width
  271.     else
  272.       x - @display_x
  273.     end
  274.   end
  275.   #--------------------------------------------------------------------------
  276.   # ● 计算显示坐标的剩余 Y 坐标
  277.   #--------------------------------------------------------------------------
  278.   def adjust_y(y)
  279.     if loop_vertical? && y < @display_y - (height - screen_tile_y) / 2
  280.       y - @display_y + @map.height
  281.     else
  282.       y - @display_y
  283.     end
  284.   end
  285.   #--------------------------------------------------------------------------
  286.   # ● 计算循环修正后的 X 坐标
  287.   #--------------------------------------------------------------------------
  288.   def round_x(x)
  289.     loop_horizontal? ? (x + width) % width : x
  290.   end
  291.   #--------------------------------------------------------------------------
  292.   # ● 计算循环修正后的 Y 坐标
  293.   #--------------------------------------------------------------------------
  294.   def round_y(y)
  295.     loop_vertical? ? (y + height) % height : y
  296.   end
  297.   #--------------------------------------------------------------------------
  298.   # ● 计算特定方向推移一个图块的 X 坐标(没有循环修正)
  299.   #--------------------------------------------------------------------------
  300.   def x_with_direction(x, d)
  301.     x + (d == 6 ? 1 : d == 4 ? -1 : 0)
  302.   end
  303.   #--------------------------------------------------------------------------
  304.   # ● 计算特定方向推移一个图块的 Y 坐标(没有循环修正)
  305.   #--------------------------------------------------------------------------
  306.   def y_with_direction(y, d)
  307.     y + (d == 2 ? 1 : d == 8 ? -1 : 0)
  308.   end
  309.   #--------------------------------------------------------------------------
  310.   # ● 计算特定方向推移一个图块的 X 坐标(没有循环修正)
  311.   #--------------------------------------------------------------------------
  312.   def round_x_with_direction(x, d)
  313.     round_x(x + (d == 6 ? 1 : d == 4 ? -1 : 0))
  314.   end
  315.   #--------------------------------------------------------------------------
  316.   # ● 计算特定方向推移一个图块的 Y 坐标(没有循环修正)
  317.   #--------------------------------------------------------------------------
  318.   def round_y_with_direction(y, d)
  319.     round_y(y + (d == 2 ? 1 : d == 8 ? -1 : 0))
  320.   end
  321.   #--------------------------------------------------------------------------
  322.   # ● 自动切换 BGM / BGS
  323.   #--------------------------------------------------------------------------
  324.   def autoplay
  325.     @map.bgm.play if @map.autoplay_bgm
  326.     @map.bgs.play if @map.autoplay_bgs
  327.   end
  328.   #--------------------------------------------------------------------------
  329.   # ● 刷新
  330.   #--------------------------------------------------------------------------
  331.   def refresh
  332.     @events.each_value {|event| event.refresh }
  333.     @common_events.each {|event| event.refresh }
  334.     refresh_tile_events
  335.     @need_refresh = false
  336.   end
  337.   #--------------------------------------------------------------------------
  338.   # ● 更新图块事件的数组
  339.   #--------------------------------------------------------------------------
  340.   def refresh_tile_events
  341.     @tile_events = @events.values.select {|event| event.tile? }
  342.   end
  343.   #--------------------------------------------------------------------------
  344.   # ● 获取指定坐标处存在的事件的数组
  345.   #--------------------------------------------------------------------------
  346.   def events_xy(x, y)
  347.     @events.values.select {|event| event.pos?(x, y) }
  348.   end
  349.   #--------------------------------------------------------------------------
  350.   # ● 获取指定坐标处存在的事件(穿透以外)的数组
  351.   #--------------------------------------------------------------------------
  352.   def events_xy_nt(x, y)
  353.     @events.values.select {|event| event.pos_nt?(x, y) }
  354.   end
  355.   #--------------------------------------------------------------------------
  356.   # ● 获取指定坐标处存在的图块事件(穿透以外)的数组
  357.   #--------------------------------------------------------------------------
  358.   def tile_events_xy(x, y)
  359.     @tile_events.select {|event| event.pos_nt?(x, y) }
  360.   end
  361.   #--------------------------------------------------------------------------
  362.   # ● 获取指定坐标处存在的事件的 ID (仅一个)
  363.   #--------------------------------------------------------------------------
  364.   def event_id_xy(x, y)
  365.     list = events_xy(x, y)
  366.     list.empty? ? 0 : list[0].id
  367.   end
  368.   #--------------------------------------------------------------------------
  369.   # ● 向下卷动
  370.   #--------------------------------------------------------------------------
  371.   def scroll_down(distance)
  372.     if loop_vertical?
  373.       @display_y += distance
  374.       @display_y %= @map.height
  375.       @parallax_y += distance if @parallax_loop_y
  376.     else
  377.       last_y = @display_y
  378.       @display_y = [@display_y + distance, height - screen_tile_y].min
  379.       @parallax_y += @display_y - last_y
  380.     end
  381.   end
  382.   #--------------------------------------------------------------------------
  383.   # ● 向左卷动
  384.   #--------------------------------------------------------------------------
  385.   def scroll_left(distance)
  386.     if loop_horizontal?
  387.       @display_x += @map.width - distance
  388.       @display_x %= @map.width
  389.       @parallax_x -= distance if @parallax_loop_x
  390.     else
  391.       last_x = @display_x
  392.       @display_x = [@display_x - distance, 0].max
  393.       @parallax_x += @display_x - last_x
  394.     end
  395.   end
  396.   #--------------------------------------------------------------------------
  397.   # ● 向右卷动
  398.   #--------------------------------------------------------------------------
  399.   def scroll_right(distance)
  400.     if loop_horizontal?
  401.       @display_x += distance
  402.       @display_x %= @map.width
  403.       @parallax_x += distance if @parallax_loop_x
  404.     else
  405.       last_x = @display_x
  406.       @display_x = [@display_x + distance, (width - screen_tile_x)].min
  407.       @parallax_x += @display_x - last_x
  408.     end
  409.   end
  410.   #--------------------------------------------------------------------------
  411.   # ● 向上卷动
  412.   #--------------------------------------------------------------------------
  413.   def scroll_up(distance)
  414.     if loop_vertical?
  415.       @display_y += @map.height - distance
  416.       @display_y %= @map.height
  417.       @parallax_y -= distance if @parallax_loop_y
  418.     else
  419.       last_y = @display_y
  420.       @display_y = [@display_y - distance, 0].max
  421.       @parallax_y += @display_y - last_y
  422.     end
  423.   end
  424.   #--------------------------------------------------------------------------
  425.   # ● 有效坐标判定
  426.   #--------------------------------------------------------------------------
  427.   def valid?(x, y)
  428.     x >= 0 && x < width && y >= 0 && y < height
  429.   end
  430.   #--------------------------------------------------------------------------
  431.   # ● 通行检查
  432.   #     bit : 判断通行禁止与否的字节(请参照二进制运算)
  433.   #--------------------------------------------------------------------------
  434.   def check_passage(x, y, bit)
  435.     all_tiles(x, y).each do |tile_id|
  436.       flag = tileset.flags[tile_id]
  437.       next if flag & 0x10 != 0            # [☆] : 不影响通行
  438.       return true  if flag & bit == 0     # [○] : 可以通行
  439.       return false if flag & bit == bit   # [×] : 不能通行
  440.     end
  441.     return false                          # 不能通行
  442.   end
  443.   #--------------------------------------------------------------------------
  444.   # ● 获取指定坐标处的图块 ID
  445.   #--------------------------------------------------------------------------
  446.   def tile_id(x, y, z)
  447.     @map.data[x, y, z] || 0
  448.   end
  449.   #--------------------------------------------------------------------------
  450.   # ● (由上至下)获取指定坐标处所有层次的图块数组
  451.   #--------------------------------------------------------------------------
  452.   def layered_tiles(x, y)
  453.     [2, 1, 0].collect {|z| tile_id(x, y, z) }
  454.   end
  455.   #--------------------------------------------------------------------------
  456.   # ● 获取指定坐标处的所有图块数组(包括事件)
  457.   #--------------------------------------------------------------------------
  458.   def all_tiles(x, y)
  459.     tile_events_xy(x, y).collect {|ev| ev.tile_id } + layered_tiles(x, y)
  460.   end
  461.   #--------------------------------------------------------------------------
  462.   # ● 获取指定坐标处的自动原件种类
  463.   #--------------------------------------------------------------------------
  464.   def autotile_type(x, y, z)
  465.     tile_id(x, y, z) >= 2048 ? (tile_id(x, y, z) - 2048) / 48 : -1
  466.   end
  467.   #--------------------------------------------------------------------------
  468.   # ● 判定普通角色是否可以通行
  469.   #     d : 方向(2,4,6,8)
  470.   #    判断该位置的图块指定方向的通行度。
  471.   #--------------------------------------------------------------------------
  472.   def passable?(x, y, d)
  473.     check_passage(x, y, (1 << (d / 2 - 1)) & 0x0f)
  474.   end
  475.   #--------------------------------------------------------------------------
  476.   # ● 判定汽车是否可以通行
  477.   #--------------------------------------------------------------------------
  478.   def boat_passable?(x, y)
  479.     # 检查四个方向,只要有一个方向能进入,就认为该点可通行
  480.     [2, 4, 6, 8].any? { |d| $game_map.passable?(x, y, d) }
  481.   end
  482.   #--------------------------------------------------------------------------
  483.   # ● 判定指定坐标处所有层次的标志(新增辅助方法)
  484.   #--------------------------------------------------------------------------
  485.   def layered_tiles_flag(x, y, bit)
  486.     layered_tiles(x, y).each do |tile_id|
  487.       flag = tileset.flags[tile_id]
  488.       return flag if (flag & bit) != 0
  489.     end
  490.     return 0
  491.   end
  492.   #--------------------------------------------------------------------------
  493.   # ● 判定大船是否可以通行
  494.   #--------------------------------------------------------------------------
  495.   def ship_passable?(x, y)
  496.     check_passage(x, y, 0x0400)
  497.   end
  498.   #--------------------------------------------------------------------------
  499.   # ● 判定飞艇是否可以着陆
  500.   #--------------------------------------------------------------------------
  501.   def airship_land_ok?(x, y)
  502.     check_passage(x, y, 0x0800) && check_passage(x, y, 0x0f)
  503.   end
  504.   #--------------------------------------------------------------------------
  505.   # ● 判定指定坐标处所有层次的标志
  506.   #--------------------------------------------------------------------------
  507.   def layered_tiles_flag?(x, y, bit)
  508.     layered_tiles(x, y).any? {|tile_id| tileset.flags[tile_id] & bit != 0 }
  509.   end
  510.   #--------------------------------------------------------------------------
  511.   # ● 判定是否梯子
  512.   #--------------------------------------------------------------------------
  513.   def ladder?(x, y)
  514.     valid?(x, y) && layered_tiles_flag?(x, y, 0x20)
  515.   end
  516.   #--------------------------------------------------------------------------
  517.   # ● 判定是否草木茂密处
  518.   #--------------------------------------------------------------------------
  519.   def bush?(x, y)
  520.     valid?(x, y) && layered_tiles_flag?(x, y, 0x40)
  521.   end
  522.   #--------------------------------------------------------------------------
  523.   # ● 判定是否柜台属性
  524.   #--------------------------------------------------------------------------
  525.   def counter?(x, y)
  526.     valid?(x, y) && layered_tiles_flag?(x, y, 0x80)
  527.   end
  528.   #--------------------------------------------------------------------------
  529.   # ● 判定是否有害地形
  530.   #--------------------------------------------------------------------------
  531.   def damage_floor?(x, y)
  532.     valid?(x, y) && layered_tiles_flag?(x, y, 0x100)
  533.   end
  534.   #--------------------------------------------------------------------------
  535.   # ● 获取地形标志
  536.   #--------------------------------------------------------------------------
  537.   def terrain_tag(x, y)
  538.     return 0 unless valid?(x, y)
  539.     layered_tiles(x, y).each do |tile_id|
  540.       tag = tileset.flags[tile_id] >> 12
  541.       return tag if tag > 0
  542.     end
  543.     return 0
  544.   end
  545.   #--------------------------------------------------------------------------
  546.   # ● 获取区域 ID
  547.   #--------------------------------------------------------------------------
  548.   def region_id(x, y)
  549.     valid?(x, y) ? @map.data[x, y, 3] >> 8 : 0
  550.   end
  551.   #--------------------------------------------------------------------------
  552.   # ● 开始卷动
  553.   #--------------------------------------------------------------------------
  554.   def start_scroll(direction, distance, speed)
  555.     @scroll_direction = direction
  556.     @scroll_rest = distance
  557.     @scroll_speed = speed
  558.   end
  559.   #--------------------------------------------------------------------------
  560.   # ● 判定是否卷动中
  561.   #--------------------------------------------------------------------------
  562.   def scrolling?
  563.     @scroll_rest > 0
  564.   end
  565.   #--------------------------------------------------------------------------
  566.   # ● 更新画面
  567.   #     main : 事件解释器更新的标志
  568.   #--------------------------------------------------------------------------
  569.   def update(main = false)
  570.     refresh if @need_refresh
  571.     update_interpreter if main
  572.     update_scroll
  573.     update_events
  574.     update_vehicles
  575.     update_parallax
  576.     @screen.update
  577.   end
  578.   #--------------------------------------------------------------------------
  579.   # ● 更新卷动
  580.   #--------------------------------------------------------------------------
  581.   def update_scroll
  582.     return unless scrolling?
  583.     last_x = @display_x
  584.     last_y = @display_y
  585.     do_scroll(@scroll_direction, scroll_distance)
  586.     if @display_x == last_x && @display_y == last_y
  587.       @scroll_rest = 0
  588.     else
  589.       @scroll_rest -= scroll_distance
  590.     end
  591.   end
  592.   #--------------------------------------------------------------------------
  593.   # ● 计算卷动的距离
  594.   #--------------------------------------------------------------------------
  595.   def scroll_distance
  596.     2 ** @scroll_speed / 256.0
  597.   end
  598.   #--------------------------------------------------------------------------
  599.   # ● 执行卷动
  600.   #--------------------------------------------------------------------------
  601.   def do_scroll(direction, distance)
  602.     case direction
  603.     when 2;  scroll_down (distance)
  604.     when 4;  scroll_left (distance)
  605.     when 6;  scroll_right(distance)
  606.     when 8;  scroll_up   (distance)
  607.     end
  608.   end
  609.   #--------------------------------------------------------------------------
  610.   # ● 更新事件
  611.   #--------------------------------------------------------------------------
  612.   def update_events
  613.     @events.each_value {|event| event.update }
  614.     @common_events.each {|event| event.update }
  615.   end
  616.   #--------------------------------------------------------------------------
  617.   # ● 更新载具
  618.   #--------------------------------------------------------------------------
  619.   def update_vehicles
  620.     @vehicles.each {|vehicle| vehicle.update }
  621.   end
  622.   #--------------------------------------------------------------------------
  623.   # ● 更新远景图
  624.   #--------------------------------------------------------------------------
  625.   def update_parallax
  626.     @parallax_x += @parallax_sx / 64.0 if @parallax_loop_x
  627.     @parallax_y += @parallax_sy / 64.0 if @parallax_loop_y
  628.   end
  629.   #--------------------------------------------------------------------------
  630.   # ● 更改图块组
  631.   #--------------------------------------------------------------------------
  632.   def change_tileset(tileset_id)
  633.     @tileset_id = tileset_id
  634.     refresh
  635.   end
  636.   #--------------------------------------------------------------------------
  637.   # ● 更改战斗背景
  638.   #--------------------------------------------------------------------------
  639.   def change_battleback(battleback1_name, battleback2_name)
  640.     @battleback1_name = battleback1_name
  641.     @battleback2_name = battleback2_name
  642.   end
  643.   #--------------------------------------------------------------------------
  644.   # ● 更改远景图
  645.   #--------------------------------------------------------------------------
  646.   def change_parallax(name, loop_x, loop_y, sx, sy)
  647.     @parallax_name = name
  648.     @parallax_x = 0 if @parallax_loop_x && !loop_x
  649.     @parallax_y = 0 if @parallax_loop_y && !loop_y
  650.     @parallax_loop_x = loop_x
  651.     @parallax_loop_y = loop_y
  652.     @parallax_sx = sx
  653.     @parallax_sy = sy
  654.   end
  655.   #--------------------------------------------------------------------------
  656.   # ● 更新事件解释器
  657.   #--------------------------------------------------------------------------
  658.   def update_interpreter
  659.     loop do
  660.       @interpreter.update
  661.       return if @interpreter.running?
  662.       if @interpreter.event_id > 0
  663.         unlock_event(@interpreter.event_id)
  664.         @interpreter.clear
  665.       end
  666.       return unless setup_starting_event
  667.     end
  668.   end
  669.   #--------------------------------------------------------------------------
  670.   # ● 解锁事件
  671.   #--------------------------------------------------------------------------
  672.   def unlock_event(event_id)
  673.     @events[event_id].unlock if @events[event_id]
  674.   end
  675.   #--------------------------------------------------------------------------
  676.   # ● 设置启动中事件
  677.   #--------------------------------------------------------------------------
  678.   def setup_starting_event
  679.     refresh if @need_refresh
  680.     return true if @interpreter.setup_reserved_common_event
  681.     return true if setup_starting_map_event
  682.     return true if setup_autorun_common_event
  683.     return false
  684.   end
  685.   #--------------------------------------------------------------------------
  686.   # ● 判定是否拥有启动中地图事件
  687.   #--------------------------------------------------------------------------
  688.   def any_event_starting?
  689.     @events.values.any? {|event| event.starting }
  690.   end
  691.   #--------------------------------------------------------------------------
  692.   # ● 检测/设置启动中的地图事件
  693.   #--------------------------------------------------------------------------
  694.   def setup_starting_map_event
  695.     event = @events.values.find {|event| event.starting }
  696.     event.clear_starting_flag if event
  697.     @interpreter.setup(event.list, event.id) if event
  698.     event
  699.   end
  700.   #--------------------------------------------------------------------------
  701.   # ● 检测/设置自动执行的公共事件
  702.   #--------------------------------------------------------------------------
  703.   def setup_autorun_common_event
  704.     event = $data_common_events.find do |event|
  705.       event && event.autorun? && $game_switches[event.switch_id]
  706.     end
  707.     @interpreter.setup(event.list) if event
  708.     event
  709.   end
  710.   #--------------------------------------------------------------------------
  711.   # ● 检测/设置自动执行的公共事件
  712.   #--------------------------------------------------------------------------
  713.   def setup_autorun_common_event
  714.     event = $data_common_events.find do |event|
  715.       event && event.autorun? && $game_switches[event.switch_id]
  716.     end
  717.     @interpreter.setup(event.list) if event
  718.     event
  719.   end
  720.   #--------------------------------------------------------------------------
  721.   # ● 无图块区域禁止通行(人物、汽车、大船全部生效)
  722.   #--------------------------------------------------------------------------
  723.   alias old_passable_passable passable?
  724.   def passable?(x, y, d)
  725.     return false if data[x, y, 0] == 0
  726.     old_passable_passable(x, y, d)
  727.   end
  728. end


只要努力就会有结果,做事要有坚持的心态。

Lv5.捕梦者

梦石
0
星屑
29116
在线时间
5658 小时
注册时间
2016-3-8
帖子
1723
2
发表于 2026-2-15 12:25:58 | 只看该作者
CSCA - 车辆内饰

车辆内部发布日期:2012年3月18日
最新更新:2012年5月26日
版本:1.1
此脚本允许您按下按钮,即可传送至您当前乘坐的载具内部。目前仅支持飞船和飞艇。要返回载具外部,您只需调用一个脚本即可。更多操作说明请参阅脚本本身。

获取脚本
https://www.caspergaming.com/scripts/csca/vehicleinterior/

有现成~为啥还要自己写呢~
回复 支持 1 反对 0

使用道具 举报

Lv2.观梦者

梦石
0
星屑
784
在线时间
131 小时
注册时间
2016-8-12
帖子
59
3
 楼主| 发表于 2026-2-15 12:50:03 | 只看该作者
alexncf125 发表于 2026-2-15 12:25
CSCA - 车辆内饰

车辆内部发布日期:2012年3月18日

有点不太理想

点评

哦~那你继续加油~我先溜了~  发表于 2026-2-15 12:56
只要努力就会有结果,做事要有坚持的心态。
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
784
在线时间
131 小时
注册时间
2016-8-12
帖子
59
4
 楼主| 发表于 2026-2-15 13:07:01 | 只看该作者
alexncf125 发表于 2026-2-15 12:25
CSCA - 车辆内饰

车辆内部发布日期:2012年3月18日

嘿嘿 稍微修复了几个问题
只要努力就会有结果,做事要有坚持的心态。
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
784
在线时间
131 小时
注册时间
2016-8-12
帖子
59
5
 楼主| 发表于 2026-2-20 15:22:08 | 只看该作者
上面是修正的Game_Map官方文件脚本
只要努力就会有结果,做事要有坚持的心态。
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
784
在线时间
131 小时
注册时间
2016-8-12
帖子
59
6
 楼主| 发表于 2026-2-20 16:17:12 | 只看该作者
alexncf125 发表于 2026-2-15 12:25
CSCA - 车辆内饰

车辆内部发布日期:2012年3月18日

感谢你分享的案例,我把想做的找打了,修改了重新编辑发出来了,十分感谢
只要努力就会有结果,做事要有坚持的心态。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-6-4 15:45

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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