赞 | 0 |
VIP | 47 |
好人卡 | 14 |
积分 | 1 |
经验 | 6342 |
最后登录 | 2015-10-31 |
在线时间 | 466 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 50
- 在线时间
- 466 小时
- 注册时间
- 2006-2-25
- 帖子
- 1863
|
本帖最后由 诡异の猫 于 2011-1-8 13:06 编辑
回复 八云紫 的帖子
首先先理一下个变量间的关系吧...其实这里可以完全忽略X坐标和Y坐标
地图的滚动是通过改变@real_x和@real_y的值来实现的
而sreen_x和screen_y是角色在画面上的位置 一般都是在中间
所以一般角色移动的时候screen_x和screen_y是没有变的 只是地图滚动而已 加上角色的行走动作
但screen_x是@real_x的函数,screen_y是@real_y的函数
角色移动@real_x和@real_y会变,因此screen_x,y也会变才对
不过这里是通过Game_Map的adjust_x和adjust_y方法来决定screen_x,y变不变的
只有当地图滚到边了screen_x,y才会变
还有一种情况screen_y会变就是跳跃
screen_y受两个变量影响:@real_y和@jump_peak
刚看了下Jump的方法
并不是同时通过移动和跳跃来实现的说...抱歉
首先看下Game_Character的update方法- def update
- if jumping? # 跳跃
- update_jump
- elsif moving? # 移动
- update_move
- else # 停止
- update_stop
- end
- end
复制代码 jumping的时候是update_jump,moving的时候是update_move
所以不是同时update_jump和move的说...抱歉
再来看看jumping?哪来的- def jumping?
- return @jump_count > 0
- end
复制代码 就是当jump_count > 0的时候jumping就为true
那jump_count哪来的- - 继续看下jump方法- def jump(x_plus, y_plus)
- if x_plus.abs > y_plus.abs # 横向距离较大
- x_plus < 0 ? turn_left : turn_right
- elsif x_plus.abs > y_plus.abs # 纵向距离较大
- y_plus < 0 ? turn_up : turn_down
- end
- @x += x_plus
- @y += y_plus
- distance = Math.sqrt(x_plus * x_plus + y_plus * y_plus).round
- @jump_peak = 10 + distance - @move_speed
- [color=Magenta]@jump_count = @jump_peak * 2[/color]
- @stop_count = 0
- straighten
- end
复制代码 一旦JUMP的时候就有jump_count了
来翻译一下Jump这个方法先...- 第2-6句只是判定角色朝向用的
- 接着第7-8句直接就把角色的地图坐标更改到目标位置了
- (只是改变了@x和@y,没有改变@real_x和@real_y,所以地图暂时不滚动)
- 第9句是用勾股定理算出原位置和目标位置两点间的直线距离
- 然后根据一定函数算出jump_peak和jump_count(含义未知)
复制代码 这样我们就得出了@jump_peak和@jump_count
继续看下update_jump- def update_jump
- @jump_count -= 1
- @real_x = (@real_x * @jump_count + @x * 256) / (@jump_count + 1)
- @real_y = (@real_y * @jump_count + @y * 256) / (@jump_count + 1)
- update_bush_depth
- end
复制代码 这时才通过@jump_count来改变@real_x和@real_y
从而让地图滚动
而@jump_peak这个变量只是用来实现角色在screen_y上的位置变动,不影响地图滚动
抱歉,刚误导了你- -
如果觉得答案不满意的话5VIP可以还回去的说,不好意思 |
评分
-
查看全部评分
|