赞 | 0 |
VIP | 186 |
好人卡 | 0 |
积分 | 1 |
经验 | 5829 |
最后登录 | 2012-12-21 |
在线时间 | 83 小时 |
Lv1.梦旅人 龙皇
- 梦石
- 0
- 星屑
- 50
- 在线时间
- 83 小时
- 注册时间
- 2007-8-8
- 帖子
- 2956
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
■ 完善斜行4方向 V1.0版
(原帖:伪●角色斜行4方向脚本http://rpg.blue/viewthread.php?tid=83703)
本脚本已针对以下做了修改:
斜行触发
斜行前进一步
斜行后退一步
斜行随机移动
斜方向面向主角
斜方向背向主角
本脚本尚未修改的地方:
斜行接近主角
斜行远离主角
斜行4方向的角色行走图素材规格方向定义:
(箭头方向为角色面向的方向)
把以下脚本貼在Main前面即可
-
- #==============================================================================
- # ■ 完善斜行4方向腳本V1.0 (BY TERENCE龙皇)
- #------------------------------------------------------------------------------
- # 本腳本已針對以下做了修改:
- #--------------------------------------------
- # 斜行觸發
- # 斜行前進一步
- # 斜行後退一步
- # 斜行隨機移動
- # 斜方向面向主角
- # 斜方向背向主角
- #==============================================================================
- # 本腳本尚未修改的地方:
- #--------------------------------------------
- # 斜行接近主角
- # 斜行遠離主角
- #==============================================================================
- class Game_Character
- #--------------------------------------------------------------------------
- # ● 向左下移動
- #--------------------------------------------------------------------------
- def move_lower_left(turn_enabled = true)
- unless @direction_fix
- turn_down
- end
- # 下→左、左→下 的通道可以通行的情況下
- if (passable?(@x, @y, 2) and passable?(@x, @y + 1, 4)) or
- (passable?(@x, @y, 4) and passable?(@x - 1, @y, 2))
- # 更新座標
- @x -= 1
- @y += 1
- # 增加步數
- increase_steps
- else
- check_event_trigger_touch(@x-1, @y+1)
- end
- end
- #--------------------------------------------------------------------------
- # ● 向右下移動
- #--------------------------------------------------------------------------
- def move_lower_right(turn_enabled = true)
- unless @direction_fix
- turn_right
- end
- # 下→右、右→下 的通道可以通行的情況下
- if (passable?(@x, @y, 2) and passable?(@x, @y + 1, 6)) or
- (passable?(@x, @y, 6) and passable?(@x + 1, @y, 2))
- # 更新座標
- @x += 1
- @y += 1
- # 增加步數
- increase_steps
- else
- check_event_trigger_touch(@x+1, @y+1)
- end
- end
- #--------------------------------------------------------------------------
- # ● 向左上移動
- #--------------------------------------------------------------------------
- def move_upper_left(turn_enabled = true)
- unless @direction_fix
- turn_left
- end
- # 上→左、左→上 的通道可以通行的情況下
- if (passable?(@x, @y, 8) and passable?(@x, @y - 1, 4)) or
- (passable?(@x, @y, 4) and passable?(@x - 1, @y, 8))
- # 更新座標
- @x -= 1
- @y -= 1
- # 增加步數
- increase_steps
- else
- check_event_trigger_touch(@x-1, @y-1)
- end
- end
- #--------------------------------------------------------------------------
- # ● 向右上移動
- #--------------------------------------------------------------------------
- def move_upper_right(turn_enabled = true)
- unless @direction_fix
- turn_up
- end
- # 上→右、右→上 的通道可以通行的情況下
- if (passable?(@x, @y, 8) and passable?(@x, @y - 1, 6)) or
- (passable?(@x, @y, 6) and passable?(@x + 1, @y, 8))
- # 更新座標
- @x += 1
- @y -= 1
- # 增加步數
- increase_steps
- else
- check_event_trigger_touch(@x+1, @y-1)
- end
- end
- #--------------------------------------------------------------------------
- # ● 隨機移動
- #--------------------------------------------------------------------------
- def move_random
- case rand(4)
- when 0 # 向左下移動
- move_lower_left(false)
- when 1 # 向左上移動
- move_upper_left(false)
- when 2 # 向右下移動
- move_lower_right(false)
- when 3 # 向右上移動
- move_upper_right(false)
- end
- end
- #--------------------------------------------------------------------------
- # ● 前進一步
- #--------------------------------------------------------------------------
- def move_forward
- case @direction
- when 2
- move_lower_left(false)
- when 4
- move_upper_left(false)
- when 6
- move_lower_right(false)
- when 8
- move_upper_right(false)
- end
- end
- #--------------------------------------------------------------------------
- # ● 後退一步
- #--------------------------------------------------------------------------
- def move_backward
- # 記憶朝向固定訊息
- last_direction_fix = @direction_fix
- # 強制固定朝向
- @direction_fix = true
- # 朝向分歧
- case @direction
- when 2 # 下
- move_upper_right(false)
- when 4 # 左
- move_lower_right(false)
- when 6 # 右
- move_upper_left(false)
- when 8 # 上
- move_lower_left(false)
- end
- # 還原朝向固定訊息
- @direction_fix = last_direction_fix
- end
- #--------------------------------------------------------------------------
- # ● 面向主角的方向
- #--------------------------------------------------------------------------
- def turn_toward_player
- # 求得與主角的座標差值
- sx = @x - $game_player.x
- sy = @y - $game_player.y
- # 座標相等的場合下
- if sx == 0 and sy == 0
- return
- end
- if sx < 0 and sy > 0
- turn_up
- elsif sx > 0 and sy > 0
- turn_left
- elsif sx > 0 and sy < 0
- turn_down
- elsif sx < 0 and sy < 0
- turn_right
- end
- end
- #--------------------------------------------------------------------------
- # ● 背向主角的方向
- #--------------------------------------------------------------------------
- def turn_away_from_player
- # 求得與主角的座標差
- sx = @x - $game_player.x
- sy = @y - $game_player.y
- # 座標相等的場合下
- if sx == 0 and sy == 0
- return
- end
- if sx < 0 and sy > 0
- turn_down
- elsif sx > 0 and sy > 0
- turn_right
- elsif sx > 0 and sy < 0
- turn_up
- elsif sx < 0 and sy < 0
- turn_left
- end
- end
- end
- #==============================================================================
- # ■ 正面事件的啟動判定
- #------------------------------------------------------------------------------
- # 事件啟動的判定。
- # 本類別的實例請參考 $game_player。
- #==============================================================================
- class Game_Player < Game_Character
- def check_event_trigger_there(triggers)
- result = false
- # 事件執行中的情況下
- if $game_system.map_interpreter.running?
- return result
- end
- # 計算正面座標
- ##########################################################
- case @direction
- when 2
- new_x = @x-1
- new_y = @y+1
- when 4
- new_x = @x-1
- new_y = @y-1
- when 6
- new_x = @x+1
- new_y = @y+1
- when 8
- new_x = @x+1
- new_y = @y-1
- end
- ##########################################################
- # 全部事件的循環
- for event in $game_map.events.values
- # 事件座標與目標一致的情況下
- if event.x == new_x and event.y == new_y and
- triggers.include?(event.trigger)
- # 跳躍中以外的情況下、啟動判定是正面的事件
- if not event.jumping? and not event.over_trigger?
- event.start
- result = true
- end
- end
- end
- # 找不到符合條件的事件的情況下
- if result == false
- # 正面的元件是計數器的情況下
- if $game_map.counter?(new_x, new_y)
- # 計算 1 元件裡側的座標
- ##########################################################
- case @direction
- when 2
- new_x = @x-1
- new_y = @y+1
- when 4
- new_x = @x-1
- new_y = @y-1
- when 6
- new_x = @x+1
- new_y = @y+1
- when 8
- new_x = @x+1
- new_y = @y-1
- end
- ##########################################################
- # 全事件的循環
- for event in $game_map.events.values
- # 事件座標與目標一致的情況下
- if event.x == new_x and event.y == new_y and
- triggers.include?(event.trigger)
- # 跳躍中以外的情況下、啟動判定是正面的事件
- if not event.jumping? and not event.over_trigger?
- event.start
- result = true
- end
- end
- end
- end
- end
- return result
- end
- #--------------------------------------------------------------------------
- # ● 畫面更新
- #--------------------------------------------------------------------------
- def update
- # 本地變數記錄移動訊息
- last_moving = moving?
- # 移動中、事件執行中、強制移動路線中、
- # 訊息視窗一個也不顯示的時候
- unless moving? or $game_system.map_interpreter.running? or
- @move_route_forcing or $game_temp.message_window_showing
- # 如果方向鍵被按下、主角就朝那個方向移動
- ######################################################################
- case Input.dir4
- when 2
- move_lower_right
- when 4
- move_lower_left
- when 6
- move_upper_right
- when 8
- move_upper_left
- 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
复制代码
范例工程:
http://rpg.blue/upload_program/f ... ��V1.0_89032316.rar
本人第一次在这里发布原创脚本,如果脚本有什么错误,希望请各位多多指教,
THANKS!! |
|