2011-07-30 20 views
0

我有一些在Flash Professional CS5中可视化创建的类,将绘制的结果转换为MovieClip并将符号敲入AS代码。现在,我想为课程添加一些属性。更具体地说,我创建了Ball类,并且想要添加代表垂直和水平速度的变量。我如何编辑课程才能做到这一点?另外,当我想为类添加一些可见的外部元素时,起初我决定在代码本身中添加MovieClip属性,但后来调用了方法.addChild(),这对我来说非常合适。现在,我无法对不可见的属性进行同样的操作。那么,使用.addChild()添加可见元素并将它们添加到代码本身之间有什么区别?如何在代码本身中添加任何内容?在AS3中编辑视觉创建的类

回答

1

您应该避免将物理与实际视觉表示混合。尝试制作一个球类,其中包含velocityX,velocityY以及对MovieClip的引用。使球类持有update(),这可能会是这个样子:

public function update() : void { 
    ballMovieClip.x += velocityX; 
    ballMovieClip.y += velocityY; 
} 

在主类,你可以使用Event.ENTER_FRAME -event调用ball.update();

这种方式可以独立更新你球的图形和物理代码。

1

您可以通过扩展或包装容器类来修改Flash导入的类。

这个包装是我在我的两款游戏中选择的方法。我用它来添加各种绘制相关的属性或附加对象。

public class WrapperOverSprite extends Sprite 
{ 
    private var instanceFromFlash: SomeClassTypeFromFlashViaSWC: new SomeClassTypeFromFlashViaSWC(); 
    //Add whatever other variables you wish. 

    public function WrapperOverSprite () 
    { 
    //Do stuff to your object. 
    } 

    //Can add whatever functions you wish... 
} 

不用说,这种方法,我用的通过,我在Flash/Flex Builder中导入的SWC文件导出从Flash对象。

2

您需要做的是创建一个外部ActionScript文件来保存类定义。做一个文件,把它Ball.as,并与

package { 
    import flash.display.*; 
    import flash.events.*; 

    public class Ball extends MovieClip { 

     public var vx:Number = 0; 
     public var vy:Number = 0; 

     // add more variables here 

     public function Ball() { 

     } 

     // add more functions here. 

    } 

} 

填补它在这一类中,你可以把所有你想要的函数和变量,并能够从时间轴代码访问它们。将它放在与.fla相同的文件夹中,然后将球的MovieClip导出为Ball,并将其扩展为flash.display.MovieClip。 Flash将找到该类的定义并用它来代替生成的类。

注:

  • 如果/当你添加更多的功能或变量,不要忘记添加访问修饰符。 (公共,私人,受保护)
  • 如果您更改与.fla相关的文件夹,则需要更改软件包,因此,如果您为游戏的所有源创建了com/mygame文件夹,你可以将第一行改为“package com.mygame {”,并将MovieClip导出为“com.mygame.Ball”。
  • 您可能必须将类更改为动态类,方法是在public和class之间添加关键字“dynamic”。这意味着您可以在运行时向该类添加属性,但速度会受到影响。

我不明白你的意思是“添加不可见的属性”。addChild()函数应该适用于所有DisplayObjectContainer(Sprite和MovieClip,特别是)的子类,并且应该适用于DisplayObject的所有子类(包括Sprite,MovieClips,Bitmap,TextFields和Shapes)

+0

这是要走的路。 +1 – pkyeck