记录一下需要做的事情,免得过后忘了.

1. EventTrigger 只需要根据x y来判断是否触发,而不要使用rectangle collision.减少计算量 (half done, 有bug, 任何sprite移出触发范围都会导致reactivate)

2. Camera要支持 smooth scroll (done)

3. Polygon collsion要加上一个移动向量,避免不必要的多边行碰撞测试. (done,改用了direction)

4. RPG游戏中,角色与地图polygon做collsion时,角色不要用rectangle,改用点. 点取rectangle中心. (done)

5. 强类型BUFFER类

6. 改进移动,每次1PX.但是collision 提前.减少collsion的计算次数.

 

Tags: doufu

No Comments 2008-09-20 15:38:57 by Homyu.Shinn

1) 今天本来是想写animation class的,但是在考虑animation class中同步的cycle应该放在哪时,突然发现了一个问题.

现在每个game.sprite.sprite对象都有一个cycle.各自控制着自己的cycle速度
这样很不好,以后将会没有办法从整体上控制速度.
所以最好能有个game.sprite.CycleController负责调度.

CycleController有一个Cycle.然后这个它调用所有attached 的Do方法.

而现在的sprite的移动时,则不需要单独一个movinghandler.但需要移动时,attach 移动方法,停止时.detach.

然后animation class在做动画时,也attach自己的do

 

Update: 7/10/08 终于好了,最近手痛...我是指PACE CONTROLLER好了.

2) 另外最终还是决定animation应该在GameObject下面, sprite只处理移动.而不移动的物体,如房子,也可能需要有燃烧时候的动画.

 

Tags: doufu

No Comments 2008-07-11 01:46:03 by Homyu.Shinn

今天的问题是,4way direction sprite的实现和动画类的实现的问题。

动画类animation class 应该放在……我认为是4 way direction sprite 里,因为:

1)DisplayObject应该相当与显示器,或显存,只是把游戏中的指定的东西打到屏幕上所以不应该做很复杂的东西。

2) GameObject中应该记录当前显示的图片,和其偏移量,和大小,使之能够被playground manage mapping到 display object上面。

3) 而在4 way direction sprite里面,我们需要计算当前的显示的位置,设置到基类的对应properties里。而这个工作其实应该抽象出来由animation class完成。

4 way direction sprite告诉animation class我现象想播放的是第几列,第几行的图,animation class 根据图大小计算出位置。 并设定到game base object

另外animation class可能还需要,能够顺序播放一列或一行图的能力还有replay ,播放时,由调用者的cycle被调用时顺带调用animation class 的next frame方法,animation class自己不需要cycle,因为他的动作必须和调用者同步。

在animation class 的next frame被调用时,他把值设置到game object 上。

Update:

好了,1)和2)搞定了,现在是animation class了。

Update 6/19: 可以加一个interval timer来提高移动速度.

Tags: doufu

No Comments 2008-06-10 12:47:35 by Homyu.Shinn

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