android - 实现弹丸运动。安卓

标签 android game-physics

我正在尝试为我的应用程序实现抛射运动。首先,我正在尝试绘制抛射物上的点。我假设我的初始速度为 5m/s。

我试图分别根据 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);
     }

最佳答案

我认为您需要 Math.cos(angle)Math.sin(angle),而不是 Math.acos(angle)Math.asin(角度)。此外,请确保 angle 的单位是弧度,而不是度数。

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

float now = 0f;
for(int i = 1; i <= 10; i++) {
    Log.w(this.getClass().getName(),"In plotting points loop");
    mX1 = mUx*now;
    mY1 = mUy*now + (mGravity/2)*now*now;

    Log.d(this.getClass().getName(), "Value of mX1: " + mX1);
    Log.d(this.getClass().getName(), "Value of mY1: " + mY1);
    mCanvas.drawPoint(mX1, mY1, mPaint);
    now += 1f; // or whatever time increment you want
 }

如果您需要使用实际耗时,则此循环不会执行此操作,因为执行 10 次迭代的时间不会达到系统时间的任何可察觉变化。

关于android - 实现弹丸运动。安卓,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7789393/

相关文章:

ios - SpriteKit SKPhysicsBody 与内边缘

swift - 实现 "floating bubble"对象的最佳方法

android - 模拟器 : Error while connecting to socket '127.0.0.1:1970' : 111 -> Connection refused

javascript - react native 构建失败

ios - 有时 Sprite 在接触另一个 Sprite 时会被推开

c++ - 实体组件系统和共享公共(public)基类型的多个组件

java - 自上而下的宇宙飞船,计算运动

java - Android 中的运行时类是什么?

c# - 如何在私有(private)浏览器 xamarin 表单中打开 URL

java - 数据未插入到 android 上的 SQLite 数据库中?