赞 | 0 |
VIP | 17 |
好人卡 | 0 |
积分 | 1 |
经验 | 1022914 |
最后登录 | 2017-2-4 |
在线时间 | 10 小时 |
Lv1.梦旅人 月下可怜人
- 梦石
- 0
- 星屑
- 50
- 在线时间
- 10 小时
- 注册时间
- 2005-11-23
- 帖子
- 4085
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
为提高ARPG流畅度,有必要降低行走限制,像素移动做起来容易,可实际操作性过低,大大增加与RM数据库对接的复杂度,性价比最高仍是八方向。
一:四方向转八方向
为避免与默认系统的冲突,先将所有涉及方向移动的方法加“all_”前缀,建立全方向专用副本。
涉及方法,Game_Player类中:
all_move_by_input
all_check_event_trigger_touch
all_move_down
all_move_left
all_move_right
all_move_up
all_move_lower_left
all_move_lower_right
all_move_upper_left
all_move_upper_right
四方向改为八方向
def all_move_by_input
return unless movable?
return if $game_map.interpreter.running?
case Input.dir8
when 1; all_move_lower_left
when 2; all_move_down
when 3; all_move_lower_right
when 4; all_move_left
#when 5;
when 6; all_move_right
when 7; all_move_upper_left
when 8; all_move_up
when 9; all_move_upper_right
end
end
二:自动转向
但实际操作起来会发现移动手感较硬,我们增加滑动效果,以“all_move_down(向下移动)”为例子。
修改:
def all_move_down(turn_ok = true)
if passable?(@x, @y+1) # 可以通过
turn_down
@y = $game_map.round_y(@y+1)
@real_y = (@y-1)*256
increase_steps
@move_failed = false
else # 下方向不可通过
#如果存在事件优先启动。
if all_check_event_trigger_touch(@x, @y+1) # 判断接触的事件启动
turn_down if turn_ok
@move_failed = true
return
end
#判断相对主角左右方向移动情况
#(dir =1:顺时针第一方向可;dir =2:顺时针第二方向可;dir =3:二方向皆可。)
dir = 0
dir +=1 if passable?(@x+1, @y+1) #右下
dir +=2 if passable?(@x-1, @y+1) #左下
if dir > 0
#根据多数人右下优于左上的生理习惯,右下随机量略大于左上。
return (rand(10) > 4 ? all_move_lower_right : all_move_lower_left) if dir == 3
return all_move_lower_left if dir == 2
return all_move_lower_right if dir == 1
end
end
end
其他方向更改思路完全一致,不再赘述。
三:接触事件时,移动停止。
第二步修改后,会发现,让事件非接触性启动的方式下,人物会自动绕行,这让调查事件变的很麻烦。
修改:
def all_check_event_trigger_touch(x, y)
return false if $game_map.interpreter.running?
result = false
allEvents = $game_map.events_xy(x, y)
#只要存在事件,无论是否可启动,必定为真,让移动停止。
result = true unless allEvents.empty?
for event in allEvents
if [1,2].include?(event.trigger) and event.priority_type == 1
event.start
end
end
return result
end
四:替换原来的行走刷新。
Game_Player类中
def update
last_real_x = @real_x
last_real_y = @real_y
last_moving = moving?
#全方向移动
all_move_by_input
super
update_scroll(last_real_x, last_real_y)
update_vehicle
update_nonmoving(last_moving)
end
五:整理美化脚本结构,结束。
|
|