Форум 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=185579)

Yulia_V 16.10.2012 01:26

Объект перестаёт двигаться при перемещении мыши.
 
Вложений: 1
Здравствуйте, ситуация такая: у меня лента, выходящая за пределы экрана справа и слева, условно её можно разделить на 3 части, каждая часть оказавшись в экране подстраивается под него целиком (с помощью ТвинЛайта). А так же есть кнопка, которая по нажатии поднимает ленту наверх, а при повторном нажатии опускает вниз(!). До добавления твинлайтов в условие эта функция работала нормально. Теперь если после нажатия на кнопку мышь стоит неподвижно всё ок, но если в процессе поднятия сдвинуть мышь, то лента замирает, а кнопка ускакивает наверх/вниз.
Ниже участки кода и картинка.
Код AS3:

stage.addEventListener (MouseEvent.MOUSE_MOVE,onMoseMove);
function onMoseMove (e:MouseEvent):void
{
 
var position:Number = qw_mc.x
 
if(position <= 0){
    setURLLoader("text1.xml")
        var myTween3:TweenLite = new TweenLite(qw_mc, 2, {x:-275});
}else if(position <= 550 && position >0){ 
    setURLLoader("text2.xml")
        var myTween4:TweenLite = new TweenLite(qw_mc, 2, {x:275});
}else if(position <= 1100 && position >550){   
    setURLLoader("text3.xml")
        var myTween5:TweenLite = new TweenLite(qw_mc, 2, {x:825});
 }
 
}

Код AS3:

play2_btn.visible = false;
 
play_btn.addEventListener(MouseEvent.CLICK, fl_MouseClickHandler);
 
function fl_MouseClickHandler(event:MouseEvent):void
 
{
        var myTween:TweenLite = new TweenLite(qw_mc, 1, {y:-100, ease:Quart.easeIn});
        var myTween:TweenLite = new TweenLite(play_btn, 1, {y:0, ease:Quart.easeIn});
        var myTween:TweenLite = new TweenLite(play2_btn, 1, {y:0, ease:Quart.easeIn});
        play2_btn.visible = true;
removeEventListener(MouseEvent.CLICK, fl_MouseClickHandler);
}
 
play2_btn.addEventListener(MouseEvent.CLICK, fl_MouseClickHandler2);
function fl_MouseClickHandler2(event:MouseEvent):void
{
        var myTween:TweenLite = new TweenLite(qw_mc, 1, {y:100, ease:Quart.easeIn});
        var myTween:TweenLite = new TweenLite(play_btn, 1, {y:200, ease:Quart.easeIn});
        var myTween:TweenLite = new TweenLite(play2_btn, 1, {y:200, ease:Quart.easeIn});
        play2_btn.visible = false;
removeEventListener(MouseEvent.CLICK, fl_MouseClickHandler2);
}


Isfet 16.10.2012 05:40

Код AS3:

stage.addEventListener (MouseEvent.MOUSE_MOVE,onMoseMove);
function onMoseMove (e:MouseEvent):void
{
 
var position:Number = qw_mc.x
 
if(position <= 0){
    setURLLoader("text1.xml")
        var myTween3:TweenLite = new TweenLite(qw_mc, 2, {x:-275});
}else if(position <= 550 && position >0){ 
    setURLLoader("text2.xml")
        var myTween4:TweenLite = new TweenLite(qw_mc, 2, {x:275});
}else if(position <= 1100 && position >550){   
    setURLLoader("text3.xml")
        var myTween5:TweenLite = new TweenLite(qw_mc, 2, {x:825});
 }
 
}

эта функция вызывается когда вы сдвигаете мышь, следовательно она и останавливает вашу полосу.
как я понимаю позиция полосы у вас <=0, значит вызывается этот твин
Код AS3:

if(position <= 0){
    setURLLoader("text1.xml")
        var myTween3:TweenLite = new TweenLite(qw_mc, 2, {x:-275});
}

следовательно проблема в нем

Yulia_V 16.10.2012 11:41

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

Isfet 16.10.2012 13:13

у вас так много твинов, я бы ввел переменную Boolean, которая стоит в false, становится true, когда один из твинов запускается, а когда он заканчивает действие переменная опять ставится в false. И все твины смотрят, если переменная false, значит можно запускаться.
Я так понял твины которые таскаю ленту вправо влево не должны работать когда лента убирается за экран, так введите переменную опять же Boolean которая будет true когда лента на stage, false когда лента начинает "ехать" вверх. А твины которые перетаскиваю ленту по Х, не могут таскать ее когда переменная в false.
что- то типо такого
Код AS3:

function onMoseMove (e:MouseEvent):void
{
  if(qw_mc_enabled){
        var position:Number = qw_mc.x
 
    if(position <= 0){
          setURLLoader("text1.xml")
        var myTween3:TweenLite = new TweenLite(qw_mc, 2, {x:-275});
    }else if(position <= 550 && position >0){ 
        setURLLoader("text2.xml")
        var myTween4:TweenLite = new TweenLite(qw_mc, 2, {x:275});
    }else if(position <= 1100 && position >550){   
        setURLLoader("text3.xml")
        var myTween5:TweenLite = new TweenLite(qw_mc, 2, {x:825});
    }
  }
}


Yulia_V 16.10.2012 14:05

Но если у меня твины внитри функций как они передадут друг другу значения переменной Boolean (допустим если я выставляю его при onComplete)?
Что вы имеете в виду под qw_mc_enabled?
Извините, я ещё много не понимаю, недавно начала изучать язык.

Isfet 16.10.2012 14:21

Цитата:

Сообщение от Yulia_V (Сообщение 1100098)
Но если у меня твины внитри функций как они передадут друг другу значения переменной Boolean (допустим если я выставляю его при onComplete)?

переменная должна задаваться вне функции:
Код AS3:

var var1:Boolean = false;
changeVarValueToTrue();
trace(var1); //true
changeVarValueToFalse();
trace(var1);//false
function changeVarValueToTrue ():void{
    var1 = true;
}
function changeVarValueToFalse ():void{
    var1 = false;
}

qw_mc_enabled должно хранить значение, можно ли использовать твины или нет. Лента неактивна - твины которые запускаются от движения мыши не работают

Yulia_V 16.10.2012 15:05

Теоретически понятно, но не получается пока. Буду думать дальше как это употребить.

Добавлено через 2 часа 32 минуты
Не получается, может что-то не туда пишу?
Trace одновременно выводит true и false.
Код AS3:

stage.addEventListener (MouseEvent.MOUSE_MOVE,onMoseMove);
function onMoseMove (e:MouseEvent):void
{
 
var position:Number = qw_mc.x
 if(var1 == false){
if(position <= 0){
    setURLLoader("text1.xml")
        var myTween3:TweenLite = new TweenLite(qw_mc, 2, {x:-275});
}else if(position <= 550 && position >0){ 
    setURLLoader("text2.xml")
        var myTween4:TweenLite = new TweenLite(qw_mc, 2, {x:275});
}else if(position <= 1100 && position >550){   
    setURLLoader("text3.xml")
        var myTween5:TweenLite = new TweenLite(qw_mc, 2, {x:825});
 }
 
}
}

Код AS3:

var var1:Boolean = false;
trace (var1);
 
function changeVarValueToTrue ():void{
    var1 = true;
        trace(var1);
}
function changeVarValueToFalse ():void{
    var1 = false;
        trace(var1);
}
 
 
play2_btn.visible = false;
 
play_btn.addEventListener(MouseEvent.CLICK, fl_MouseClickHandler);
function fl_MouseClickHandler(event:MouseEvent):void
 
{
 
        var myTween:TweenLite = new TweenLite(qw_mc, 1, {y:-100, ease:Quart.easeIn, onStart:changeVarValueToTrue(),
                                                                                  onComplete:changeVarValueToFalse()});
        var myTween:TweenLite = new TweenLite(play_btn, 1, {y:0, ease:Quart.easeIn});
        var myTween:TweenLite = new TweenLite(play2_btn, 1, {y:0, ease:Quart.easeIn});
        play2_btn.visible = true;
removeEventListener(MouseEvent.CLICK, fl_MouseClickHandler);
}
 
play2_btn.addEventListener(MouseEvent.CLICK, fl_MouseClickHandler2);
function fl_MouseClickHandler2(event:MouseEvent):void
{
 
        var myTween:TweenLite = new TweenLite(qw_mc, 1, {y:100, ease:Quart.easeIn, onStart:changeVarValueToTrue(),
                                                                                  onComplete:changeVarValueToFalse()});
        var myTween:TweenLite = new TweenLite(play_btn, 1, {y:200, ease:Quart.easeIn});
        var myTween:TweenLite = new TweenLite(play2_btn, 1, {y:200, ease:Quart.easeIn});
        play2_btn.visible = false;
removeEventListener(MouseEvent.CLICK, fl_MouseClickHandler2);
}

Добавлено через 6 часов 2 минуты
На меня неожиданно снизошло просветление и всё заработало. Если кому-то интересно, то сейчас выглядит так:

Код AS3:

stage.addEventListener (MouseEvent.MOUSE_MOVE,onMoseMove);
function onMoseMove (e:MouseEvent):void
{
 
var position:Number = qw_mc.x
 if(var1 == false){
if(position <= 0){
    setURLLoader("text1.xml")
        var myTween3:TweenLite = new TweenLite(qw_mc, 2, {x:-275});
}else if(position <= 550 && position >0){ 
    setURLLoader("text2.xml")
        var myTween4:TweenLite = new TweenLite(qw_mc, 2, {x:275});
}else if(position <= 1100 && position >550){   
    setURLLoader("text3.xml")
        var myTween5:TweenLite = new TweenLite(qw_mc, 2, {x:825});
 }
 
}
removeEventListener(MouseEvent.CLICK, onMoseMove);
}

Код AS3:

var var1:Boolean = false;
trace (var1);
 
function changeVarValueToTrue ():void{
    var1 = true;
        trace(var1);
}
function changeVarValueToFalse ():void{
    var1 = false;
        trace(var1);
}
 
 
play2_btn.visible = false;
 
play_btn.addEventListener(MouseEvent.CLICK, fl_MouseClickHandler);
function fl_MouseClickHandler(event:MouseEvent):void
 
{
 
        var myTween:TweenLite = new TweenLite(qw_mc, 1, {y:-100, ease:Quart.easeIn, onUpdate:changeVarValueToTrue()});
        var myTween:TweenLite = new TweenLite(play_btn, 1, {y:0, ease:Quart.easeIn});
        var myTween:TweenLite = new TweenLite(play2_btn, 1, {y:0, ease:Quart.easeIn});
        play2_btn.visible = true;
        event.updateAfterEvent        ();
 
}
 
play2_btn.addEventListener(MouseEvent.CLICK, fl_MouseClickHandler2);
function fl_MouseClickHandler2(event:MouseEvent):void
{
 
        var myTween:TweenLite = new TweenLite(qw_mc, 1, {y:100, ease:Quart.easeIn, onComplete:changeVarValueToFalse});
        var myTween:TweenLite = new TweenLite(play_btn, 1, {y:200, ease:Quart.easeIn});
        var myTween:TweenLite = new TweenLite(play2_btn, 1, {y:200, ease:Quart.easeIn});
        play2_btn.visible = false;
        event.updateAfterEvent        ();
 
}



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

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