如何将内部函数移动到外部Actionscript 3类文件?

时间:2010-10-15 08:21:41

标签: flash actionscript-3 oop class

我有这个捕手游戏,苏打瓶落在舞台上,我们用一个角色来捕捉它。但是所有的actionscript都内置在文件中。但我被要求将我使用的两个类(光标和下降的汽水瓶)放在外部类文件中。

既然我是OOP的新手,我真的不明白怎么做。那么,如何将类的内部动作脚本移动到外部动作脚本文件中?

感谢先进,考虑提供帮助: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 :(得分:0)

通过使用“文档类”(C / C ++中的某种主要功能)将flash IDE与外部类集成,即当flash IDE查找类设置为文档类&称其为Constructor&输入框架处理程序。

     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);                    

                }

         }

    }

以上可能没有给你任何有用的东西。但我试图让您了解代码应该如何移动。它就像

一样简单
  • 创建一个类(startgame), 将其设置为文档类。
  • 将调用构造函数 (上面的startgame函数)。
  • 您可以设置事件监听器 更新内容的每一帧 构造函数本身。
  • 包关键字允许您 放置所有这个课程&随后 分为有序的 文件夹(包/文件夹名称类) 这里)在文件系统中。

我知道如果你完全使用OOP& amp; AS3第一次在一起,但由于它是一个非常广泛的话题,除了真正的练习和选择之外别无选择。至少学习OOP概念。因为我怀疑无论是谁(你的客户或老师)要求你使用课程,都会满足于上述内容。

答案 1 :(得分:0)

当你第一次开始做OOP时,你可能想尝试这个我编写的脚本,将时间轴代码转换为文档类。

timeline to document class

它并不完美,但效果很好,只需将时间轴代码粘贴到textarea中,并为该类命名为Main。然后它将为您生成一个doc类。

获取新代码并将其复制到名为Main.as的文件中。然后从fla中删除旧的时间轴代码。接下来,单击舞台上的某个位置,然后在“发布”下的属性窗口中,您将看到一个名为“类”的输入字段,在输入字段中输入Main并测试您的电影。确保将Main.as保存在fla文件旁边。

您可以将原始时间轴代码与新文档类进行比较,以便开始了解您想要编写类时所需的内容。这真的只是冰山一角。围绕OOP和设计模式进行包装需要时间,但是一旦你做了它的价值。