Project1
标题:
--增强手感--遇障碍自动转向--3.22更新不对NPC转向
[打印本页]
作者:
幻の飞鱼
时间:
2007-3-4 21:42
标题:
--增强手感--遇障碍自动转向--3.22更新不对NPC转向
尽量把判定做的完善了一点
但是面队两边都可完全通行的障碍,比如一个分叉的尖顶处,我还是没有想到最好的办法
,用了随机方向,不知道怎么判定具体走那边会更完善
基本功能已经实现
---------------3月22日更新,对NPC不进行转向,对于个别需要自动转向的事件,第一行写一句注释“not_npc”即可,见范例
http://rpg.blue/upload_program/files/自动转向修正版.rar
直接使用脚本
#==============================================================================
# 使用方法:
# 1.直接插在MAIN前即可使用
# 2.面对事件不进行自动转向
# 3.对于个别需要自动转向的事件,在该事件的第一页第一行写一句注释"not_npc"(不含引号)
#
#------------------------------------------------------------------------------
class Game_Character
#--------------------------------------------------------------------------
# ● 可以通行判定
# x : X 坐标
# y : Y 坐标
# d : 方向 (0,2,4,6,8) ※ 0 = 全方向不能通行的情况判定 (跳跃用)
#--------------------------------------------------------------------------
def passable?(x, y, d)
#---------------------------
$isnpc = true
#---------------------------
# 求得新的坐标
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
# 不能通行
#---------------------------
$isnpc = false if event.list[0].parameters[0] != "not_npc"
#---------------------------
return false
end
# 自己是主角、对方的图形是角色的情况下
if event.character_name != ""
# 不能通行
#---------------------------
$isnpc = false if event.list[0].parameters[0] != "not_npc"
#---------------------------
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
#--------------------------------------------------------------------------
# ● 向下移动
# turn_enabled : 本场地位置更改许可标志
#--------------------------------------------------------------------------
def move_down(turn_enabled = true)
#---------------------------
direct = @direction
#---------------------------
# 面向下
if turn_enabled
turn_down
end
# 可以通行的场合
if passable?(@x, @y, 2)
# 面向下
turn_down
# 更新坐标
@y += 1
# 增加步数
increase_steps
# 不能通行的情况下
else
#---------------------------
if $isnpc
if passable?(@x, @y, 6) and passable?(@x+1, @y, 2) and passable?(@x, @y, 4) and passable?(@x-1, @y, 2)
move_left if direct == 4
move_right if direct == 6
if direct == 2 or direct == 8
randtra = rand(2)
randtra == 0 ? move_left : move_right
end
else
move_left if passable?(@x, @y, 4) and passable?(@x-1, @y, 2)
move_right if passable?(@x, @y, 6) and passable?(@x+1, @y, 2)
end
end
#---------------------------
# 接触事件的启动判定
check_event_trigger_touch(@x, @y+1)
end
end
#--------------------------------------------------------------------------
# ● 向左移动
# turn_enabled : 本场地位置更改许可标志
#--------------------------------------------------------------------------
def move_left(turn_enabled = true)
#---------------------------
direct = @direction
#---------------------------
# 面向左
if turn_enabled
turn_left
end
# 可以通行的情况下
if passable?(@x, @y, 4)
# 面向左
turn_left
# 更新坐标
@x -= 1
# 增加步数
increase_steps
# 不能通行的情况下
else
#---------------------------
if $isnpc
if passable?(@x, @y, 8) and passable?(@x, @y-1, 4) and passable?(@x, @y, 2) and passable?(@x, @y+1, 4)
move_up if direct == 8
move_down if direct == 2
if direct == 4 or direct == 6
randtra = rand(2)
randtra == 0 ? move_up : move_down
end
else
move_up if passable?(@x, @y, 8) and passable?(@x, @y-1, 4)
move_down if passable?(@x, @y, 2) and passable?(@x, @y+1, 4)
end
end
#---------------------------
# 接触事件的启动判定
check_event_trigger_touch(@x-1, @y)
end
end
#--------------------------------------------------------------------------
# ● 向右移动
# turn_enabled : 本场地位置更改许可标志
#--------------------------------------------------------------------------
def move_right(turn_enabled = true)
#---------------------------
direct = @direction
#---------------------------
# 面向右
if turn_enabled
turn_right
end
# 可以通行的场合
if passable?(@x, @y, 6)
# 面向右
turn_right
# 更新坐标
@x += 1
# 增加部数
increase_steps
# 不能通行的情况下
else
#---------------------------
if $isnpc
if passable?(@x, @y, 8) and passable?(@x, @y-1, 6) and passable?(@x, @y, 2) and passable?(@x, @y+1, 6)
move_up if direct == 8
move_down if direct == 2
if direct == 4 or direct == 6
randtra = rand(2)
randtra == 0 ? move_up : move_down
end
else
move_up if passable?(@x, @y, 8) and passable?(@x, @y-1, 6)
move_down if passable?(@x, @y, 2) and passable?(@x, @y+1, 6)
end
end
#---------------------------
# 接触事件的启动判定
check_event_trigger_touch(@x+1, @y)
end
end
#--------------------------------------------------------------------------
# ● 向上移动
# turn_enabled : 本场地位置更改许可标志
#--------------------------------------------------------------------------
def move_up(turn_enabled = true)
#---------------------------
direct = @direction
#---------------------------
# 面向上
if turn_enabled
turn_up
end
# 可以通行的情况下
if passable?(@x, @y, 8)
# 面向上
turn_up
# 更新坐标
@y -= 1
# 歩数増加
increase_steps
# 不能通行的情况下
else
#---------------------------
if $isnpc
if passable?(@x, @y, 6) and passable?(@x+1, @y, 8) and passable?(@x, @y, 4) and passable?(@x-1, @y, 8)
move_left if direct == 4
move_right if direct == 6
if direct == 2 or direct == 8
randtra = rand(2)
randtra == 0 ? move_left : move_right
end
else
move_left if passable?(@x, @y, 4) and passable?(@x-1, @y, 8)
move_right if passable?(@x, @y, 6) and passable?(@x+1, @y, 8)
end
end
#---------------------------
# 接触事件的启动判定
check_event_trigger_touch(@x, @y-1)
end
end
end
复制代码
作者:
幻の飞鱼
时间:
2007-3-4 21:42
标题:
--增强手感--遇障碍自动转向--3.22更新不对NPC转向
尽量把判定做的完善了一点
但是面队两边都可完全通行的障碍,比如一个分叉的尖顶处,我还是没有想到最好的办法
,用了随机方向,不知道怎么判定具体走那边会更完善
基本功能已经实现
---------------3月22日更新,对NPC不进行转向,对于个别需要自动转向的事件,第一行写一句注释“not_npc”即可,见范例
http://rpg.blue/upload_program/files/自动转向修正版.rar
直接使用脚本
#==============================================================================
# 使用方法:
# 1.直接插在MAIN前即可使用
# 2.面对事件不进行自动转向
# 3.对于个别需要自动转向的事件,在该事件的第一页第一行写一句注释"not_npc"(不含引号)
#
#------------------------------------------------------------------------------
class Game_Character
#--------------------------------------------------------------------------
# ● 可以通行判定
# x : X 坐标
# y : Y 坐标
# d : 方向 (0,2,4,6,8) ※ 0 = 全方向不能通行的情况判定 (跳跃用)
#--------------------------------------------------------------------------
def passable?(x, y, d)
#---------------------------
$isnpc = true
#---------------------------
# 求得新的坐标
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
# 不能通行
#---------------------------
$isnpc = false if event.list[0].parameters[0] != "not_npc"
#---------------------------
return false
end
# 自己是主角、对方的图形是角色的情况下
if event.character_name != ""
# 不能通行
#---------------------------
$isnpc = false if event.list[0].parameters[0] != "not_npc"
#---------------------------
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
#--------------------------------------------------------------------------
# ● 向下移动
# turn_enabled : 本场地位置更改许可标志
#--------------------------------------------------------------------------
def move_down(turn_enabled = true)
#---------------------------
direct = @direction
#---------------------------
# 面向下
if turn_enabled
turn_down
end
# 可以通行的场合
if passable?(@x, @y, 2)
# 面向下
turn_down
# 更新坐标
@y += 1
# 增加步数
increase_steps
# 不能通行的情况下
else
#---------------------------
if $isnpc
if passable?(@x, @y, 6) and passable?(@x+1, @y, 2) and passable?(@x, @y, 4) and passable?(@x-1, @y, 2)
move_left if direct == 4
move_right if direct == 6
if direct == 2 or direct == 8
randtra = rand(2)
randtra == 0 ? move_left : move_right
end
else
move_left if passable?(@x, @y, 4) and passable?(@x-1, @y, 2)
move_right if passable?(@x, @y, 6) and passable?(@x+1, @y, 2)
end
end
#---------------------------
# 接触事件的启动判定
check_event_trigger_touch(@x, @y+1)
end
end
#--------------------------------------------------------------------------
# ● 向左移动
# turn_enabled : 本场地位置更改许可标志
#--------------------------------------------------------------------------
def move_left(turn_enabled = true)
#---------------------------
direct = @direction
#---------------------------
# 面向左
if turn_enabled
turn_left
end
# 可以通行的情况下
if passable?(@x, @y, 4)
# 面向左
turn_left
# 更新坐标
@x -= 1
# 增加步数
increase_steps
# 不能通行的情况下
else
#---------------------------
if $isnpc
if passable?(@x, @y, 8) and passable?(@x, @y-1, 4) and passable?(@x, @y, 2) and passable?(@x, @y+1, 4)
move_up if direct == 8
move_down if direct == 2
if direct == 4 or direct == 6
randtra = rand(2)
randtra == 0 ? move_up : move_down
end
else
move_up if passable?(@x, @y, 8) and passable?(@x, @y-1, 4)
move_down if passable?(@x, @y, 2) and passable?(@x, @y+1, 4)
end
end
#---------------------------
# 接触事件的启动判定
check_event_trigger_touch(@x-1, @y)
end
end
#--------------------------------------------------------------------------
# ● 向右移动
# turn_enabled : 本场地位置更改许可标志
#--------------------------------------------------------------------------
def move_right(turn_enabled = true)
#---------------------------
direct = @direction
#---------------------------
# 面向右
if turn_enabled
turn_right
end
# 可以通行的场合
if passable?(@x, @y, 6)
# 面向右
turn_right
# 更新坐标
@x += 1
# 增加部数
increase_steps
# 不能通行的情况下
else
#---------------------------
if $isnpc
if passable?(@x, @y, 8) and passable?(@x, @y-1, 6) and passable?(@x, @y, 2) and passable?(@x, @y+1, 6)
move_up if direct == 8
move_down if direct == 2
if direct == 4 or direct == 6
randtra = rand(2)
randtra == 0 ? move_up : move_down
end
else
move_up if passable?(@x, @y, 8) and passable?(@x, @y-1, 6)
move_down if passable?(@x, @y, 2) and passable?(@x, @y+1, 6)
end
end
#---------------------------
# 接触事件的启动判定
check_event_trigger_touch(@x+1, @y)
end
end
#--------------------------------------------------------------------------
# ● 向上移动
# turn_enabled : 本场地位置更改许可标志
#--------------------------------------------------------------------------
def move_up(turn_enabled = true)
#---------------------------
direct = @direction
#---------------------------
# 面向上
if turn_enabled
turn_up
end
# 可以通行的情况下
if passable?(@x, @y, 8)
# 面向上
turn_up
# 更新坐标
@y -= 1
# 歩数増加
increase_steps
# 不能通行的情况下
else
#---------------------------
if $isnpc
if passable?(@x, @y, 6) and passable?(@x+1, @y, 8) and passable?(@x, @y, 4) and passable?(@x-1, @y, 8)
move_left if direct == 4
move_right if direct == 6
if direct == 2 or direct == 8
randtra = rand(2)
randtra == 0 ? move_left : move_right
end
else
move_left if passable?(@x, @y, 4) and passable?(@x-1, @y, 8)
move_right if passable?(@x, @y, 6) and passable?(@x+1, @y, 8)
end
end
#---------------------------
# 接触事件的启动判定
check_event_trigger_touch(@x, @y-1)
end
end
end
复制代码
作者:
秋弦月
时间:
2007-3-20 05:51
{/se}好东东啊!!
和KKME之前做的事件比起来方便的要多。
KKME的那个范例:
http://rpg.blue/viewthread.php?tid=39702&ntime=2007%2D3%2D19+21%3A50%3A01
作者:
秋弦月
时间:
2007-3-20 21:40
{/fd}但是有个缺点……
碰到事件它也会走开。这个……找NPC说话都得累死。。。。{/gg}
作者:
幻の飞鱼
时间:
2007-3-22 23:16
额,忽略了这个问题,偶都忘了这个贴了,偶来改改
作者:
洋娃娃
时间:
2007-3-22 23:47
是非常好的东西,以后不需要写事件转向了,是否支持8方向行走时转向?
作者:
洋娃娃
时间:
2007-3-22 23:50
SailCat 以前研究过,参考下 http://rpg.blue/web/htm/news219.htm
作者:
洋娃娃
时间:
2007-3-22 23:54
试走了一下,到处都是滑溜溜的感觉有点恶心……不过也想不出更好的意见……
作者:
柳柳
时间:
2007-3-23 00:17
这个功能好像一般是用在键盘以外的控制器下的……
比如鼠标,点鼠标走路,不停转向比较麻烦;手柄,最好也不要老转;手机,这个功能是必须的,否则手都按疼了。
作者:
gpra8764
时间:
2007-3-24 17:40
提示:
作者被禁止或删除 内容自动屏蔽
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1