Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   остановка объекта в точке курсора (http://www.flasher.ru/forum/showthread.php?t=155116)

Gonsalez 28.04.2011 13:53

остановка объекта в точке курсора
 
есть шарик с instance name - mc
при клике мышки он летит в сторону курсора и должен остановиться в точке, где был произведен клик.. при клике он летит и постепенно останавливается, но останавливается не совсем в нужной точке, а пролетает немного дальше или не долетает..
Код AS3:

var X:Number = mouseX;
var Y:Number = mouseY;
 
//Скорость шарика
var mc_speedXTO:Number;
var mc_speedYTO:Number;
 
//Скорость движения шара
var speed:Number = 10;
 
//Добавляем ENTER_FRAME , что анимирует движение шара
stage.addEventListener(MouseEvent.MOUSE_DOWN, mouse);
stage.addEventListener(Event.ENTER_FRAME, moveBall);
 
function mouse(e:Event):void
{
        //Вычисляем расстояния по x и y от шара до точки
        var distance_posX:Number = mouseX - mc.x;
        var distance_posY:Number = mouseY - mc.y;
        //Вычисляем расстояние от точки до шара
        var dist_pos = Math.sqrt(distance_posX * distance_posX + distance_posY * distance_posY);
        //Вычисляем угол между шаром и мышью
        var angle:Number = Math.atan2(distance_posY,distance_posX);
 
        var distance_mouseX:Number = mouseX - mc.x;
        var distance_mouseY:Number = mouseY - mc.y;
        //Вычисляем расстояние от шара до мышки
        var dist_mouse = Math.sqrt(distance_mouseX * distance_mouseX + distance_mouseY * distance_mouseY);
 
 
        mc_speedXTO = Math.cos(angle) * speed * 4;
        mc_speedYTO = Math.sin(angle) * speed * 4;
        mc.x +=  mc_speedXTO;
        mc.y +=  mc_speedYTO;
 
 
        if (dist_mouse > 0)
        {
                var mc_angle = Math.atan2(distance_mouseY,distance_mouseX);
 
                mc_speedXTO = Math.cos(mc_angle) * speed * 4;
                mc_speedYTO = Math.sin(mc_angle) * speed * 4;
 
 
        }
 
 
}
 
function moveBall(e:Event):void
{
        mc.x +=  mc_speedXTO;
        mc.y +=  mc_speedYTO;
        //Уменьшаем скорость
        mc_speedXTO *0.9;
        mc_speedYTO *0.9;
 
}

помогите разобраться в чем ошибка

maxkar 28.04.2011 14:42

Скорость шарика и замедление фиксированы. Шарик суммарно пролетает примерно 440 точек по прямой. Нужно характеристики движения (скорость, замедление и т.п.) вычислять исходя из координат. Кстати, зачем вы угол то считаете?
Код AS3:

function mouse(e : Event) : void {
  const deltax : Number = mouseX - mc.x;
  const deltay : Number = mouseY - mc.y;
  mc_speedXTO = deltax / 11;
  mc_speedYTO = deltay / 11;
  mc.x += mc_speedXTO;
  mc.y += mc_speedYTO;
}

Сумму (суммароное перемещение) вроде бы правильно посчитал. Код не компилировал, возможны опечатки.

ChuwY 28.04.2011 15:20

Юзайте твинеры и будет вам счастье.

goodguy 28.04.2011 16:35

Можно использовать, что-то типа этого:
Код AS3:

if (Math.abs(destination.x - object.x) < 5 && Math.abs(destination.y - object.y) < 5) { 
    // остановить объект, если он находится ближе 5 пикселей до места наначения
}

Но я бы по теореме Пифагора расчитал расстояние, которое объект должен пройти, далее покадрово расчитывал пройденный путь (по той же вхеме), и если он превысил нужное расстояние, останавливал бы, или при приближении замедлял


Часовой пояс GMT +4, время: 09:04.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.