实施射弹运动。安卓

时间:2011-10-17 04:30:31

标签: android game-physics

我正在尝试为我的应用程序实现一个射弹动作。首先,我试图绘制射弹上的点。我假设我的初始速度为5米/秒。

我试图分别根据x和y方向的投影角度来计算我的初始速度。但是我得到的是我们的NaN(不是数字)。

此外,我试图在轨迹的路径上绘制前10个点,但也为他们获取NaN。由于现在返回的时间是毫秒,我将其转换为秒。

请说明我出错的地方。

public void drawProjectile(double angle)
 {
     Log.w(this.getClass().getName(),"drawProjectile called");
     mUx = mUi*Math.acos(angle);
     mUy = mUi*Math.asin(angle);


     Log.d(this.getClass().getName(), "Value of mUx: " + Double.toString(mUx));
     Log.d(this.getClass().getName(), "Value of mUy: " + Double.toString(mUy));
     for(int i = 1;i<=10;i++)
     {
     Log.w(this.getClass().getName(),"In plotting points loop");
     long now = System.currentTimeMillis();
     mX1=(float) (mUx*now)/1000;
     mY1 = (float) (mUy*now/1000+(mGravity/2)*now*now/1000000);

     Log.d(this.getClass().getName(), "Value of mX1: " + Float.toString(mX1));
     Log.d(this.getClass().getName(), "Value of mY1: " + Float.toString(mY1));
     mCanvas.drawPoint(mX1, mY1, mPaint);
     }

1 个答案:

答案 0 :(得分:2)

我认为你想要Math.cos(angle)Math.sin(angle),而不是Math.acos(angle)Math.asin(angle)。另外,请确保angle以弧度为单位,而不是度数。

编辑:关于“指数值”,我的猜测是你不应该在计算中使用当前的系统时间。 (这是自1970年1月1日开始以来的毫秒数;几乎没有时间与您的问题相关。)您应该使用从程序开始之前经过的时间(long start = System.currentTimeMillis();在循环之前,然后减去{ {1}}来自循环内的start,或者(或许更好)点之间的模拟时间。像这样:

now

如果你需要使用实际经过的时间,那么这个循环不会这样做,因为执行10次迭代的时间不会等于系统时间的任何可察觉的变化。