赞 | 2 |
VIP | 143 |
好人卡 | 1 |
积分 | 1 |
经验 | 216792 |
最后登录 | 2019-10-10 |
在线时间 | 24 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 61
- 在线时间
- 24 小时
- 注册时间
- 2008-8-5
- 帖子
- 1924
|
Game_Character 的 update 中,@move_speed 直接控制了刷新多少帧切换行走图移动时的下一帧:if @anime_count > 18 - @move_speed * 2
@anime_count 超过某值后就会切换到行走图下一帧,可以看出 @move_speed 越大,切换得越快~(这个 @anime_count 是在 update_move 的最后每帧增加的)
update_move 中,@move_speed 还控制了刷新一帧角色的实际移动距离:
distance = 2 ** @move_speed
# 理论坐标在实际坐标下方的情况下
if @y * 128 > @real_y
# 向下移动
@real_y = [@real_y + distance, @y * 128].min
end
默认的距离是 2^@move_speed,所以速度 4 是速度 3 的两倍~
以向下移动为例,Game_Player 刷新时会判断玩家是否按下方向键[下],如果按下则会改变继承自 Game_Character 的 @y (除非在地图边缘),这样 update_move 被调用时发现 @y 跟 @real_y 不匹配,于是让 @real_y 增加 distance 那么多(但这时 @real_y 还不一定已经和 @y 一致),并随时用 min 来修正 @real_y 的值最大为 @y * 128(这同时也保证了一次方向键[下]的按下最多移动一格,因为 @y 仅仅增加了 1),就不会出现移动结束时角色实际位置偏移了目的地图块的情况了~distance 反复被加到 @real_y,直到 @y * 128 <= @real_y,这时已经移动到目的地图块,所以 @real_y 不再改变
(RGSS 里面在算屏幕系统坐标的时候经常用图块的坐标 * 128(* 32 才是实际屏幕坐标),这应该是为了提高浮点数运算时的精度,因而在 screen_y、screen_x 获取真实屏幕坐标的时候就做了相应的换算) |
|