1. direction 要提供x  y z 属性,直接用正负值的形式给出方向.
2. direction 的x y z属性可以付值
3. sprite 移动的速度需要考虑,最低速度不应该是以每个cycle移动一个pixel位单位. 因为这样在移动速度快时,sprite每个cycle都移动非常大的距离,用户很难掌握好停下来的时机,将无法停在任意地点,
应该定为每个cycle移动一个pixel当时用跳跃cycle(其中某几个cycle不执行move)的方法来做到,也就是说最快速度是每个cycle一个pixel

假设js每个0.05秒执行一个cycle,一秒钟就可以执行100 / 5 = 20个cycle,那么最快速度也就意味着,每秒将会可以移动20pixels,我想应该是够的.

那么方法就要提供以下:
MoveCycle(oDirection, ipixel) 不检测cycle跳跃,直接执行, ipixel默认为1(这里ipixcel可以最成一个propeorty),意思为每个cycle几个pixel

Move(oDirection, ispeed)这里检测跳跃,该方法只在开始移动开始时调用一次,如果sprite已经是在moving的状态中了,那么取消之前的move进入新的move状态.

MoveHandle()该方法会在move被调用时注册到cycle里,每次被调用,并根据ispeed计算该cycle是否应该被skip.

Update:

好了,第一点和第二点已经搞定,那么来看第三点,刚才通过测试,javascript的最快interval 在0.02秒左右(我用拖拉机),也就是说理想状况下是,一秒50 frames,50 Cycle Execution,单个cycle execution应该是走一个pixel是最快(其实2个pixel我想影响也不大)。也就是说1 s最多快可以移动50 pixel
大概是 ''''''''''''''''''''''''' 这么长,感觉起来,好像可以接受哦?那么如果放大到3个pixel,那么就是


'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''这么长。恩应该没问题。2,3个pixel还是可以接受的。

Issues:

 现在Game.Sprite.Speed仍然有问题,49的速度是最快的,但是50的会非常慢,但是如果把FrameSpeed和StepLength互相差成:

 

                 快      ----------------------------------------   慢

FrameSpeed 1  1  2  2  3  3  4  4...

StepLength  2  1  2  1  2  1  2  1...

这样其实也不能保证速度是随着数值上升而增大的,因为每个Cycle的执行速度其实是不确定的.另外FrameSpeed改为CycleSkip比较好一点.

Tags: doufu

No Comments 2008-06-09 12:46:37 by Homyu.Shinn

Comments:

You can leave a comment on this post if you login