Android游戏开发学习①弹跳小球实现方法

2019-12-10 20:00:03于海丽
  • }   public void drawSelf(Canvas canvas) {  
  • canvas.drawBitmap(bitmap,x,y,null);   }  
  • startX和startY变量记录每一个运动阶段(如从最高点下落到最低点)开始时小球的初始X、Y坐标,在随后的物理计算中,小球的实时X、Y坐标将会是初始坐标加上这段时间内的位移。

    startVX和startVY是小球每一个运动阶段初始时刻在水平方向X和竖直方向Y方向上的速度,两者将用于计算小球的实时速度v_x和v_y。

    timeX和timeY分别代表小球在水平和竖直方向上运动的持续时间,当小球从一个阶段运行到下一个阶段时(如从下落阶段弹起后转入上抛阶段),timeX和timeY将会被重置。

    BallThread对象继承自Thread线程类,起到了物理引擎的作用,负责根据物理公式对球的位置坐标等属性进行修改,从而改变球的运动轨迹。

    布尔变量bFall用于标识小球是否已经从木板上落下,在程序运行时屏幕的左上部分会有一个木板,所有的小球从木板开始向右进行平抛运动。bFall为false时代表小球仍然在木板上移动,还未落下。

    float变量impactFactor作用是当小球撞到地面上后根据其值对小球水平和竖直方向的速度进行衰减。

    构造函数中对部分成员变量进行初始化,并启动物理引擎。

    构造函数中BallView类的两个常量V_MIN和V_MAX分别代表小球水平方向速度的最小值和最大值,此处用于生成小球的随机水平速度。

    2.小球物理引擎BallThread类

    首先解释一下此物理引擎的工作机制,了解其是如何改变小球的运动轨迹的。

    运动阶段,本例中将小球的运动按照竖直方向的速度分为若干个阶段,每个阶段中小球在竖直方向上的速度的大小或者是一直增大(下落),或者是一直减小(上升)。即每当小球在竖直方向上的速度发生改变时(如撞地或达到空中最高点),小球就结束该阶段的运动进入一个新的阶段。