赞 | 12 |
VIP | 54 |
好人卡 | 19 |
积分 | 81 |
经验 | 33991 |
最后登录 | 2020-4-22 |
在线时间 | 334 小时 |
Lv4.逐梦者
- 梦石
- 7
- 星屑
- 1113
- 在线时间
- 334 小时
- 注册时间
- 2008-1-28
- 帖子
- 1566
|
本帖最后由 未命名 于 2013-8-27 20:32 编辑
平常的话,我会让想要 被 穿透的事件打开穿透,然后对 想 穿透的事件编辑,碰到主角就穿透,离开恢复。
要不然我就在脚本的“Game_Character 1”里修改(前后打#的地方),
后果是所有事件都能相互穿透,地图无法穿透。具体的话自定义好了,删掉部分#就行。- #==============================================================================
- # ■ Game_Character (分割定义 1)
- #------------------------------------------------------------------------------
- # 处理角色的类。本类作为 Game_Player 类与 Game_Event
- # 类的超级类使用。
- #==============================================================================
- class Game_Character
- #--------------------------------------------------------------------------
- # ● 定义实例变量
- #--------------------------------------------------------------------------
- attr_reader :id # ID
- attr_reader :x # 地图 X 坐标 (理论坐标)
- attr_reader :y # 地图 Y 坐标 (理论坐标)
- attr_reader :real_x # 地图 X 坐标 (实际坐标 * 128)
- attr_reader :real_y # 地图 Y 坐标 (实际坐标 * 128)
- attr_reader :tile_id # 元件 ID (0 为无效)
- attr_reader :character_name # 角色 文件名
- attr_reader :character_hue # 角色 色相
- attr_reader :opacity # 不透明度
- attr_reader :blend_type # 合成方式
- attr_reader :direction # 朝向
- attr_reader :pattern # 图案
- attr_reader :move_route_forcing # 移动路线强制标志
- attr_reader :through # 穿透
- attr_accessor :animation_id # 动画 ID
- attr_accessor :transparent # 透明状态
- #--------------------------------------------------------------------------
- # ● 初始化对像
- #--------------------------------------------------------------------------
- def initialize
- @id = 0
- @x = 0
- @y = 0
- @real_x = 0
- @real_y = 0
- @tile_id = 0
- @character_name = ""
- @character_hue = 0
- [url=home.php?mod=space&uid=316553]@opacity[/url] = 255
- @blend_type = 0
- @direction = 2
- @pattern = 0
- @move_route_forcing = false
- @through = false
- @animation_id = 0
- @transparent = false
- @original_direction = 2
- @original_pattern = 0
- @move_type = 0
- @move_speed = 4
- @move_frequency = 6
- @move_route = nil
- @move_route_index = 0
- @original_move_route = nil
- @original_move_route_index = 0
- @walk_anime = true
- @step_anime = false
- @direction_fix = false
- @always_on_top = false
- @anime_count = 0
- @stop_count = 0
- @jump_count = 0
- @jump_peak = 0
- @wait_count = 0
- @locked = false
- @prelock_direction = 0
- end
- #--------------------------------------------------------------------------
- # ● 移动中判定
- #--------------------------------------------------------------------------
- def moving?
- # 如果在移动中理论坐标与实际坐标不同
- return (@real_x != @x * 128 or @real_y != @y * 128)
- end
- #--------------------------------------------------------------------------
- # ● 跳跃中判定
- #--------------------------------------------------------------------------
- def jumping?
- # 如果跳跃中跳跃点数比 0 大
- return @jump_count > 0
- end
- #--------------------------------------------------------------------------
- # ● 矫正姿势
- #--------------------------------------------------------------------------
- def straighten
- # 移动时动画以及停止动画为 ON 的情况下
- if @walk_anime or @step_anime
- # 设置图形为 0
- @pattern = 0
- end
- # 清除动画计数
- @anime_count = 0
- # 清除被锁定的向前朝向
- @prelock_direction = 0
- end
- #--------------------------------------------------------------------------
- # ● 强制移动路线
- # move_route : 新的移动路线
- #--------------------------------------------------------------------------
- def force_move_route(move_route)
- # 保存原来的移动路线
- if @original_move_route == nil
- @original_move_route = @move_route
- @original_move_route_index = @move_route_index
- end
- # 更改移动路线
- @move_route = move_route
- @move_route_index = 0
- # 设置强制移动路线标志
- @move_route_forcing = true
- # 清除被锁定的向前朝向
- @prelock_direction = 0
- # 清除等待计数
- @wait_count = 0
- # 自定义移动
- move_type_custom
- end
- #--------------------------------------------------------------------------
- # ● 可以通行判定
- # x : X 坐标
- # y : Y 坐标
- # d : 方向 (0,2,4,6,8) ※ 0 = 全方向不能通行的情况判定 (跳跃用)
- #--------------------------------------------------------------------------
- def passable?(x, y, d)
- # 求得新的坐标
- new_x = x + (d == 6 ? 1 : d == 4 ? -1 : 0)
- new_y = y + (d == 2 ? 1 : d == 8 ? -1 : 0)
- # 坐标在地图以外的情况
- unless $game_map.valid?(new_x, new_y)
- # 不能通行
- return false
- end
- # 穿透是 ON 的情况下
- if @through
- # 可以通行
- return true
- end
- # 移动者的元件无法来到指定方向的情况下
- unless $game_map.passable?(x, y, d, self)
- # 通行不可
- return false
- end
- # 从指定方向不能进入到移动处的元件的情况下
- unless $game_map.passable?(new_x, new_y, 10 - d)
- # 不能通行
- return false
- end
- # 循环全部事件
- for event in $game_map.events.values
- # 事件坐标于移动目标坐标一致的情况下
- if event.x == new_x and event.y == new_y
- # 穿透为 ON
- unless event.through
- # 自己就是事件的情况下
- # if self != $game_player #
- # 不能通行
- # return false #
- # end #
- # 自己是主角、对方的图形是角色的情况下
- # if event.character_name != "" #
- # 不能通行
- # return false #
- # end #
- end
- end
- end
- # 主角的坐标与移动目标坐标一致的情况下
- if $game_player.x == new_x and $game_player.y == new_y
- # 穿透为 ON
- unless $game_player.through
- # 自己的图形是角色的情况下
- # if @character_name != "" #
- # 不能通行
- # return false #
- # end #
- end
- end
- # 可以通行
- return true
- end
- #--------------------------------------------------------------------------
- # ● 锁定
- #--------------------------------------------------------------------------
- def lock
- # 如果已经被锁定的情况下
- if @locked
- # 过程结束
- return
- end
- # 保存锁定前的朝向
- @prelock_direction = @direction
- # 保存主角的朝向
- turn_toward_player
- # 设置锁定中标志
- @locked = true
- end
- #--------------------------------------------------------------------------
- # ● 锁定中判定
- #--------------------------------------------------------------------------
- def lock?
- return @locked
- end
- #--------------------------------------------------------------------------
- # ● 解除锁定
- #--------------------------------------------------------------------------
- def unlock
- # 没有锁定的情况下
- unless @locked
- # 过程结束
- return
- end
- # 清除锁定中标志
- @locked = false
- # 没有固定朝向的情况下
- unless @direction_fix
- # 如果保存了锁定前的方向
- if @prelock_direction != 0
- # 还原为锁定前的方向
- @direction = @prelock_direction
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● 移动到指定位置
- # x : X 坐标
- # y : Y 坐标
- #--------------------------------------------------------------------------
- def moveto(x, y)
- @x = x % $game_map.width
- @y = y % $game_map.height
- @real_x = @x * 128
- @real_y = @y * 128
- @prelock_direction = 0
- end
- #--------------------------------------------------------------------------
- # ● 获取画面 X 坐标
- #--------------------------------------------------------------------------
- def screen_x
- # 通过实际坐标和地图的显示位置来求得画面坐标
- return (@real_x - $game_map.display_x + 3) / 4 + 16
- end
- #--------------------------------------------------------------------------
- # ● 获取画面 Y 坐标
- #--------------------------------------------------------------------------
- def screen_y
- # 通过实际坐标和地图的显示位置来求得画面坐标
- y = (@real_y - $game_map.display_y + 3) / 4 + 32
- # 取跳跃计数小的 Y 坐标
- if @jump_count >= @jump_peak
- n = @jump_count - @jump_peak
- else
- n = @jump_peak - @jump_count
- end
- return y - (@jump_peak * @jump_peak - n * n) / 2
- end
- #--------------------------------------------------------------------------
- # ● 获取画面 Z 坐标
- # height : 角色的高度
- #--------------------------------------------------------------------------
- def screen_z(height = 0)
- # 在最前显示的标志为 ON 的情况下
- if @always_on_top
- # 无条件设置为 999
- return 999
- end
- # 通过实际坐标和地图的显示位置来求得画面坐标
- z = (@real_y - $game_map.display_y + 3) / 4 + 32
- # 元件的情况下
- if @tile_id > 0
- # 元件的优先不足 * 32
- return z + $game_map.priorities[@tile_id] * 32
- # 角色的场合
- else
- # 如果高度超过 32 就判定为满足 31
- return z + ((height > 32) ? 31 : 0)
- end
- end
- #--------------------------------------------------------------------------
- # ● 取得茂密
- #--------------------------------------------------------------------------
- def bush_depth
- # 是元件、并且在最前显示为 ON 的情况下
- if @tile_id > 0 or @always_on_top
- return 0
- end
- # 以跳跃中以外要是繁茂处属性的元件为 12,除此之外为 0
- if @jump_count == 0 and $game_map.bush?(@x, @y)
- return 12
- else
- return 0
- end
- end
- #--------------------------------------------------------------------------
- # ● 取得地形标记
- #--------------------------------------------------------------------------
- def terrain_tag
- return $game_map.terrain_tag(@x, @y)
- end
- end
复制代码 我是不是有些啰唆? |
评分
-
查看全部评分
|