2010-01-20 3 views
6

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

if(currentFrame == 120) 
stop(); 

120 - последний кадр. Он играет один раз. но проблема в том, что он снова возвращается к кадру 1. есть лучший способ остановки мувиклипа на конкретном кадре.

+1

Вы нашли правильный ответ? Если это так, отметьте его как правильно –

ответ

1

Это было потому, что объект вызывался дважды.

3

На временной шкале вы можете просто положить ключевой кадр в конце и добавить там stop();. Когда он достигнет этого кадра, будет выполнен метод stop();, и клип остановится.

Предполагая, что вы используете временную шкалу, которая звучит так, как будто вы есть.

+0

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

+0

Я дал эту попытку, и это не сработало. он все еще запускается из кадра 1 снова. Я прорисовал текущий кадр. показывает, что он возвращается к 1 – numerical25

+0

Ну, это означает, что происходит что-то еще. Вы работаете с вложенными MovieClips для создания анимации? Правильно ли они остановлены? Возможно, если вы сможете больше рассказать о том, как у вас есть настройки, мы можем помочь вам отследить его. –

0

Это больше вдоль линий того, что вы ищете:

addEventListener(Event.ENTER_FRAME, function(e:Event){ 
    if(currentFrame == totalFrames){ 
     stop(); 
     removeEventListener(event.type, arguments.callee); 
    } 
}); 

я добавил слушатель события (Actionscript 3), так что на каждом кадре эта функция будет срабатывать и проверить, что фрейме на , Если это последний кадр, он остановится. Основываясь на вашем примере, я предполагаю, что у вас есть класс, расширяющий MovieClip.

+1

Это будет работать, но это довольно плохое решение с точки зрения производительности. Этот enterframe будет продолжать стрелять после этого, без возможности его очистки. Лучшим динамическим решением, аналогичным этому, было бы использование метода addFrameScript. Конечно, если у вас есть ссылка на функцию, вы можете ее очистить, и все будет хорошо. –

+0

Я согласен с Тайлером. Анонимные функции также плохие, так как они сидят в памяти намного дольше, прежде чем они будут сохранены. – alecmce

+0

Итак, я думаю, что функция stop() в timeLine - это путь. Я на самом деле использую один цикл для всех моих мувиклипов, поэтому я бы предпочел, чтобы это не было в прослушивателе событий. спасибо за ответы ребята – numerical25

0

от возиться с ним, я знаю, что проблема не имеет ничего общего со вспышкой, не отвечающей на мою функцию stop(). Я считаю, что это может иметь какое-то отношение к flash-вызову мувиклипа дважды. Один поверх другого. Похоже, что это началось снова. Я не уверен. Если я назову мувиклип где-нибудь еще, он будет работать. просто не в моей петле. Я сделал трассировку, и трассировка появилась только однажды, что показывает, что она инициировала ее один раз.

12

Если вы хотите сделать это с помощью ActionScript, а не добавлять stop() к последнему кадру на временной шкале вручную, вы можете использовать недокументированный метод addFrameScript().

mc.addFrameScript(mc.totalFrames - 1, function():void 
{ 
    mc.stop(); 
}); 

не помню сферу функции, но вы можете использовать либо mc.stop(), или просто остановить().

* EDIT - Добавлено -1 к первому параметру addFrameScript, так как она равна нулю основе (так, чтобы положить FrameScript на раме вы положили бы).

+0

Ты спасатель! Я даже не думал о добавлении остановок к временной шкале и просто называть 'play()' когда мне нужно. –

0

Я понял. Честно говоря, я считаю, что моя заявка испорчена. Он работал чудесным образом, и я ничего не делал. В моем цикле я сделал if (currentframe == totalframes) и то, что не произошло раньше, теперь происходит отлично. Я не знаю, почему. Но, как я уже сказал, это может быть проблема с программным обеспечением, потому что у меня иногда возникают проблемы с передачей значений через конструкторов. И нужно создавать специальные методы для принятия этих значений.

3

Самый простой способ:

  1. Просто выберите последний кадр на временной шкале. Откройте панель «Действия» (F8). Убедитесь, что выбранный вами кадр u выбран, если он не выбран, а затем выберите снова, когда панель Действия открыта.
  2. После выбора просто добавьте простую функцию stop() в панель «Action-Frame».

    //add the following line to the actions pane of the last frame. 
    stop(); 
    
  3. Все готово. При необходимости вы можете добавить кнопку повтора.

+0

, если он не согласуется с вашим пользовательским классом – Sagar

+1

Я не знаю, какой инструмент вы используете, но похоже, что вы использовали Adobe Flash. если вы используете Adobe Flash CS6, не работает панель «Действия» (F8). Открыть панель «Действия» (F9). – kongkea

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