Кто-нибудь может объяснить математику красного корабля в этой простой игре?[Самонаводящийся ракетный эск] - PullRequest
1 голос
/ 27 февраля 2012

игра - это небольшой флэш-компонент, найденный здесь: 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 Ответ

4 голосов
/ 27 февраля 2012

dx и dy начинаются с расстояний в x и y до вашей целевой позиции (я полагаю, вы уже разобрались, но терпите меня)

Когда вы делите dx или dy на расстояние, вы теперьограничьте эти значения от 0 до 1, и эти значения скажут вам, где это отношение к этой оси, без учета расстояния (например: если цель точно вправо, независимо от того, насколько далеко или близко, dx / dist равно 1и dy / dist равно 0).

Теперь, когда вы умножите Missile_speed на эти оси, ракета будет преследовать это направление на максимальной скорости.

Эти значения между 0 и 1 являются косинусомугол между позицией цели и ракетой, кстати (важно, чтобы вы визуализировали это, чтобы вы могли самостоятельно продумать подобные проблемы в этих терминах в будущем).

Я не уверен, что это то, чтоВы хотели - кажется, вы хотели объяснить тригонометрию ситуации, а не рабочий код, поэтому я попытался это сделать (не уверен, что мне это удалось).Действительно понимайте это, и у вас не должно быть проблем с подобными проблемами в будущем (и эти ситуации действительно вездесущи в разработке игр, кстати)

...