谁能解释这个简单游戏中红船背后的数学? [导弹导弹]

时间:2012-02-27 04:45:24

标签: java android actionscript andengine trigonometry

游戏是一个小闪存组件,在这里找到: http://www.rydeman.com/erik/skepp2.html

我发现链接在这里: http://board.flashkit.com/board/archive/index.php/t-175556.html

我一直在使用/转换他们在第二个链接中提供的示例,但是无法使我的“导弹”正常运行。我正在使用java和andEngine组合。这就是我现在所拥有的:

public boolean onSceneTouchEvent(Scene pScene,TouchEvent pSceneTouchEvent) {
            int Missile_speed=20;

            int dx=(int) (pSceneTouchEvent.getX()-(face.getWidth()/2));
            int dy=(int) (pSceneTouchEvent.getY()-(face.getHeight()/2));

            double distance=Math.sqrt((dx*dx)+(dy*dy));

            //dx/=distance;  /** not really sure what " /= " is on this line and the next **/
            //dy/=distance;

            if (pSceneTouchEvent.getAction() == MotionEvent.ACTION_DOWN)
            {
                //to do
            }

            if (pSceneTouchEvent.getAction() == MotionEvent.ACTION_MOVE)
            {

                face.registerEntityModifier(new MoveModifier(1, face.getX(), (int)(dx/distance)*Missile_speed, face.getY(),(int)(dy/distance)*Missile_speed, EaseQuadOut.getInstance()));
            }

            if (pSceneTouchEvent.getAction() == MotionEvent.ACTION_UP)
            {
                //to do
            }
            return true;            
            }

此代码只是使对象移动到屏幕的右上角,然后它就不会移动。所以我错过了一些东西

我的最终目标是拥有一个追逐用户触摸坐标的对象。我知道如何使对象遵循这样的坐标,但我不希望它遵循确切的路径,而是最短路径到最新的坐标。所以更像是一个拦截课程

谢谢

1 个答案:

答案 0 :(得分:4)

dx和dy从x和y的距离开始到你的目标位置(我猜你想的那么多,但请跟我一起)

当您将dx或dy除以距离时,您现在将这些值约束在0和1之间,并且这些值告诉您它与该轴的关系,而不考虑距离(例如:如果目标正好是右边,无论多远或近,dx / dist为1,dy / dist为0)。

现在当你将Missile_speed乘以那些轴时,导弹会以最大速度追逐那个方向。

0到1之间的值是目标位置和导弹之间角度的余弦,顺便说一下(重要的是你想象一下这样你以后可以自己思考这些术语中的类似问题)。 / p>

我不确定这是你想要的 - 似乎你想要解释情况的三角函数而不是工作代码,这就是我试图做的事情(不确定我是否成功)。真的明白这一点,未来你应该对类似的问题没有问题(这些情况在游戏开发中无处不在,顺便说一下)