2014-02-06 2 views
0

Я не знаю, лучше ли что я хочу, чтобы описать этот заголовок, но его кратчайший способ объяснить, чего я хочу достичь.как инициировать событие, когда событие закончилось

Так что я пытаюсь выяснить, как сделать _circle для перемещения из одного угла в следующий угол объекта (в котором он находится), но это движение (от _circle) должно начинаться только тогда, когда объект _box (тот, в котором находится ось), остановился, т. е. находится в центре сцены. А также в тот же самый момент, когда _box идет, нажмите кнопку _circle, чтобы остановить перемещение и остаться в позиции, в которой она находится, пока я не нажму кнопку _button.

У меня есть только логика перемещения элемента _box. (и даже эта логика слишком уродливая/не такая элегантная)

private var _myBox:Sprite = new Sprite(); 
    private var _myCircle:Sprite = new Sprite(); 
    private var _myButton:Sprite = new Sprite(); 

    public function Test2() 
    { 
     addChild(_myBox); 
     _myBox.graphics.beginFill(0x0000FF); 
     _myBox.graphics.drawRect(0,0,300,100); 
     _myBox.graphics.endFill(); 
     _myBox.x = stage.stageWidth * 0.5 - _myBox.width * 0.5 ; 
     _myBox.y = 0 - _myBox.height; 

     _myBox.addChild(_myCircle); 
     _myCircle.graphics.beginFill(0x000000); 
     _myCircle.graphics.drawCircle(0,0,20); 
     _myCircle.graphics.endFill(); 
     _myCircle.x = 0 + _myCircle.width * 0.5; 
     _myCircle.y = _myCircle.height * 0.5 + _myCircle.height * 0.5; 

     addChild(_myButton); 
     _myButton.graphics.beginFill(0xAFAFAF); 
     _myButton.graphics.drawRect(0,0,100,100); 
     _myButton.graphics.endFill(); 
     _myButton.x = 400 
     _myButton.y = 300 
     _myButton.addEventListener(MouseEvent.CLICK, onClick); 

     var moveBoxDown:Timer = new Timer(1000, 1); 
     moveBoxDown.addEventListener(TimerEvent.TIMER, goingDown); 
     moveBoxDown.start(); 
    } 

    function goingDown(ev:TimerEvent):void 
    { 
     TweenLite.to(_myBox, 0.5 , {y: stage.stageHeight/2-_myBox.height/2 }); 
    } 

    private function onClick(ev:MouseEvent):void 
    { 
     var moveBoxUp:Timer = new Timer(1000, 1); 
     moveBoxUp.addEventListener(TimerEvent.TIMER, goingUp); 
     moveBoxUp.start(); 
    } 

    function goingUp(ev:TimerEvent):void 
    { 
     TweenLite.to(_myBox, 0.5 , {y: 0 - _myBox.height }); 
    } 

Значит, любая помощь в моей проблеме? или сделать код более привлекательным. Должно быть очень просто.

+0

Я, кажется, помню, что TweenLite имеет OnComplete обработчик. Вы можете использовать это, чтобы начать круг, как только квадрат достигнет его первой позиции, а затем снова для круга. Таким образом, вы также можете избавиться от таймеров. – InkeyString

+0

Я только что посмотрел. delayedCall - это нечто другое. onComplete - это параметр, который передается анимации, так же, как вы передали параметры x и y, т. е. TweenLite.to (mc, 1, {x: 100, onComplete: myFunction}); и если вам нужно передать параметры функции, вы можете: TweenLite.to (mc, 1, {x: 100, onComplete: myFunction, onCompleteParams: ["param1", 2]}); Это выполнит myFunction после завершения анимации :) – InkeyString

+0

Посмотрите здесь в специальных свойствах http://www.greensock.com/as/docs/tween/_tweenmax.html – InkeyString

ответ

1

Попробуйте

function goingDown(ev:TimerEvent):void 
{ 
    TweenLite.to(_myBox, 0.5 , {y: stage.stageHeight/2-_myBox.height/2, onComplete:onTweenComplete }); 
} 

function onTweenComplete(ev:Event = null) 
{ 
    //Do whatever after the tween has ended 
} 
+0

yea ваше право! – GregorII

Смежные вопросы