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

Project1

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

[已经解决] 场所移动后执行了远处的事件,怎么修复?

[复制链接]

Lv3.寻梦者

双子人

梦石
0
星屑
3185
在线时间
3618 小时
注册时间
2009-4-4
帖子
4154

开拓者

跳转到指定楼层
1
发表于 2016-12-27 15:31:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 hys111111 于 2016-12-27 17:43 编辑

我在【地图1】的(52,31)设置了一个场所移动的事件,图形“无”,与事件接触。

场所移动到的位置是【地图2】的(52,133),可是这样场所移动到【地图2】之后,发现【地图2】的一个位于(52,31)的事件也被执行了,执行方式也是与事件接触。

同理,我把【地图1】场所移动的事件移到了别的位置,可是如果【地图2】的对应位置有与事件接触的事件,那个事件也会被执行。

这个应该是在装载地图和设置角色位置之间执行(下面的代码第3到第5行之间)的,可是我尝试着在check_event_trigger_here加了一个p,却没有任何反应。

该怎么修复?
RUBY 代码复制
  1. if $game_map.map_id != $game_temp.player_new_map_id
  2.       # 设置新地图
  3.       $game_map.setup($game_temp.player_new_map_id)
  4.     end
  5.     # 设置主角位置
  6.     $game_player.moveto($game_temp.player_new_x, $game_temp.player_new_y)


补充:新建的工程也存在这样的问题
场所移动灵异事件.zip (202.96 KB, 下载次数: 72)

点评

与事件接触是这样的,坐标对得上就执行的。改成与主角接触,那么传送后即使坐标重叠也不会执行,要主角去碰它。  发表于 2016-12-27 22:17

Lv5.捕梦者 (版主)

梦石
1
星屑
23999
在线时间
3339 小时
注册时间
2011-7-8
帖子
3926

开拓者

2
发表于 2017-1-1 18:36:41 | 只看该作者
本帖最后由 guoxiaomi 于 2017-1-1 18:40 编辑

原因是:场所移动的$game_map.setup里生成Event对象的时候会调用refresh方法,而refresh方法里会调用check_event_trigger_auto方法。

做2处修改:
1. 将Scene_Map的transfer_player方法的清除主角场所移动调试标志移到矫正主角姿势之后
2. 将Game_Event的check_event_trigger_auto中判断与事件接触的地方增加一个场所移动不为true的条件。

脚本如下:
  1. class Scene_Map
  2.   #--------------------------------------------------------------------------
  3.   # ● 主角的场所移动
  4.   #--------------------------------------------------------------------------
  5.   alias old_transfer_player transfer_player
  6.   def transfer_player        
  7.     # 移动目标与现在的地图有差异的情况下
  8.     if $game_map.map_id != $game_temp.player_new_map_id
  9.       # 设置新地图
  10.       $game_map.setup($game_temp.player_new_map_id)
  11.     end      
  12.     # 设置主角位置
  13.     $game_player.moveto($game_temp.player_new_x, $game_temp.player_new_y)   
  14.     # 设置主角朝向
  15.     case $game_temp.player_new_direction
  16.     when 2  # 下
  17.       $game_player.turn_down
  18.     when 4  # 左
  19.       $game_player.turn_left
  20.     when 6  # 右
  21.       $game_player.turn_right
  22.     when 8  # 上
  23.       $game_player.turn_up
  24.     end
  25.     # 矫正主角姿势
  26.     $game_player.straighten
  27.     # 清除主角场所移动调试标志
  28.     $game_temp.player_transferring = false
  29.     # 刷新地图 (执行并行事件)
  30.     $game_map.update
  31.     # 在生成活动块
  32.     @spriteset.dispose
  33.     @spriteset = Spriteset_Map.new
  34.     # 处理过渡中的情况下
  35.     if $game_temp.transition_processing
  36.       # 清除过渡处理中标志
  37.       $game_temp.transition_processing = false
  38.       # 执行过渡
  39.       Graphics.transition(20)
  40.     end
  41.     # 执行地图设置的 BGM、BGS 的自动切换
  42.     $game_map.autoplay
  43.     # 设置画面
  44.     Graphics.frame_reset
  45.     # 刷新输入信息
  46.     Input.update
  47.   end
  48. end

  49. class Game_Event
  50.   alias old_check_event_trigger_auto check_event_trigger_auto
  51.   def check_event_trigger_auto
  52.     # 目标为 [与事件接触] 以及和主角坐标一致的情况下
  53.     if @trigger == 2 and @x == $game_player.x and @y == $game_player.y
  54.       # 除跳跃中以外的情况、启动判定就是同位置的事件
  55.       if not jumping? and over_trigger? and not $game_temp.player_transferring
  56.         start
  57.       end
  58.     end
  59.     # 目标是 [自动执行] 的情况下
  60.     if @trigger == 3
  61.       start
  62.     end
  63.   end
  64. end
复制代码

点评

谢谢,解决了  发表于 2017-1-2 12:44

评分

参与人数 2星屑 +250 收起 理由
RyanBern + 100 追加100
hys111111 + 150 认可答案

查看全部评分

熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-27 08:27

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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