用脚本的话,更加简单:
定位RGSS Game_Player,第208行:
# 如果方向键被按下、主角就朝那个方向移动
case Input.dir4
when 2
move_down
when 4
move_left
when 6
move_right
when 8
move_up
end
修改为:
# 如果方向键被按下、主角就朝那个方向移动
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
存盘后就可以实现八方向走了.
如果你只是想实现八方向走的功能(像黑暗圣剑那样),就到此为止,如果还有兴趣则继续往下看:
Game_Character 3 第101行
#--------------------------------------------------------------------------
# ● 向左下移动
#--------------------------------------------------------------------------
def move_lower_left
# 没有固定面向的场合
unless @direction_fix
# 朝向是右的情况下适合的面是左面、朝向是上的情况下适合的面是下面
@direction = (@direction == 6 ? 4 : @direction == 8 ? 2 : @direction)
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
end
end
首先解决问题2:
八方向的通行判定是双路径并行,之间是或的关系,如果改成与的关系,就能实现只要两条路径中有一条走不通,斜方向就走不起来.
# 下→左、左→下 的通道可以通行的情况下
if (passable?(@x, @y, 2) and passable?(@x, @y + 1, 4)) and
(passable?(@x, @y, 4) and passable?(@x - 1, @y, 2))
这样虽说是可以了,但是,也不能说一条走不通就不让动啊,所以还需要分别判定两个方向的路径:
# 下→左、左→下 的通道可以通行的情况下
if (passable?(@x, @y, 2) and passable?(@x, @y + 1, 4)) and
(passable?(@x, @y, 4) and passable?(@x - 1, @y, 2))
# 更新坐标
@x -= 1
@y += 1
# 增加步数
increase_steps
# 下→左能够通行的情况下
elsif (passable?(@x, @y, 2) and passable?(@x, @y + 1, 4))
# 向下移动后向左移动
move_down
move_left
# 左→下能够通行的情况下
elsif (passable?(@x, @y, 4) and passable?(@x - 1, @y, 2))
# 向左移动后向下移动
move_left
move_down
end
然后来解决比较复杂的问题1:
首先,对于这个智能判定前进方向的功能,原来的方法里是没有的,为了不影响事件里设置好的移动路线在执行时出现问题,必须加上判定,令其只对角色的按键移动有效.
一种方法是条件分歧 if self.is_a?(Game_Player)来判断类型,这样条件里的功能就只对角色有效,对NPC无效了,不过,还是不能判断角色的移动是事件设定移动还是按键移动,所以再加一个条件and not @move_route_forcing,这样事件设定里的角色移动便不会执行这个分歧的功能.
分歧里面的操作是: 首先判定角色朝向,如果向左,则以向左方前进为优先,不能移动时启动左方接触事件,没有事件时向下方移动;否则以向下方前进为优先,不能移动时启动下方接触事件,没有事件时向左方移动.
# 如果移动的对象是角色且非强制移动
if self.is_a?(Game_Player) and not @move_route_forcing
# 面向左时
if @direction = 4
# 左方可以通行时
if passable?(@x, @y, 4)
# 向左移动
move_left
# 不能通行时
else
# 左面接触事件启动
result = check_event_trigger_touch(@x-1, @y)
# 没有事件的情况下
unless result
# 向下移动
move_down
end
end
# 不面向左时
else
# 下方可以通行时
if passable?(@x, @y, 2)
# 向下移动
move_down
# 不能通行时
else
# 下面接触事件启动
result = check_event_trigger_touch(@x, @y+1)
# 没有事件的情况下
unless result
# 向左移动
move_left
end
end
end
end
然后把这个分歧结构作为一个elsif条件整合到前面的部分中,完整的"向左下移动"方法(紫色字是新加的脚本):
#--------------------------------------------------------------------------
# ● 向左下移动
#--------------------------------------------------------------------------
def move_lower_left
# 没有固定面向的场合
unless @direction_fix
# 朝向是右的情况下适合的面是左面、朝向是上的情况下适合的面是下面
@direction = (@direction == 6 ? 4 : @direction == 8 ? 2 : @direction)
end
# 下→左、左→下 的通道可以通行的情况下
if (passable?(@x, @y, 2) and passable?(@x, @y + 1, 4)) and
(passable?(@x, @y, 4) and passable?(@x - 1, @y, 2))
# 更新坐标
@x -= 1
@y += 1
# 增加步数
increase_steps
# 下→左能够通行的情况下
elsif (passable?(@x, @y, 2) and passable?(@x, @y + 1, 4))
# 向下移动后向左移动
move_down
move_left
# 左→下能够通行的情况下
elsif (passable?(@x, @y, 4) and passable?(@x - 1, @y, 2))
# 向左移动后向下移动
move_left
move_down
# 如果移动的对象是角色且非强制移动
elsif self.is_a?(Game_Player) and not @move_route_forcing
# 面向左时
if @direction = 4
# 左方可以通行时
if passable(@x, @y, 4)
# 向左移动
move_left
# 不能通行时
else
# 左面接触事件启动
result = check_event_trigger_touch(@x-1, @y)
# 没有事件的情况下
unless result
# 向下移动
move_down
end
end
# 不面向左时
else
# 下方可以通行时
if passable(@x, @y, 2)
# 向下移动
move_down
# 不能通行时
else
# 下面接触事件启动
result = check_event_trigger_touch(@x, @y+1)
# 没有事件的情况下
unless result
# 向左移动
move_left
end
end
end
end
end
这样就完成了一个有手感加强的"向左下移动"的方法,对于"向右下移动","向左上移动","向右上移动",只要调整几个方向的参数,照着上例修改一下就行了.作者: SailCat 时间: 2005-10-22 04:35 标题: 也说八方向走(功能实现+手感加强) 八方向走,如果只是要实现功能的话,实在是非常简单:
事件方法:打开一个开关,并行处理公共事件
如果方向键上按下
如果方向键左按下
左上移动
等待移动结束
除此以外的情况
如果方向键右按下
右上移动
等待移动结束
除此以外的情况
向上移动
等待移动结束
分歧结束
分歧结束
除此以外的情况
如果方向键下按下
如果方向键左按下
左下移动
等待移动结束
除此以外的情况
如果方向键右按下
右下移动
等待移动结束
除此以外的情况
向下移动
等待移动结束
分歧结束
分歧结束
除此以外的情况
如果方向键左按下
向左移动
等待移动结束
除此以外的情况
如果方向键右按下
向右移动
等待移动结束
分歧结束
分歧结束
分歧结束
分歧结束
用脚本的话,更加简单:
定位RGSS Game_Player,第208行:
# 如果方向键被按下、主角就朝那个方向移动
case Input.dir4
when 2
move_down
when 4
move_left
when 6
move_right
when 8
move_up
end
修改为:
# 如果方向键被按下、主角就朝那个方向移动
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
存盘后就可以实现八方向走了.
如果你只是想实现八方向走的功能(像黑暗圣剑那样),就到此为止,如果还有兴趣则继续往下看: