查看: 2776|回复: 0

[RMVA发布] 事件在人物前后时的遮挡……

[复制链接]
梦石
2
星屑
5550
在线时间
2566 小时
注册时间
2012-2-9
回帖
947

开拓者

发表于 2016-8-18 22:01:05 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 garfeng 于 2016-8-18 23:24 编辑

当人物坐标y比事件大时,即人物更靠近屏幕,应该遮挡住事件,而人物y比事件小,也就是距离屏幕更远时,人物被事件遮挡。32x32的二头身有微弱的这个问题,32x48的三头身,这个问题则非常严重。
上次做 拐跑魔王被这个问题搞跪了,只能在事件周围设置一圈不可通行来偷偷避过去。

可能讲不清楚,就是如下图红框部分的效果:


overlay1.png
overlay2.png

红框右侧为普通事件,在人物下方就一直在人物下方。

用事件绕过去。

代码:

[pre lang="ruby"]
# 使用方法,添加事件,在事件名里添加 ol
# y相同时,由事件页那里的高度来决定遮挡。

class Game_Event < Game_Character

  def check_pos_of_player
    if @page
      origin_priority = @page.priority_type
    else
      origin_priority = 1
    end
    if !@overlay_set
      return origin_priority
    end   
    dy = $game_player.real_y - self.real_y
    if  dy > 0 # 人挡住了事件
      return 0
    elsif dy < 0 # 事件挡住了人
      return 2
    end
    return origin_priority
  end

  alias overlay_back_setup_page_settings setup_page_settings
  def setup_page_settings
    overlay_back_setup_page_settings
    if self.instance_variable_get(:@event).name =~ /ol/
      #p self.instance_variable_get(:@event).name
      @overlay_set = true
    else
      @overlay_set = false
    end
  end

  #--------------------------------------------------------------------------
  # ● 更新画面
  #--------------------------------------------------------------------------
  alias overlay_back_update update
  def update
    @priority_type = check_pos_of_player
    overlay_back_update
  end
end

[/pre]

评分

参与人数 1星屑 +10 收起 理由
phunmung5173 + 10 精品文章

查看全部评分

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部