Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   stop(); на as3 (http://www.flasher.ru/forum/showthread.php?t=149415)

tilweb 24.01.2011 20:10

stop(); на as3
 
Как останавливать слайды?

К .fla у меня присоединяется main.as

но я хочу как раньше, в as2 мог взять написать в строчке stop(); и слайд следующий не проигрывался.

Как тут быть..?

JackFromChaos 24.01.2011 20:17

Ну, как бы stop() есть и в AS3. Вопрос в том, где конкретно вы хотите остановить анимацию? По какому условию?

tilweb 24.01.2011 20:51

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

Но суть в том что сейчас если открыть, то эти два кадра маргают и ни где не останавливается.

FlashCoder 24.01.2011 21:08

1 кадр, на нем мувиклип knopka1
Код AS1/AS2:

stop();
knopka1.addEventListener(MouseEvent.CLICK, ckicl1 );
function ckicl1(Event:MouseEvent)
{
        gotoAndPlay("2");
}

2 кадр, на нем мувиклип knopka2
Код AS1/AS2:

stop();
knopka2.addEventListener(MouseEvent.CLICK, clcik2 );
function clcik2(Event:MouseEvent)
{
        gotoAndPlay("1");
}

Все должно работать


______________________________
Web-программирование

JackFromChaos 24.01.2011 21:16

Вместо gotoAndPlay можно gotoAndStop. Тогда stop() достаточно написать в первом кадре...
Только эта... Я, к сожалению, не специалист писать код в кадрах, но по моему так делать нельзя...
Получить, что каждый раз, когда мы будем переходить на кадр 1
knopka1.addEventListener(MouseEvent.CLICK, ckicl1 ); - будет делать очередную подписку... На втором кадре то же самое... В результате через какое то время будет страшное... Хотя внешне наверное все будет работать..
2tilweb: Не стоит писать код в кадрах... Почитайте того же Мука что ли...

Hidest 24.01.2011 21:22

В конструкторе пишем super.stop();

А в обработчиках кнопок вперед|назад соответственно super.nextFrame(); и super.prevFrame();

И будет все равно сколько там кадров, каждый раз будете преходить на следующий или предыдущий. Причем можно не боятся, что выйдете за диапазон 1..totalFrames.

tilweb 24.01.2011 21:33

1180: Call to a possibly undefined method gotoAndStop.
Warning: 1060: Migration issue: The method stop is no longer supported. For more information, see MovieClip.stop()..



пробую написать MovieClip.stop();, тоже не работает, всёравно не останавливается на кадре

Добавлено через 8 минут
super.stop(); тоже не работает :(

Добавлено через 17 минут
а создал просто файл с двумя кадрами, написал в первом stop();
сохранил и работает

а в моей флешке нет.. не понимаю почему..

может из-за того что прикрепляется main.as? может он игнорирует при этом всё что пишется в action script и делает только то что в main.as ?

cleptoman 24.01.2011 23:08

ваш документ класс должен быть наследником MovieClip

samana 24.01.2011 23:51

Цитата:

Сообщение от tilweb (Сообщение 967538)
может из-за того что прикрепляется main.as? может он игнорирует при этом всё что пишется в action script и делает только то что в main.as ?

Очень не хорошо писать код в кадре, когда ещё и есть Document Class.

Добавлено через 1 минуту
Цитата:

Сообщение от FlashCoder (Сообщение 967531)
1 кадр, на нем мувиклип knopka1
Код AS1/AS2:

stop();
knopka1.addEventListener(MouseEvent.CLICK, ckicl1 );
function ckicl1(Event:MouseEvent)
{
        gotoAndPlay("2");
}


Только число нужно без кавычек )

Добавлено через 8 минут
Цитата:

Сообщение от JackFromChaos (Сообщение 967535)
Получить, что каждый раз, когда мы будем переходить на кадр 1
knopka1.addEventListener(MouseEvent.CLICK, ckicl1 ); - будет делать очередную подписку... На втором кадре то же самое... В результате через какое то время будет страшное...

Новой лишней подписки не произойдёт.

tilweb 25.01.2011 00:10

а как записать в файл main.as вот эти коды, так чтобы он понимал для какого кадра код?

пробовал просто запихать в начале stop(); так он не хочет..

у меня код в нём начинает вот с такого:

Код AS3:

package {
        import flash.events.*;
        import flash.display.*;
        import flash.net.*;
        import flash.text.TextField;
 
        public class Main extends Sprite {
                public function Main():void {
                        btn.addEventListener(MouseEvent.CLICK,btnClick);
                }


samana 25.01.2011 00:28

Тогда лучше создайте классы для кнопок. И тогда просто перетаскивайте нужную кнопку из библиотеки на сцену, имя ей на сцене задавать конечно уже не нужно. У кнопки есть только одна функция - переместить кадр её родителя вперёд. Например класс для перехода на следующих кадр, родителя кнопки.
Код AS3:

package  
{
        import flash.display.MovieClip;
        import flash.events.MouseEvent;
 
        /**
        * ...
        * @author Samana
        */

        public class NextButton extends MovieClip
        {
 
                public function NextButton()
                {
                        addEventListener(MouseEvent.CLICK,parentNextFrame)
                }
 
                private function parentNextFrame(e:MouseEvent):void
                {
                        if(parent){ MovieClip(parent).nextFrame() }
                }
 
        }
}

А в Main, тогда только в конструкторе прописать
Код AS3:

stop()


tilweb 25.01.2011 00:51

а какую кнопку брать из библиотеки, если прописал вот этот код в main.as ?

там же просто либо овальные кнопки, либо квадратные и т.д..


Цитата:

А в Main, тогда только в конструкторе прописать
это т.е. просто перед

Код AS3:

package  
{

пишу
Код AS3:

stop()

?

samana 25.01.2011 01:03

Нет, нет... Например у вас в библиотеке лежит мувиклип, который изображает кнопу перехода на следующий кадр. Класс для этого мувиклипа прописан как NextButton. Потом вы создаёте *as файл с именем этого же класса, и копируете туда код, который я написал выше.
Вы в общем-то можете обойтись и без Документ класса, тогда просто в первом кадре напишите stop(). Теперь если вы перетащите из библиотеки на сцену тот мувиклип-кнопку (для которого был создан класс), то по клику на нем, сцена перейдёт на следующий кадр.

tilweb 25.01.2011 01:15

ааааааа....) как не просто всё это..)

так, я сделал кнопку в библиотеке, зашёл в расширенные настройки и в Class написал: nb
далее создал файл nb.as и запихал туда тот код

кнопку поместил на первый кадр
в первом кадре прописал stop()

но явно чтото не то сделал гдето.. ибо не работает (

samana 25.01.2011 01:33

Вложений: 1
Уговорили ) Вложение 25849

tilweb 25.01.2011 01:39

спасибо огромное)

Добавлено через 10 минут
аааааааа....) рано обрадовался)

хм..) если отсоединяю main.as от .fla, то всё работает
а если присоединён, то нет :(

из-за чего может такое быть?




вот main.as:

Код AS3:

 
package {
        import flash.events.*;
        import flash.display.*;
        import flash.net.*;
        import flash.text.TextField;
 
        public class Main extends Sprite {
                public function Main():void {
                        btn.addEventListener(MouseEvent.CLICK,btnClick);
                }
 
                function btnClick(e:MouseEvent):void {
                        var params:Object=LoaderInfo(root.loaderInfo).parameters;
                        var loader:URLLoader = new URLLoader();
                        var request:URLRequest=new URLRequest("----тут ссылка, стёр----");
                        request.method=URLRequestMethod.POST;
 
                        result_tf.text='ожидание...';
 
                        var vars:URLVariables = new URLVariables();
                        vars['auth_key']=params['auth_key'];
                        vars['viewer_id']=params['viewer_id'];
 
                        request.data=vars;
                        loader.addEventListener(HTTPStatusEvent.HTTP_STATUS,onError);
                        loader.addEventListener(Event.COMPLETE,onComplete);
                        loader.load(request);
                }
 
                function onComplete(event:Event):void {
                        var loader:URLLoader=event.target as URLLoader;
                        if (loader!=null) {
                                result_tf.text=loader.data;
                        } else {
                                result_tf.text='Ошибка.';
                        }                       
                }
 
                private function onError(event:Event):void {
                        result_tf.text = 'Ошибка.';
                }
 
        }
}


cleptoman 25.01.2011 08:10

для внимательных повторюсь:
ваш документ класс должен быть наследником от MovieClip, а не Sprite.
у спрайта нет таймлайна, соотв. и методов работы с ним(с ней? )).

побуквенно:

заменить "extends Sprite" на "extends MovieClip"

tilweb 25.01.2011 14:05

а....) спасибо)

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

Добавлено через 12 часов 11 минут
хм.. :(


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

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