Project1

标题: real_xy的问题 [打印本页]

作者: piaoy    时间: 2012-10-22 21:36
标题: real_xy的问题
为什么real_x是x*128然后到screen x的时候再除以4?
为什么不直接让real_x= x*32?
这样写有什么作用?可以去掉吗?dsu_plus_rewardpost_czw
作者: 虾米£浪子    时间: 2012-10-23 19:06
就是精确点的,按一下,马上放掉是移动半格好象,在Game_Character 2 动画更新里有个计算real_x的方法。
作者: 沙漠点灰    时间: 2012-10-23 20:44
本帖最后由 沙漠点灰 于 2012-10-23 20:59 编辑

应该是仅仅照顾事件走动速度而这样的..
事件每帧移动 2^速度,在计算时,再除以4,
若是lz那样*32,就得这样改:
事件每帧移动 2^(速度-2)
这样可能出现小数,如果我是默认脚本编写者的话,我是不想出现小数的...
作者: piaoy    时间: 2012-10-23 22:41
沙漠点灰 发表于 2012-10-23 20:44
应该是仅仅照顾事件走动速度而这样的..
事件每帧移动 2^速度,在计算时,再除以4,
若是lz那样*32,就得这样改 ...

怎么会出现小数呢。。。这是在整数范围内的运算啊。
那我把移动的速度改成与32协调不就行了?
作者: 沙漠点灰    时间: 2012-10-24 13:00
piaoy 发表于 2012-10-23 22:41
怎么会出现小数呢。。。这是在整数范围内的运算啊。
那我把移动的速度改成与32协调不就行了? ...

比如移动速度为1,
那么每帧应该移动
2^(1-2) = 0.5像素,这不是小数...??

若是最后除以4,那么就每帧移动2^1,即2个单位,每4个单位为1像素...

比如
  def screen_x
    # 通过实际坐标和地图的显示位置来求得画面坐标
    return (@real_x - $game_map.display_x + 3) / 4 + 16
  end




@real_x = 1280,若为lz那样则为320
$game_map.display_x = 1282(在运动中),若为lz那样则为320.5,

那么 screen_x = (2+3)/4 + 16 => 17
lz的:
screen_x = 0.5 + 16 => 16.5 => ceil => 17

反正我是倾向于上者.

因为仅仅算是Ruby的"优点",数据类型可以随时改变.

若是其他语言,作为2D游戏,坐标我肯定设为短整型的,
那么
x = 2^(1-2) => 0,
也就是说,速度低于而2的事件是不会移动的,不过,这里是ruby,两种都行....
作者: piaoy    时间: 2012-10-24 21:37
沙漠点灰 发表于 2012-10-24 13:00
比如移动速度为1,
那么每帧应该移动
2^(1-2) = 0.5像素,这不是小数...??

我把real_x增减的脚本改得使它一直是整数不就行了麽?
比如 real_x += 2**@speed
这就是整数啊
作者: 沙漠点灰    时间: 2012-10-24 22:25
piaoy 发表于 2012-10-24 21:37
我把real_x增减的脚本改得使它一直是整数不就行了麽?
比如 real_x += 2**@speed
这就是整数啊 ...

给您跪下了..........{:2_264:}

你这样不是就直接把速度乘以4了吗...........
速度为1时,每帧移动0.5像素
为了保证是整数,应该乘以64
不过万一不小心速度设置到0了,为保证整数,就乘以128了,这种解释您满意吗?


王芳,你怎么看?
作者: piaoy    时间: 2012-10-25 21:38
沙漠点灰 发表于 2012-10-24 22:25
给您跪下了..........

你这样不是就直接把速度乘以4了吗...........

还是没懂你的意思,我是说一格是32px的话,那计算screen坐标也就不用再除以4了,速度是1的时候怎么会是0.5呢?(0.5是不是(2**1)/4得来的?)
作者: 沙漠点灰    时间: 2012-10-25 23:09
piaoy 发表于 2012-10-25 21:38
还是没懂你的意思,我是说一格是32px的话,那计算screen坐标也就不用再除以4了,速度是1的时候怎么会是0. ...

速度是规定的:
速度为1,每2帧移动1像素,一秒就能移动约0.7格,不信你数数,看看速度为1时1秒是0.7格,还是3格。
速度为2,每帧移动1像素,一秒就能移动约1格半
.............................
(0.5是不是(2**1)/4得来的?)
答案是对的,不过前提是浮点值.不然你试试,(2**1)/4=0




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1