2010-10-15 84 views
0

我有这个捕手游戏,汽水瓶落在舞台上,我们用一个角色作为游标来捕捉它。但是所有的动作脚本都已内置到文件中。但我被要求将我使用的两个班级(光标和倒下的汽水瓶)放在外部的班级文件中。如何将内部函数移动到外部ActionScript 3类文件?

而且由于我真的是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(); 
+0

此代码目前位于FLA文档某处的时间轴上吗? – 2010-10-15 11:06:45

+0

是的,它目前在时间轴上。如果我上传Flash文件会有帮助吗? – steph 2010-10-15 11:34:55

回答

0

通过使用“文档类”整合与外部类个e-闪光IDE(有什么种类在C/C++的主功能的),即当闪光灯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);      

       } 

     } 

    } 

以上可能不会给你任何有用的东西。但我试图给你一个关于如何移动代码的想法。它简单如

  • 创建一个类(startgame), 将其设置为文档类。
  • 该构造函数将被称为 (上面的startgame函数)。
  • 您可以将事件侦听器设置为 构造函数本身中的每一帧更新事物。
  • 包关键字允许 地方这个类的所有&随后 那些到文件系统中的等级秩序 文件夹(包/文件夹名类 这里)。

我知道这听起来混乱,如果你是完全用OOP工作& AS3共同为第一次,但由于它是一个非常广泛的话题,没有办法,但要真正实践&学OOP概念在最小。因为我怀疑无论谁(你的客户或老师)要求你使用课程,只要满足上述要求即可。

0

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

timeline to document class

它不是完美的,但它工作得很好,只是贴上你的时间表代码到textarea的,并给出了主类的名称。它会为你生成一个doc类。

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

您可以将您的原始时间轴代码与新的文档类进行比较,以开始感受当您要编写类时需要什么。这真的只是冰山一角。围绕OOP和设计模式缠绕需要时间,但一旦你做了它的价值。

相关问题