Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Полет программно (http://www.flasher.ru/forum/showthread.php?t=130962)

Taha4000 09.10.2009 16:19

Полет программно
 
Добрый день, уважаемые флешеры!!! Поискала в поиске, но подобного не нашла и прошу у Вас помощи!!! Сама я дизайнер, в программировании понимаю кое чего, но написать такой скрипт не под силу :wacko:

Вот задумала я такую анимашку: по экрану с растениями летает божья коровка, точнее иногда летает, а иногда ползает по растениям. Конечно, когда она летает, у нее крылышки открыты, а когда ползает закрыты. Вот летает она летает, ни о чем не думает, т.е. произвольно.
Также у нас есть кнопка (например для перехода на какой либо раздел), и когда курсор мыши находиться над этой кнопкой, то божья коровка подлетает к кнопке и кружит вокруг нее и только когда нажмем на кнопку божья коровка садиться на нее. Как только перейдем в нужный раздел, то божья коровка улетает и опять произвольно кружит до следующего наведения и/или нажатия кнопки. Кнопок будет не мало, а каждом разделе по разному, но коровка будет везде конечно

Вот не знаю как это сделать, может все программно прописать :wacko:... но не представляю как это сделать... Если делать анимашку произвольного полета, то когда курсор будет над кнопкой, как остановить эту анимацию и тут все равно нужно делать полет до кнопки программно и опять :wacko:

Сделала маленький исходник для примера: ссылка

Помогите плз кто чем может :rolleyes:

frops 09.10.2009 17:19

Можно написать программно, например пусть божья коровка подлетает к координатам кнопки. Грубо говоря, пусть b1_btn - имя кнопки.

Необходимо вычислить расстояние до кнопки и направление движения. Как вычислить направление и расстояние могу написать, но позже.

Допустим вычислили расстояние(rast) и направление(tx,ty) и напрявлем туду БК

Код AS1/AS2:

var mx:Number = b1_btn._x;
var my:Number = b1_btn._y;
 
_root.onEnterFrame = function()
{
  if(rast>=2)
 {
    bojya_korovka._mx+=tx;
    bojya_korovka._y+=ty;
 }
}

ICQ: 376657599

Taha4000 12.10.2009 10:29

Цитата:

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

- напиши пожалуйста ;)

да и можно ли этот программный полет сделать по небольшой дуге, т.е. чтоб она летела не прямо, а немного изогнуто???? :rolleyes:

dirrect 14.10.2009 16:01

полет по прямой будет так:

Код AS1/AS2:

//координаты кнопки
var mx:Number = b1_btn._x;
var my:Number = b1_btn._y;
 
var spd:Number = 1;//скорость движения
 
//процедура
_root.onEnterFrame = function() {
delta_x = bojya_korovka._x-mx;
delta_y = bojya_korovka._y-my;
targetRotation = -Math.atan2(delta_x, delta_y)/(Math.PI/180);
rast = Math.sqrt((delta_x*delta_x)+(delta_y*delta_y));
  if(rast>=2) {
    bojya_korovka._x+=spd*Math.sin((targetRotation)*(Math.PI/180));
    bojya_korovka._y+=spd*Math.cos((targetRotation)*(Math.PI/180));
 }
}

а если вписать в процедуру bojya_korovka.rotation = targetRotation; то коровка будет поворачиваться в сторону курсора. Для полета по наклонной нуобходимо в начале движения задать отличный от рассчитанного угол в переменной targetRotation, а затем по ходу вдижения динамически приближать значение к первоначально рассчитанному. Если непонятно, то спрашивай еще...

iNils 14.10.2009 16:23

dirrect, для оформления своего кода надо использовать теги [code][/code]

Taha4000 14.10.2009 16:26

Если честно не понятно :rolleyes:

А можно это в код дописать??????

dirrect 14.10.2009 16:57

Вот готовый код:
Код AS1/AS2:

// координаты кнопки
var mX:Number = b1_btn._x;
var mY:Number = b1_btn._y;
var sA:Number = -45;//угол отклонения
// скорость движения
var spd:Number = 5;
// процедура
_root.onEnterFrame = function() {
        delta_x = bojya_korovka._x-mX;
        delta_y = bojya_korovka._y-mY;
        targetRotation = -Math.atan2(delta_x, delta_y)/(Math.PI/180)+sA;
        rast = Math.sqrt((delta_x*delta_x)+(delta_y*delta_y));
        bojya_korovka._rotation = targetRotation;
        if (rast>=spd) {
                bojya_korovka._x += spd*Math.sin((targetRotation)*(Math.PI/180));
                bojya_korovka._y -= spd*Math.cos((targetRotation)*(Math.PI/180));
        }
};

различные вариации переменных sA и spd дадут нужный результат, проеверено, работает... :)

Taha4000 14.10.2009 20:16

Спасибо огромное!!!!! Завтра буду пробывать :)

Добавлено через 15 часов 12 минут
Все работает!!!! Летит по дуге :) спасибо спасибо!!!!!!!

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

я думаю нужно при наведении на кнопку мувик анимации нужно остановить программно, запомнить в каком кадре остановили, просчитать его координаты и поворот самой божьей коровки, и наверно сделать его прозрачной через альфаканал, а после этого загрузить с библиотеки божью коровку с открытыми крыльями, поместить ее на место нужных координат и при нужном угле и произвести полет программно. Потом при отвединии или нажатии на кнопку, вернуть божью коровку на те же координаты под нужным углом, сделать ее опять со 100% альфаканалом и продолжить проигрывание анимации...

возможно есть и другие способы.... не знаю :o

помогите плз с кодом :rolleyes:

dirrect 17.10.2009 06:31

Вложений: 1
Вот держи финальную версию:
Код AS1/AS2:

var goHome:Boolean = true;
_root.Rastenie.cel._visible = false;
// координаты кнопки
var homeX:Number = Rastenie._x;
var homeY:Number = Rastenie._y;
var mX:Number = homeX;
var mY:Number = homeY;
var sA:Number = -20;//угол отклонения
// скорость движения
var spd:Number = 4;
// скорость поворота
var spdR:Number = 2;
// процедура
getCelXY = function(){
        var myPoint = {x:0, y:0};
        _root.Rastenie.cel.localToGlobal(myPoint);
        mX=myPoint.x;
        mY=myPoint.y;
        //trace("myPoint_x - "+myPoint.x);
}
_root.onEnterFrame = function() {
        if (goHome){
                getCelXY();
        }
        delta_x = Math.floor(ladybird._x-mX);
        delta_y = Math.floor(ladybird._y-mY);
        targetRotation = -Math.atan2(delta_x, delta_y)/(Math.PI/180)+sA;
        rast = Math.sqrt((delta_x*delta_x)+(delta_y*delta_y));
        if (rast>=spd+20) {
                ladybird.gotoAndStop(2);
        } else {
                ladybird._rotation=targetRotation;
                ladybird.gotoAndStop(1);
 
        }
        if (rast>=spd+10) {//20 - это радиус круга попадая в который коровка перестает лететь
                if (Math.abs(Math.abs(Math.floor(ladybird._rotation))-Math.abs(targetRotation))<5) {
                        ladybird._rotation=targetRotation;
                } else {
                        ladybird._rotation += spdR;
                }
                ladybird._x += spd*Math.sin((ladybird._rotation)*(Math.PI/180));
                ladybird._y -= spd*Math.cos((ladybird._rotation)*(Math.PI/180));
        }
};
mouseOnButton = function(){
        goHome = false;
        mX = Math.floor(_xmouse);
        mY = Math.floor(_ymouse);
}
mouseOutButton = function(){
        goHome = true;
}
//кнопки
btn_1.onPress = function() {
};
btn_1.onRollOver = function(){
        mouseOnButton();
}
btn_1.onRollOut = function(){
        mouseOutButton();
}
//
btn_2.onPress = function() {
};
btn_2.onRollOver = function(){
        mouseOnButton();
}
btn_2.onRollOut = function(){
        mouseOutButton();
}
//
btn_3.onPress = function() {
};
btn_3.onRollOver = function(){
        mouseOnButton();
}
btn_3.onRollOut = function(){
        mouseOutButton();
}

в исходнике все понятно.

Taha4000 21.10.2009 10:12

dirrect СПАСИБО ОГРОМНОЕ!!!!!! :):):)


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

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