赞 | 2 |
VIP | 0 |
好人卡 | 1 |
积分 | 41 |
经验 | 11248 |
最后登录 | 2024-9-30 |
在线时间 | 767 小时 |
Lv3.寻梦者
- 梦石
- 0
- 星屑
- 4112
- 在线时间
- 767 小时
- 注册时间
- 2015-6-27
- 帖子
- 80
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
出错的提示如图
这个像素化移动脚本是我从图书馆那里下载的,我直接从范例复制这个脚本到我的游戏里,不知道为什么点开始游戏就报错。。
我把我游戏里自己加的几个脚本都按顺序复制到范例里,结果没有报错,所以应该不是脚本冲突,但是到我的游戏里打开标题画面之后点开始游戏就报错了……
哪位大神能告诉我哪里出错了吗。。我对xp的脚本不是很熟悉。。
这是像素化移动的脚本:
- class Game_Temp
- attr_accessor :rgss_move, :dir_4
- #alias rgss_initialize_xxxxxxxxx initialize 默认值???
- #def initialize
- # rgss_initialize_xxxxxxxxx
- # @rgss_move = false
- # @dir_4 = false
- #end
- end
- class Game_Event < Game_Character
- attr_reader :touch_4
- alias rgss_refresh refresh
- def refresh
- rgss_refresh
- @touch_4 = nil
- for list in @page.list
- if list.code == 108 or list.code == 408
- if list.parameters[0] =~ /禁止斜触发/
- @touch_4 = true
- break
- end
- end
- end
- end
- end
- class Game_Player < Game_Character
- def x(f=nil)
- return !f ? @x.to_i : @x
- end
- def y(f=nil)
- return !f ? @y.to_i : @y
- end
- def to_i
- @x = @x.to_i if @x.is_a?(Float)
- @y = @y.to_i if @y.is_a?(Float)
- end
- def player_passable?(dir = @direction, px = @x, py = @y)
- case dir
- when 8
- (py - 0.5).to_i == py.to_i or (passable?(px.to_i, py.to_i, 8) and
- passable?((px + 0.5).to_i, py.to_i, 8))
- when 2
- passable?(px.to_i, py.to_i, 2) and
- passable?((px + 0.5).to_i, py.to_i, 2)
- when 4
- (px - 0.5).to_i == px.to_i or (passable?(px.to_i, py.to_i, 4) and
- passable?(px.to_i, (py + 0.5).to_i, 4))
- when 6
- passable?(px.to_i, py.to_i, 6) and
- passable?(px.to_i, (py + 0.5).to_i, 6)
- when 1
- (player_passable?(4) and player_passable?(2, @x - 0.5)) or
- (player_passable?(2) and player_passable?(4, @x, @y + 0.5))
- when 3
- (player_passable?(6) and player_passable?(2, @x + 0.5)) or
- (player_passable?(2) and player_passable?(6, @x, @y + 0.5))
- when 7
- (player_passable?(4) and player_passable?(8, @x - 0.5)) or
- (player_passable?(8) and player_passable?(4, @x, @y - 0.5))
- when 9
- (player_passable?(6) and player_passable?(8, @x + 0.5)) or
- (player_passable?(8) and player_passable?(6, @x, @y - 0.5))
- end
- end
- #--------------------------------------------------------------------------
- # ● 接触事件启动判定
- #--------------------------------------------------------------------------
- def check_event_trigger_touch(x, y)
- result = false
- # 事件执行中的情况下
- if $game_system.map_interpreter.running?
- return result
- end
- # 全事件的循环
- for event in $game_map.events.values
- if event.touch_4
- if (x - 0.5).to_i == x.to_i or
- (y - 0.5).to_i == y.to_i
- next
- end
- end
- # 事件坐标与目标一致的情况下
- if event.x == x.to_i and event.y == y.to_i and [1,2].include?(event.trigger)
- # 跳跃中以外的情况下、启动判定是正面的事件
- if not event.jumping? and not event.over_trigger?
- event.start
- result = true
- end
- end
- end
- return result
- end
- def player_check_event_trigger_touch(dir)
- case dir
- when 8
- check_event_trigger_touch(@x, @y - 1)
- if (@x + 0.5).to_i != @x.to_i
- check_event_trigger_touch(@x + 1, @y - 1)
- end
- when 2
- check_event_trigger_touch(@x, @y + 1)
- if (@x + 0.5).to_i != @x.to_i
- check_event_trigger_touch(@x + 1, @y + 1)
- end
- when 4
- check_event_trigger_touch(@x - 1, @y)
- if (@y + 0.5).to_i != @y.to_i
- check_event_trigger_touch(@x - 1, @y + 1)
- end
- when 6
- check_event_trigger_touch(@x + 1, @y)
- if (@y + 0.5).to_i != @y.to_i
- check_event_trigger_touch(@x + 1, @y + 1)
- end
- when 1
- check_event_trigger_touch(@x - 1, @y + 1)
- if (@x + 0.5).to_i != @x.to_i
- check_event_trigger_touch(@x + 1 - 1, @y + 1)
- end
- check_event_trigger_touch(@x, @y + 1)
- check_event_trigger_touch(@x - 1, @y)
- if (@y + 0.5).to_i != @y.to_i
- check_event_trigger_touch(@x - 1, @y + 1)
- end
- when 3
- check_event_trigger_touch(@x + 1, @y + 1)
- if (@x + 0.5).to_i != @x.to_i
- check_event_trigger_touch(@x + 2, @y + 1)
- end
- check_event_trigger_touch(@x, @y + 1)
- check_event_trigger_touch(@x + 1, @y)
- if (@y + 0.5).to_i != @y.to_i
- check_event_trigger_touch(@x + 1, @y + 1)
- end
- when 7
- check_event_trigger_touch(@x - 1, @y - 1)
- if (@x + 0.5).to_i != @x.to_i
- check_event_trigger_touch(@x + 1 - 1, @y - 1)
- end
- check_event_trigger_touch(@x, @y - 1)
- check_event_trigger_touch(@x - 1, @y)
- if (@y + 0.5).to_i != @y.to_i
- check_event_trigger_touch(@x - 1, @y - 1)
- end
- when 9
- check_event_trigger_touch(@x + 1, @y - 1)
- if (@x + 0.5).to_i != @x.to_i
- check_event_trigger_touch(@x + 2, @y - 1)
- end
- check_event_trigger_touch(@x, @y - 1)
- check_event_trigger_touch(@x + 1, @y)
- if (@y + 0.5).to_i != @y.to_i
- check_event_trigger_touch(@x + 1, @y - 1)
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● 同位置的事件启动判定
- #--------------------------------------------------------------------------
- def check_event_trigger_here(triggers)
- result = false
- # 事件执行中的情况下
- if $game_system.map_interpreter.running?
- return result
- end
- # 全部事件的循环
- for event in $game_map.events.values
- # 事件坐标与目标一致的情况下
- if triggers.include?(event.trigger) and
- ((event.x == @x.to_i and event.y == @y.to_i) or
- (!event.touch_4 and event.x == (@x + 0.5).to_i and event.y == @y.to_i) or
- (!event.touch_4 and event.x == @x.to_i and event.y == (@y + 0.5).to_i))
- # 跳跃中以外的情况下、启动判定是同位置的事件
- if not event.jumping? and event.over_trigger?
- event.start
- result = true
- end
- end
- end
- return result
- end
- #--------------------------------------------------------------------------
- # ● 正面事件的启动判定
- #--------------------------------------------------------------------------
- def check_event_trigger_there(triggers)
- result = false
- # 事件执行中的情况下
- if $game_system.map_interpreter.running?
- return result
- end
- # 计算正面坐标
- new_x = @x + (@direction == 6 ? 1 : @direction == 4 ? -1 : 0)
- new_y = @y + (@direction == 2 ? 1 : @direction == 8 ? -1 : 0)
- # 全部事件的循环
- for event in $game_map.events.values
- if event.touch_4
- if (new_x - 0.5).to_i == new_x.to_i or
- (new_y - 0.5).to_i == new_y.to_i
- next
- end
- end
- # 事件坐标与目标一致的情况下
- if !player_passable? and triggers.include?(event.trigger) and
- ((event.x == new_x.to_i and event.y == new_y.to_i) or
- (!event.touch_4 and event.x == (new_x + 0.5).to_i and event.y == new_y.to_i) or
- (!event.touch_4 and event.x == new_x.to_i and event.y == (new_y + 0.5).to_i))
- # 跳跃中以外的情况下、启动判定是正面的事件
- if not event.jumping? and not event.over_trigger?
- event.start
- result = true
- end
- end
- next if event.touch_4
- case @direction
- when 2
- if triggers.include?(event.trigger) and
- ((event.x == @x.to_i - 1 and event.y == @y.to_i + 1) or
- (event.x == @x.to_i + 1 and event.y == @y.to_i + 1))
- # 跳跃中以外的情况下、启动判定是斜面的事件
- if not event.jumping? and not event.over_trigger?
- event.start
- result = true
- end
- end
- when 4
- next if @x.to_i != (@x + 0.5).to_i
- if triggers.include?(event.trigger) and
- ((event.x == @x.to_i - 1 and event.y == @y.to_i - 1) or
- (event.x == @x.to_i - 1 and event.y == @y.to_i + 1))
- # 跳跃中以外的情况下、启动判定是斜面的事件
- if not event.jumping? and not event.over_trigger?
- event.start
- result = true
- end
- end
- when 6
- next if @x.to_i != (@x + 0.5).to_i
- if triggers.include?(event.trigger) and
- ((event.x == @x.to_i + 1 and event.y == @y.to_i - 1) or
- (event.x == @x.to_i + 1 and event.y == @y.to_i + 1))
- # 跳跃中以外的情况下、启动判定是斜面的事件
- if not event.jumping? and not event.over_trigger?
- event.start
- result = true
- end
- end
- when 8
- if triggers.include?(event.trigger) and
- ((event.x == @x.to_i - 1 and event.y == @y.to_i - 1) or
- (event.x == @x.to_i + 1 and event.y == @y.to_i - 1))
- # 跳跃中以外的情况下、启动判定是斜面的事件
- if not event.jumping? and not event.over_trigger?
- event.start
- result = true
- end
- end
- end
- end
- # 找不到符合条件的事件的情况下
- if result == false
- # 正面的元件是柜台的情况下
- if $game_map.counter?(new_x, new_y)
- # 计算 1 元件里侧的坐标
- new_x += (@direction == 6 ? 1 : @direction == 4 ? -1 : 0)
- new_y += (@direction == 2 ? 1 : @direction == 8 ? -1 : 0)
- # 全事件的循环
- for event in $game_map.events.values
- if event.touch_4
- if (new_x - 0.5).to_i == new_x.to_i or
- (new_y - 0.5).to_i == new_y.to_i
- next
- end
- end
- # 事件坐标与目标一致的情况下
- if triggers.include?(event.trigger) and
- ((event.x == new_x.to_i and event.y == new_y.to_i) or
- (!event.touch_4 and event.x == (new_x + 0.5).to_i and event.y == new_y.to_i) or
- (!event.touch_4 and event.x == new_x.to_i and event.y == (new_y + 0.5).to_i))
- # 跳跃中以外的情况下、启动判定是正面的事件
- if not event.jumping? and not event.over_trigger?
- event.start
- result = true
- end
- end
- end
- end
- end
- return result
- end
- #--------------------------------------------------------------------------
- # ● 向上移动
- # turn_enabled : 本场地位置更改许可标志
- #--------------------------------------------------------------------------
- def move_up(turn_enabled = true)
- if $game_temp.rgss_move then
- to_i ; super ; return
- end
- # 面向上
- if turn_enabled
- turn_up
- end
- # 可以通行的情况下
- if player_passable?(8)
- # 面向上
- turn_up
- # 更新坐标
- @y -= 0.5
- # 歩数増加
- increase_steps
- # 不能通行的情况下
- else
- # 接触事件的启动判定
- player_check_event_trigger_touch(8)
- end
- end
- #--------------------------------------------------------------------------
- # ● 向下移动
- # turn_enabled : 本场地位置更改许可标志
- #--------------------------------------------------------------------------
- def move_down(turn_enabled = true)
- if $game_temp.rgss_move then
- to_i ; super ; return
- end
- # 面向下
- if turn_enabled
- turn_down
- end
- # 可以通行的场合
- if player_passable?(2)
- # 面向下
- turn_down
- # 更新坐标
- @y += 0.5
- # 增加步数
- increase_steps
- # 不能通行的情况下
- else
- # 接触事件的启动判定
- player_check_event_trigger_touch(2)
- end
- end
- #--------------------------------------------------------------------------
- # ● 向左移动
- # turn_enabled : 本场地位置更改许可标志
- #--------------------------------------------------------------------------
- def move_left(turn_enabled = true)
- if $game_temp.rgss_move then
- to_i ; super ; return
- end
- # 面向左
- if turn_enabled
- turn_left
- end
- # 可以通行的情况下
- if player_passable?(4)
- # 面向左
- turn_left
- # 更新坐标
- @x -= 0.5
- # 增加步数
- increase_steps
- # 不能通行的情况下
- else
- # 接触事件的启动判定
- player_check_event_trigger_touch(4)
- end
- end
- #--------------------------------------------------------------------------
- # ● 向右移动
- # turn_enabled : 本场地位置更改许可标志
- #--------------------------------------------------------------------------
- def move_right(turn_enabled = true)
- if $game_temp.rgss_move then
- to_i ; super ; return
- end
- # 面向右
- if turn_enabled
- turn_right
- end
- # 可以通行的场合
- if player_passable?(6)
- # 面向右
- turn_right
- # 更新坐标
- @x += 0.5
- # 增加步数
- increase_steps
- # 不能通行的情况下
- else
- # 接触事件的启动判定
- player_check_event_trigger_touch(6)
- end
- end
- #--------------------------------------------------------------------------
- # ● 向左下移动
- #--------------------------------------------------------------------------
- def move_lower_left
- if $game_temp.rgss_move then
- to_i ; super ; return
- end
- # 没有固定面向的场合
- unless @direction_fix
- # 朝向是右的情况下适合的面是左面、朝向是上的情况下适合的面是下面
- @direction = (@direction == 6 ? 4 : @direction == 8 ? 2 : @direction)
- end
- # 下→左、左→下 的通道可以通行的情况下
- if player_passable?(1)
- # 更新坐标
- @x -= 0.5
- @y += 0.5
- # 增加步数
- increase_steps
- else
- # 接触事件的启动判定
- player_check_event_trigger_touch(1)
- end
- end
- #--------------------------------------------------------------------------
- # ● 向右下移动
- #--------------------------------------------------------------------------
- def move_lower_right
- if $game_temp.rgss_move then
- to_i ; super ; return
- end
- # 没有固定面向的场合
- unless @direction_fix
- # 朝向是右的情况下适合的面是左面、朝向是上的情况下适合的面是下面
- @direction = (@direction == 4 ? 6 : @direction == 8 ? 2 : @direction)
- end
- # 下→右、右→下 的通道可以通行的情况下
- if player_passable?(3)
- # 更新坐标
- @x += 0.5
- @y += 0.5
- # 增加步数
- increase_steps
- else
- # 接触事件的启动判定
- player_check_event_trigger_touch(3)
- end
- end
- #--------------------------------------------------------------------------
- # ● 向左上移动
- #--------------------------------------------------------------------------
- def move_upper_left
- if $game_temp.rgss_move then
- to_i ; super ; return
- end
- # 没有固定面向的场合
- unless @direction_fix
- # 朝向是右的情况下适合的面是左面、朝向是上的情况下适合的面是下面
- @direction = (@direction == 6 ? 4 : @direction == 2 ? 8 : @direction)
- end
- # 上→左、左→上 的通道可以通行的情况下
- if player_passable?(7)
- # 更新坐标
- @x -= 0.5
- @y -= 0.5
- # 增加步数
- increase_steps
- else
- # 接触事件的启动判定
- player_check_event_trigger_touch(7)
- end
- end
- #--------------------------------------------------------------------------
- # ● 向右上移动
- #--------------------------------------------------------------------------
- def move_upper_right
- if $game_temp.rgss_move then
- to_i ; super ; return
- end
- # 没有固定面向的场合
- unless @direction_fix
- # 朝向是右的情况下适合的面是左面、朝向是上的情况下适合的面是下面
- @direction = (@direction == 4 ? 6 : @direction == 2 ? 8 : @direction)
- end
- # 上→右、右→上 的通道可以通行的情况下
- if player_passable?(9)
- # 更新坐标
- @x += 0.5
- @y -= 0.5
- # 增加步数
- increase_steps
- else
- # 接触事件的启动判定
- player_check_event_trigger_touch(9)
- end
- end
- #--------------------------------------------------------------------------
- # ● 画面更新
- #--------------------------------------------------------------------------
- alias rgss_update update
- def update
- if $game_temp.dir_4
- rgss_update
- return
- end
- # 本地变量记录移动信息
- last_moving = moving?
- # 移动中、事件执行中、强制移动路线中、
- # 信息窗口一个也不显示的时候
- unless moving? or $game_system.map_interpreter.running? or
- @move_route_forcing or $game_temp.message_window_showing
- # 如果方向键被按下、主角就朝那个方向移动
- case Input.dir8
- when 1
- move_lower_left
- when 2
- move_down
- when 3
- move_lower_right
- when 4
- move_left
- when 6
- move_right
- when 7
- move_upper_left
- when 8
- move_up
- when 9
- move_upper_right
- end
- end
- # 本地变量记忆坐标
- last_real_x = @real_x
- last_real_y = @real_y
- super
- # 角色向下移动、画面上的位置在中央下方的情况下
- if @real_y > last_real_y and @real_y - $game_map.display_y > CENTER_Y
- # 画面向下卷动
- $game_map.scroll_down(@real_y - last_real_y)
- end
- # 角色向左移动、画面上的位置在中央左方的情况下
- if @real_x < last_real_x and @real_x - $game_map.display_x < CENTER_X
- # 画面向左卷动
- $game_map.scroll_left(last_real_x - @real_x)
- end
- # 角色向右移动、画面上的位置在中央右方的情况下
- if @real_x > last_real_x and @real_x - $game_map.display_x > CENTER_X
- # 画面向右卷动
- $game_map.scroll_right(@real_x - last_real_x)
- end
- # 角色向上移动、画面上的位置在中央上方的情况下
- if @real_y < last_real_y and @real_y - $game_map.display_y < CENTER_Y
- # 画面向上卷动
- $game_map.scroll_up(last_real_y - @real_y)
- end
- # 不在移动中的情况下
- unless moving?
- # 上次主角移动中的情况
- if last_moving
- # 与同位置的事件接触就判定为事件启动
- result = check_event_trigger_here([1,2])
- # 没有可以启动的事件的情况下
- if result == false
- # 调试模式为 ON 并且按下 CTRL 键的情况下除外
- unless $DEBUG and Input.press?(Input::CTRL)
- # 遇敌计数下降
- if @encounter_count > 0
- @encounter_count -= 1
- end
- end
- end
- end
- # 按下 C 键的情况下
- if Input.trigger?(Input::C)
- # 判定为同位置以及正面的事件启动
- check_event_trigger_here([0])
- check_event_trigger_there([0,1,2])
- end
- end
- end
- end
复制代码
|
|