Project1

标题: XP有没有办法调整事件的优先级? [打印本页]

作者: 1243852    时间: 2015-4-25 21:13
标题: XP有没有办法调整事件的优先级?
VX 和 VA 貌似都有这个功能,,,用XP做游戏做了一半。。。

不知道XP有没有办法通过一些简单的东西,或者脚本,来调整事件的优先级?


就是事件设置成可以穿透,,但是要让事件在主角脚下。
作者: H·H·Y    时间: 2015-4-25 21:41

作者: 汪汪    时间: 2015-4-25 22:13
把z值调低就可以吧。
作者: cinderelmini    时间: 2015-4-25 22:16
本帖最后由 cinderelmini 于 2017-4-24 14:59 编辑

参考VA做了一下,因为不知道怎么读取注释,所以只能用名字来设置了,
设置方法为:在事件命名的时候,末尾用“#n”的形式设置优先级,n为-1~1,,-1为角色下,0为同层,1为角色上,
但是穿透需要自行设置。
代码如下(Mian前Insert,冲突未知):


  1. class Game_Character
  2.   #--------------------------------------------------------------------------
  3.   # ● 初始化对像
  4.   #--------------------------------------------------------------------------
  5.   alias sny46_170424_init initialize
  6.   def initialize
  7.     sny46_170424_init
  8.     # 默认角色优先级
  9.     @priority_type = 0
  10.   end
  11.   
  12.   #--------------------------------------------------------------------------
  13.   # ● 获取画面 Z 坐标
  14.   #     height : 角色的高度
  15.   #--------------------------------------------------------------------------
  16.   def screen_z(height = 0)
  17.     # 在最前显示的标志为 ON 的情况下
  18.     if @always_on_top
  19.       # 无条件设置为 999
  20.       return 999
  21.     end
  22.     # 通过实际坐标和地图的显示位置来求得画面坐标
  23.     z = (@real_y - $game_map.display_y + 3) / 4 + 32
  24.     # 元件的情况下
  25.     if @tile_id > 0
  26.       # 元件的优先不足 * 32
  27.       return z + $game_map.priorities[@tile_id] * 32
  28.     # 角色的场合
  29.     else
  30.       # 如果高度超过 32 就判定为满足 31(加上优先级计算)
  31.       return z + ((height > 32) ? 31 : 0) + @priority_type * 100
  32.     end
  33.   end
  34. end


  35. class Game_Event < Game_Character
  36.   #--------------------------------------------------------------------------
  37.   # ● 初始化对像
  38.   #     map_id : 地图 ID
  39.   #     event  : 事件 (RPG::Event)
  40.   #--------------------------------------------------------------------------
  41.   alias sny46_170424_init_event initialize
  42.   def initialize(map_id, event)
  43.     sny46_170424_init_event(map_id, event)
  44.     # 初始化优先级并刷新
  45.     @priority_type = @event.priority_type
  46.     refresh
  47.   end
  48.   
  49. end

  50. module RPG
  51.   attr_accessor :priority_type
  52.   class Event
  53.     # 初始化
  54.     alias old_init initialize
  55.     def initialize(x, y)
  56.       old_init(x, y)
  57.       # 初始化优先级
  58.       @priority_type = priority_type
  59.     end
  60.    
  61.     # 重新获取名字
  62.     def name
  63.       if @name.split(/#/)[1] == nil
  64.         return @name
  65.       else
  66.         return @name.split(/#/)[0]
  67.       end
  68.     end
  69.    
  70.     # 获取优先级,同名字写在一起,用#分开
  71.     def priority_type
  72.       return @name.split(/#/)[1] ? @name.split(/#/)[1].to_f : 0
  73.     end
  74.   end
  75. end

复制代码

作者: 1243852    时间: 2015-4-26 10:53
cinderelmini 发表于 2015-4-25 22:16
参考VA做了一下,因为不知道怎么读取注释,所以只能用名字来设置了,
设置方法为:在事件命名的时候,末尾 ...

有BUG,看有没有办法解决? 我把地图元件的优先级调到了  ★3  也比主角矮。。导致了,主角可以踩着墙或者桌子,。而不是被墙或者桌子遮挡。





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1