赞 | 399 |
VIP | 0 |
好人卡 | 24 |
积分 | 250 |
经验 | 45372 |
最后登录 | 2023-10-7 |
在线时间 | 3338 小时 |
Lv5.捕梦者 (版主)
- 梦石
- 1
- 星屑
- 23963
- 在线时间
- 3338 小时
- 注册时间
- 2011-7-8
- 帖子
- 3925
|
本帖最后由 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的条件。
脚本如下:
- class Scene_Map
- #--------------------------------------------------------------------------
- # ● 主角的场所移动
- #--------------------------------------------------------------------------
- alias old_transfer_player transfer_player
- def transfer_player
- # 移动目标与现在的地图有差异的情况下
- if $game_map.map_id != $game_temp.player_new_map_id
- # 设置新地图
- $game_map.setup($game_temp.player_new_map_id)
- end
- # 设置主角位置
- $game_player.moveto($game_temp.player_new_x, $game_temp.player_new_y)
- # 设置主角朝向
- case $game_temp.player_new_direction
- when 2 # 下
- $game_player.turn_down
- when 4 # 左
- $game_player.turn_left
- when 6 # 右
- $game_player.turn_right
- when 8 # 上
- $game_player.turn_up
- end
- # 矫正主角姿势
- $game_player.straighten
- # 清除主角场所移动调试标志
- $game_temp.player_transferring = false
- # 刷新地图 (执行并行事件)
- $game_map.update
- # 在生成活动块
- @spriteset.dispose
- @spriteset = Spriteset_Map.new
- # 处理过渡中的情况下
- if $game_temp.transition_processing
- # 清除过渡处理中标志
- $game_temp.transition_processing = false
- # 执行过渡
- Graphics.transition(20)
- end
- # 执行地图设置的 BGM、BGS 的自动切换
- $game_map.autoplay
- # 设置画面
- Graphics.frame_reset
- # 刷新输入信息
- Input.update
- end
- end
- class Game_Event
- alias old_check_event_trigger_auto check_event_trigger_auto
- def check_event_trigger_auto
- # 目标为 [与事件接触] 以及和主角坐标一致的情况下
- if @trigger == 2 and @x == $game_player.x and @y == $game_player.y
- # 除跳跃中以外的情况、启动判定就是同位置的事件
- if not jumping? and over_trigger? and not $game_temp.player_transferring
- start
- end
- end
- # 目标是 [自动执行] 的情况下
- if @trigger == 3
- start
- end
- end
- end
复制代码 |
评分
-
查看全部评分
|