Как переместить внутреннюю функцию во внешний файл класса Actionscript 3? - PullRequest
0 голосов
/ 15 октября 2010

У меня есть игра-ловушка, в которой бутылки с газировкой падают на сцену, и мы используем персонажа в качестве курсора, чтобы поймать ее. Но весь actionScript уже встроен в файл. Но меня попросили поместить два класса, которые я использую (курсор и падающие бутылки с газировкой) во внешний файл классов.

И так как я действительно новичок в ООП, я действительно не понимаю, как это сделать. Итак, как вы перемещаете внутренний actionScript для класса во внешний файл actionscript?

Спасибо заранее, за помощь: p

Код ниже, если это поможет.

var koyupo:Koyupo;
var createsodaID:uint;
var gamespeed:uint;
var score:uint=0;

function startGame () :void {

    // create the character as a cursor 
    koyupo= new Koyupo();
    koyupo.x=200;
    koyupo.y=270;
    addChild(koyupo);
    // listens for a mouse move event to move the koyupo
    stage.addEventListener(MouseEvent.MOUSE_MOVE, movekoyupo);
    Mouse.hide();
    gamespeed=500;
    createsodaID=setInterval (createsoda, gamespeed);
    //setting the ammount displayed on screen to be 0
    droppedtext.text=caughttext.text='0';

}

function movekoyupo (e:MouseEvent) :void{
    // move koyupo according to the mouse movement
    koyupo.x=this.mouseX;
    e.updateAfterEvent ();
}
function getRandomNumber ( low:Number , high:Number):Number 
{
    var randomNumber:Number = Math.random()*(high-low) +low;
    return randomNumber;
}
function createsoda () :void {
    //creating falling soda bottles
    var soda:Soda= new Soda ();
    soda.y=-50;
    trace(getRandomNumber(50,900));
    soda.x=getRandomNumber(100 , 500);
    soda.addEventListener(Event.ENTER_FRAME, dropsoda);
    addChild(soda);
}

function dropsoda (e:Event):void{

    var mc:Soda=Soda(e.target);
    mc.y+=10;
    if(mc.hitTestObject (koyupo)){
        caught (mc);
    }else if (mc.y>stage.stageHeight) {
    dropped (mc);
    }
}

function caught (mc:Soda):void{
    mc.removeEventListener(Event.ENTER_FRAME,dropsoda);
    removeChild(mc);
    caughttext.text=String(Number(caughttext.text)+1);
        if(caughttext.text=='35'){
        proceed();
    }
}


function dropped (mc:Soda):void{
    mc.removeEventListener(Event.ENTER_FRAME,dropsoda);
    removeChild(mc);
    droppedtext.text=String(Number(droppedtext.text)+1);
    if(droppedtext.text=='5'){
        gameOver();
    }
}

function gameOver() :void{
    score=Number(caughttext.text);
    stage.removeEventListener(MouseEvent.MOUSE_MOVE,movekoyupo);
    removeChild(koyupo);
    clearInterval(createsodaID);
    removeChild(caughttext);
    removeChild(droppedtext);
    while(numChildren>0) {
        getChildAt (0) .removeEventListener(Event.ENTER_FRAME, dropsoda);
        removeChildAt(0);
    }
    Mouse.show();
    gotoAndStop('gameover');

}

function proceed() :void{
    score=Number(caughttext.text);
    stage.removeEventListener(MouseEvent.MOUSE_MOVE,movekoyupo);
    removeChild(koyupo);
    clearInterval(createsodaID);
    removeChild(caughttext);
    removeChild(droppedtext);
    while(numChildren>0) {
        getChildAt (0) .removeEventListener(Event.ENTER_FRAME, dropsoda);
        removeChildAt(0);
    }
    Mouse.show();
    gotoAndStop('win');

}
startGame();

Ответы [ 2 ]

0 голосов
/ 17 февраля 2011

Когда вы впервые начинаете делать ООП, вы можете попробовать этот скрипт, который я написал, который превращает код временной шкалы в класс документа.

временная шкала для класса документа

Это не идеально, но работает хорошо, просто вставьте свой код временной шкалы в текстовое поле и присвойте классу имя Main.Затем он сгенерирует для вас класс документов.

Возьмите новый код и скопируйте его в файл с именем Main.as.Затем удалите свой старый код временной шкалы из вашего фла.Затем щелкните где-нибудь на сцене, а затем в окне свойств в разделе «Опубликовать» вы увидите поле ввода с именем «Класс» типа Main в поле ввода и протестируйте свой фильм.Убедитесь, что Main.as сохранен рядом с вашим FLA-файлом.

Вы можете сравнить исходный код временной шкалы с новым классом документа, чтобы начать понимать, что требуется, когда вы хотите написать классы.Это действительно только верхушка айсберга.Обдумывание ООП и шаблонов проектирования требует времени, но как только вы это сделаете, оно того стоит.

0 голосов
/ 15 октября 2010

Вы интегрируете flash IDE с внешним классом, используя «Класс документа» (что-то вроде главной функции в C / C ++), т. Е. Когда flash IDE ищет класс, установленный как класс документа, и вызывает его конструктор &введите обработчики кадров.

     package classes
        {
        public class startGame extends MovieClip
            {                
               // Class variables can be declared here

                // Constructor of the document class
               function startGame () :void {                    

               // Function to handle Updates as per frame rate
               addEventListener(Event.ENTER_FRAME,enterFrameHandler);                    

                }

         }

    }

Вышесказанное может не дать вам ничего полезного.Но я попытался дать вам представление о том, как код должен быть перемещен.Это просто, как

  • создание класса (стартовая игра), установка его в качестве класса документа.
  • Будет вызван конструктор (функция стартовой игры выше).
  • Вы можете настроить прослушиватель событий на обновление каждого кадра в самом конструкторе.
  • Ключевое слово package позволяет вам поместить весь этот класс и последующие в иерархически упорядоченные папки (классы имен пакетов / папок здесь) вфайловая система.

Я знаю, что это может показаться странным, если вы впервые полностью работаете вместе с OOP и AS3, но, поскольку это очень широкая тема, нет альтернативы, кроме как практиковать& изучить концепции ООП по крайней мере.Поскольку я сомневаюсь, кто бы ни (ваш клиент или учитель) попросил вас использовать классы, он был бы удовлетворен только вышеупомянутым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...