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

TurboDizel 12.01.2013 19:45

Запустить главный класс со второго кадра
 
Есть в общем почти готовая игра, которая начинается с класса main. Решил сделать прелоадер, который надо было сделать ещё перед игрой, и чего-то даже не знаю, каким образом после того как прелоадер на первом кадре отработал, запустить на втором кадре класс main? Возможно это вообще делается по другому, и было бы не плохо узнать как именно).

NikolyA 12.01.2013 20:04

не лучший мануал: http://www.8bitrocket.com/2008/04/22...-in-flash-cs3/

caseyryan 12.01.2013 20:06

Что мешает сделать отдельный прелодер?

TurboDizel 12.01.2013 20:26

Цитата:

Сообщение от caseyryan (Сообщение 1115351)
Что мешает сделать отдельный прелодер?

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

Цитата:

Сообщение от NikolyA (Сообщение 1115349)

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

СлаваRa 12.01.2013 20:54

Main
Код AS3:

package {
        import flash.display.Sprite;
 
        [SWF(width = "800", height = "600", frameRate = "30")]
 
        /**
        * @author SlavaRa
        */

        [Frame(factoryClass="Preloader")]
        public final class Main extends Sprite {
 
                public function Main():void {
                        super();
                }
        }
}

Preloader
Код AS3:

package {
        import flash.display.DisplayObject;
        import flash.display.MovieClip;
        import flash.display.StageAlign;
        import flash.display.StageScaleMode;
        import flash.events.Event;
        import flash.events.IOErrorEvent;
        import flash.events.ProgressEvent;
        import flash.utils.getDefinitionByName;
 
        /**
        * @author SlavaRa
        */

        public class Preloader extends MovieClip {
 
                public function Preloader() {
                        super();
                        this.configureStage();
                        this.addListeners();
                        //TODO: this.showAsset();
                }
 
                private function configureStage():void {
                        super.stage.scaleMode = StageScaleMode.NO_SCALE;
                        super.stage.align = StageAlign.TOP_LEFT;
                }
 
                private function addListeners():void {
                        super.addEventListener(Event.ENTER_FRAME, this.onSuperEnterFrame);
                        super.loaderInfo.addEventListener(IOErrorEvent.IO_ERROR, this.onIoError);
                        super.loaderInfo.addEventListener(ProgressEvent.PROGRESS, this.onProgress);
                }
 
                private function onSuperEnterFrame(event:Event):void {
                        if (super.currentFrame == super.totalFrames) {
                                super.currentFrame;
                                super.stop();
                                this.removeListeners();
                                //TODO: this.hideAsset();
                                this.startup();
                        }
                }
 
                private function onIoError(event:IOErrorEvent):void {
                        trace("error:", event.text);
                }
 
                private function onProgress(event:ProgressEvent):void {
                        //TODO: this.updateAsset();
                }
 
                private function removeListeners():void {
                        super.removeEventListener(Event.ENTER_FRAME, this.onSuperEnterFrame);
                        super.loaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, this.onIoError);
                        super.loaderInfo.removeEventListener(ProgressEvent.PROGRESS, this.onProgress);
                }
 
                private function startup():void {
                        const c:Class = getDefinitionByName("Main") as Class;
                        super.addChild(DisplayObject(new c()));
                }
        }
}


TurboDizel 12.01.2013 21:49

СлаваRa, попробовал, покопался в инете, вроде и код почти такой же как у Вас везде, всё должно работать, но почему-то класс main сам себе так дальше и загружается, будто я ничего и не менял.
main:
Код AS3:

[Frame(factoryClass="preloader")]
//переменные
public class main extends MovieClip {
  public function main() {
      //функции и т.д.
  }
}
//и тут функции

preloader:
Код AS3:

package  
{
        import flash.display.DisplayObject;
        import flash.display.MovieClip;
        import flash.utils.getDefinitionByName;
        /**
        * ...
        * @author Turbo-Dizel
        */

        public class preloader extends MovieClip
        {
 
                private var BTN:MovieClip = new btn();
 
                public function preloader()
                {
                        addChild(BTN);
                        BTN.x = 300;
                        BTN.y = 300;
                        BTN.addEventListener(MouseEvent.CLICK, clickb);
                }
 
                function clickb():void {
                        var mainClass:Class = Class(getDefinitionByName("main"));
                        var mainClassObj:Object = new mainClass();
                        addChild(mainClassObj as DisplayObject);
                }
 
        }
 
}


СлаваRa 12.01.2013 22:17

Если бы все было также, то и работало бы как надо, какой-то странный у вас подход к оформлению кода(.

TurboDizel 12.01.2013 22:40

Цитата:

Сообщение от СлаваRa (Сообщение 1115377)
Если бы все было также, то и работало бы как надо, какой-то странный у вас подход к оформлению кода(.

Ну тот код, который я выложил, должен был загрузить класс preloader. Этот класс добавляет на сцену мувик, и проверяет его на клик мыши. Если кликнули, то "возвращаемся" в main. Просто сам прелоадер ещё не делал, а для проверки "кнопку" поставил.
Он же по идее ждать моего клика должен.
А что не так с оформлением кода?)

caseyryan 12.01.2013 23:01

Цитата:

Сообщение от TurboDizel (Сообщение 1115356)
В смысле отдельный? Я наверное что-то элементарное сейчас пропускаю, но реально что-то не могу понять.

Отдельным swf файлом вообще. Это нормальная практика, когда делают небольшой swf чисто для загрузки другого. И не нужно будет никаких фактори классов или второго кадра.

Wolsh 13.01.2013 00:00

Код AS3:

BTN.addEventListener(MouseEvent.CLICK, clickb);
//.....
function clickb():void {

Этот код что, компилится? Где аргументы функции?

А Вы точно сделали preloader документ-классом?


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

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