Project1

标题: 怎么让实现事件显示在图片的前面? [打印本页]

作者: 没是的人    时间: 2013-9-4 00:14
标题: 怎么让实现事件显示在图片的前面?
本帖最后由 没是的人 于 2013-9-5 20:27 编辑

正常情况下,显示图片会盖住事件,
如何让部分或者全部是事件显示在图片的前面(换句话说就是事件的行走图优先级比图片高)
比如用脚本实现:
1.事件里含有特定符号。比如“#商店npc”,在事件名称前+#号的事件会显示在图片的上面
2.部分地图id的事件,行走图会在图片上面
要求:
不要发双远景脚本什么的。。我有。。。
最好是外挂脚本,插入就能用的那种,实现的途径也最好是上面两种
报酬:
我自己来塞糖拉,@管理来给分拉,龙骑士还是比较可观的,谢谢肯帮忙的大师了
作者: gaofei677    时间: 2013-9-4 14:04
很简单,把图片的Z值调低, 或者加一个Z值的控制变量
作者: Sion    时间: 2013-9-4 14:09
首先是 Viewport 的Z值决定该 Viewport 里的所有精灵的优先级,在同一个 Viewport 里的话就是按精灵的Z值决定显示优先级了
你说的情况需要修改图片精灵的 Viewport ,让它们使用地图的那个
作者: fangyc    时间: 2013-9-4 20:22
临时写了一个脚本,如有bug请指出~~
脚本的第3和第6行可以自行修改,用来调整显示的优先度
RUBY 代码复制
  1. #==============================================================================
  2. # 设置不会被图片覆盖的地图id
  3. NON_COVERED_MAP_ID = [1, 2, 3, 4]
  4.  
  5. # 设置不会被图片覆盖的事件名字前缀
  6. NON_COVERED_EVT_NAME_PREF = "#"
  7. #==============================================================================
  8.  
  9. #==============================================================================
  10. class Game_Event < Game_Character
  11.   #--------------------------------------------------------------------------
  12.   # ● 获取事件名
  13.   #--------------------------------------------------------------------------
  14.   def name
  15.     @event.name
  16.   end
  17. end
  18.  
  19. #==============================================================================
  20. class Game_Pictures
  21.   #--------------------------------------------------------------------------
  22.   # ● 获取图片列表的尺寸
  23.   #--------------------------------------------------------------------------
  24.   def size
  25.     @data.size
  26.   end
  27. end
  28.  
  29. #==============================================================================
  30. class Sprite_Character < Sprite_Base
  31.   #--------------------------------------------------------------------------
  32.   # ● 更新位置
  33.   #--------------------------------------------------------------------------
  34.   alias non_covered_update_position update_position
  35.   def update_position
  36.     non_covered_update_position
  37.     if NON_COVERED_MAP_ID.index($game_map.map_id) ||
  38.       self.character.is_a?(Game_Event) &&
  39.       self.character.name.index(NON_COVERED_EVT_NAME_PREF) == 0
  40.       self.z += $game_map.screen.pictures.size + 1
  41.     end
  42.   end
  43. end
  44.  
  45. #==============================================================================
  46. class Sprite_Picture < Sprite
  47.   #--------------------------------------------------------------------------
  48.   # ● 更新位置
  49.   #--------------------------------------------------------------------------
  50.   alias non_covered_update_position update_position
  51.   def update_position
  52.     non_covered_update_position
  53.     self.z += 100
  54.   end
  55. end
  56.  
  57. #==============================================================================
  58. class Spriteset_Map
  59.   #--------------------------------------------------------------------------
  60.   # ● 更新图片精灵
  61.   #--------------------------------------------------------------------------
  62.   def update_pictures
  63.     $game_map.screen.pictures.each do |pic|
  64.       @picture_sprites[pic.number] ||= Sprite_Picture.new(@viewport1, pic)
  65.       @picture_sprites[pic.number].update
  66.     end
  67.   end
  68. end

作者: 没是的人    时间: 2013-9-4 22:00
fangyc 发表于 2013-9-4 20:22
临时写了一个脚本,如有bug请指出~~
脚本的第3和第6行可以自行修改,用来调整显示的优先度
#============== ...

有点小bug,拥有优先级的图块也会跑到图片的上方去,而且不受地图id的限制
作者: fangyc    时间: 2013-9-5 07:44
恩…这个问题好像有点矛盾…设了优先级的图块本来就是显示在事件前面的吧?
要保证图块显示在事件上面,图片显示在事件下面,这貌似用同一个显示端口是没法实现的……
作者: 没是的人    时间: 2013-9-5 09:22
fangyc 发表于 2013-9-5 07:44
恩…这个问题好像有点矛盾…设了优先级的图块本来就是显示在事件前面的吧?
要保证图块显示在事件上面,图 ...


你说的这个我明白,但是一个比较严重的问题是:
没有写到NON_COVERED_MAP_ID里的id的地图也出现了这种情况
也就是说,我不想用这个脚本的地图,里面的图块设置了优先级也会跑到图片的上面去。
希望大神再帮我改改,谢谢

另外。如果能改成提高事件z值来实现而不是降低图片z值的话就没这个问题
(虽然事件会跑到优先级图块的上面。但是我应用的场合里无所谓的)
作者: fangyc    时间: 2013-9-5 09:39
有最后一句话可能就好办了…
设了优先级的图块的Z值是多少似乎是内部定义好的,从脚本里看不到
你可以试着分别增加40行和53行的Z值,原来已经加上的值不要变,然后再往上增加
比如都再各加50看看是不是有效
这两行加的值必须是一样的
作者: 没是的人    时间: 2013-9-5 09:45
fangyc 发表于 2013-9-5 09:39
有最后一句话可能就好办了…
设了优先级的图块的Z值是多少似乎是内部定义好的,从脚本里看不到
你可以试着 ...

好的,我能用家里电脑的时候试试,或者尝试把XXXX.z的值p出来

另外,第一个问题怎么解决呢?为什么会在不需要使用这个脚本的地图里也出现错位呢?
作者: fangyc    时间: 2013-9-5 10:13
没是的人 发表于 2013-9-5 09:45
好的,我能用家里电脑的时候试试,或者尝试把XXXX.z的值p出来

另外,第一个问题怎么解决呢?为什么会在 ...

那是因为图片的显示端口从原来的viewport2改到跟事件同一层的viewport1了,否则不管怎么改z,veiwport2的图像永远都会显示在viewport1前。
解决第一个问题的话应该只要判断一下如果不在地图id列表里的话图片还是使用viewport2就行了,但是同样事件名前加了#的事件也会失效。
不过如果通过刚才说的改z值能解决的话,我觉得第一个问题不改也没关系…
现在手头没有工具,等我晚上回家再看看吧……
作者: 没是的人    时间: 2013-9-5 20:26
fangyc 发表于 2013-9-5 10:13
那是因为图片的显示端口从原来的viewport2改到跟事件同一层的viewport1了,否则不管怎么改z,veiwport2的 ...

NON_COVERED_MAP_ID还是没有意义,我感觉只是if哪里的逻辑错了

我把z改成500在用,暂时没出什么问题,╮(╯▽╰)╭

明天给你评分
作者: fangyc    时间: 2013-9-5 20:58
没是的人 发表于 2013-9-5 20:26
NON_COVERED_MAP_ID还是没有意义,我感觉只是if哪里的逻辑错了

我把z改成500在用,暂时没出什么问题,╮ ...

{:2_279:}额……能用就好了,我刚才也试了把两个Z都再加100也可以的样子……




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