public void update(long dt,float ratioY){
  double step=2 * Math.PI / POINTS_PER_CIRCLE;
  angle+=dt * BUBBLE_D_ANGLE;
  float fromX=startX + (float)(0.05f * Math.sin(angle));
  float toX=fromX + size;
  float fromY=this.fromY + dt * speed;
  float toY=fromY + size;
  centerY+=dt * virtualSpeed;
  getColor()[3]=(TOP_Y - centerY / TOP_Y);
  vertexBuffer.put(0,Utils.normalizeGl(0,fromX,toX));
  vertexBuffer.put(1,Utils.normalizeGl(centerY * ratioY,fromY,toY));
  for (int i=1; i <= POINTS_PER_CIRCLE; i++) {
    vertexBuffer.put(COORDS_PER_VERTEX * i,Utils.normalizeGl((float)Math.sin(-Math.PI + step * i),fromX,toX));
    vertexBuffer.put(COORDS_PER_VERTEX * i + 1,Utils.normalizeGl((float)Math.cos(-Math.PI + step * i) * ratioY,fromY,toY));
  }
  this.fromY=fromY;
}

public void update ( long dt , float ratioY ) { double step = 2 * Math . PI / POINTS_PER_CIRCLE ; angle += dt * BUBBLE_D_ANGLE ; float fromX = startX + ( float ) ( 0.05f * Math . sin ( angle ) ) ; float toX = fromX + size ; float fromY = this . fromY + dt * speed ; float toY = fromY + size ; centerY += dt * virtualSpeed ; getColor ( ) [ 3 ] = ( TOP_Y - centerY / TOP_Y ) ; vertexBuffer . put ( 0 , Utils . normalizeGl ( 0 , fromX , toX ) ) ; vertexBuffer . put ( 1 , Utils . normalizeGl ( centerY * ratioY , fromY , toY ) ) ; for ( int i = 1 ; i <= POINTS_PER_CIRCLE ; i ++ ) { vertexBuffer . put ( COORDS_PER_VERTEX * i , Utils . normalizeGl ( ( float ) Math . sin ( - Math . PI + step * i ) , fromX , toX ) ) ; vertexBuffer . put ( COORDS_PER_VERTEX * i + 1 , Utils . normalizeGl ( ( float ) Math . cos ( - Math . PI + step * i ) * ratioY , fromY , toY ) ) ; } this . fromY = fromY ; }
update position of bubble .
