Скрытый доступ к классу Actionscript 3

#flash #actionscript-3

#flash #actionscript-3

Вопрос:

Я создал некоторый код в Actionscript 3, следуя различным руководствам, который представляет собой простой медиаплеер, связанный с XML-файлом для получения исходной информации. Я обнаружил, что мне нужно использовать классы actionscript для кода, и задался вопросом, есть ли у них способ преобразовать его в классы или кто-нибудь знает руководство по actionscript 3 для создания медиаплеера на основе классов? Мой код приведен ниже:

 import flash.net.URLLoader;
import flash.events.Event;
import flash.net.URLRequest;

var loader:URLLoader = new URLLoader();
loader.addEventListener(Event.COMPLETE,xmlloaded);

var xml:XML = new XML();
var amountofvid:Number=0;
var currentvideo:Number=0;

btn_prev.addEventListener (MouseEvent.CLICK, prevvid);
btn_next.addEventListener (MouseEvent.CLICK, nextvid);

loader.load(new URLRequest('videos.xml'));

function xmlloaded (e:Event) {
    xml=XML(e.target.data);
    amountofvid=xml.video.length ()-1;
    changevid();
}

function nextvid (e:Event) {
    currentvideo  ;
    changevid();
}

function prevvid (e:Event) {
    currentvideo--;
    changevid();
}

function changevid():void {
    var cv:Number=Math.abs(currentvideo);

    if (cv>amountofvid) {
        currentvideo=cv=0;
    }
    if (currentvideo<0) {
        currentvideo=cv=amountofvid;
    }

    vid.source = xml.video.@src[cv];
    title.text = xml.video.@title[cv];

}
  

Есть идеи?

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

Ответ №1:

Отойти от временной шкалы и принять некоторую базовую структуру ООП — это лучшее, что вы можете сделать как начинающий разработчик flash, программист или прилежный студент. Это может быть сложная тема, но чем раньше вы начнете разбираться в ней, тем лучше. Поиск в Google все объяснит.

В любом случае — у вас есть большая часть того, что вам нужно для записи этой процедуры в класс. Ознакомьтесь с комментариями для краткого объяснения:

 // package encloses the class and identifies its scope
package you.com.app
{
    //imports
    import flash.display.MovieClip;
    import flash.display.SimpleButton;
    import flash.display.Sprite;
    import flash.net.URLLoader;
    import flash.events.Event;
    import flash.net.URLRequest;
    import flash.text.TextField;

    /**
     * ... declare your class, whatever it may extend and any interfaces
     */

    public class MediaPlayer extends Sprite
    {
        // variables now include an access modifier to define their scope (private, here)
        private var xml             :XML;
        private var amountofvid     :Number=0;
        private var currentvideo    :Number=0;
        private var loader          :URLLoader;
        private var vid             :MovieClip; //or video component or whatever
        private var title           :TextField;
        private var btn_prev        :SimpleButton;
        private var btn_next        :SimpleButton;
        private var currentvideo    :int;

        /**
         * constructor - must match class name. returns statement omitted
         */
        public function MediaPlayer()
        {
            // call superclass
            super();
            //initialize procedure
            init();
        }

        private function init():void
        {
           //build display list
            assembleDisplayObjects();

            //grab data
            retreiveData();

        }

        private function retreiveData():void
        {
            loader = new URLLoader();
            loader.addEventListener(Event.COMPLETE, xmlloaded);
            loader.load(new URLRequest('videos.xml')); 
        }

        private function xmlloaded (e:Event):void  
        {
            xml = new XML();
            xml=XML(e.target.data);
            amountofvid=xml.video.length ()-1;
            changevid();

            addEventHandlers(); //when data has loaded, activate clickables
        }

        private function assembleDisplayObjects():void
        {
            // create or instantiate display objects, and into the display list
            // adjust x,y values as needed
            vid = new MovieClip();
            this.addChild(vid);

            title = new TextField();
            this.addChild(title);

            btn_next = new SimpleButton();
            this.addChild(btn_next);

            btn_prev = new SimpleButton();
            this.addChild(btn_prev);
        }

        private function addEventHandlers():void
        {
            //centralized event listener control

            btn_prev.addEventListener (MouseEvent.CLICK, prevvid);
            btn_next.addEventListener (MouseEvent.CLICK, nextvid);
        }

        private function nextvid (e:Event):void 
        {
            currentvideo  ;
            changevid();
        }

        private function prevvid (e:Event):void  
        {
            currentvideo--;
            changevid();
        }

        private function changevid():void 
        {
            var cv:Number=Math.abs(currentvideo);

            if (cv>amountofvid) {
                currentvideo=cv=0;
            }
            if (currentvideo<0) {
                currentvideo=cv=amountofvid;
            }

            vid.source = xml.video.@src[cv];
            title.text = xml.video.@title[cv];
        }

    }   

}
  

Я не тестировал это, и, вероятно, это не безошибочно, но это базовая структура пакета / класса, и она должна заставить вас работать.

Я бы настоятельно рекомендовал книгу Шупе / Россерса «Learning Actionscript 3.0» в качестве отличного введения в тему и книгу Мука «Essential Actionscript 3.0» в качестве исчерпывающего справочника. И Google. Много Google.

Надеюсь, это поможет.

Комментарии:

1. Привет, Bosworth99, спасибо, что перезвонил мне, я в Великобритании, поэтому спал, когда ты ответил 🙂 У меня возникли некоторые ошибки при запуске кода, и я немного погуглил, чтобы разобраться с этим, но не могу понять, как исправить проблемы. Не удалось загрузить файлы с markhaynes.me/flash не могли бы вы для меня посмотреть, что происходит не так?

2. На самом деле все заработало, я не прав 🙂 Просто по какой-то причине застрял в названии видео, которое появляется ido, а не в названии видео : S

3. Другое обновление по какой-то причине из всего алфавита в нем будут отображаться только буквы adgilno.

4. Рад, что вы разобрались с этим! Приветствую

Ответ №2:

вот быстрое преобразование вашего кода в класс.

 package  {

import flash.net.URLLoader;
import flash.events.Event;
import flash.net.URLRequest;    

public class mediaPlayer extends Sprite {

    private var loader:URLLoader;
    private var xml:XML;
    private var amountofvid:Number=0;
    private var currentvideo:Number=0;

    public function mediaPlayer() {

        loader = new URLLoader();
        loader.addEventListener(Event.COMPLETE,xmlloaded);
        btn_prev.addEventListener (MouseEvent.CLICK, prevvid);
        btn_next.addEventListener (MouseEvent.CLICK, nextvid);
        loader.load(new URLRequest('videos.xml'));

    }

    private function xmlloaded (e:Event) {
        xml = new XML();
        xml=XML(e.target.data);
        amountofvid=xml.video.length()-1;
        changevid();
    }

    public function nextvid (e:Event) {
        currentvideo  ;
        changevid();
    }

    public function prevvid (e:Event) {
        currentvideo--;
        changevid();
    }

    private function changevid():void {
        var cv:Number=Math.abs(currentvideo);

        if (cv>amountofvid) {
            currentvideo=cv=0;
        }

        if (currentvideo<0) {
            currentvideo=cv=amountofvid;
        }

        vid.source = xml.video.@src[cv];
        title.text = xml.video.@title[cv];

    }

}

}
  

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

 public class mediaPlayer extends Sprite {
  

Я сохранил оба метода nextvid и prevvid общедоступными (что означает, что вы можете получить к ним доступ с другого уровня, например, родительского), а другие ваши методы и переменные закрытыми (доступными только с этого уровня). Возможно, вы захотите изменить это в соответствии с вашими потребностями.

В качестве начального руководства о том, как работают классы, я бы предложил это на GoToAndLearn.com http://gotoandlearn.com/play.php?id=43

m.

Комментарии:

1. Привет, спасибо за твою помощь, приятель, в конце концов добрался, просто возникла проблема с названием, по какой-то причине название заголовка для каждого видео отображается как ido?