2013-04-13 22 views
1

我想在ActionScript-3中为Sprite类添加更多功能。基本上添加变量和方法。我已经得到了我,因为我需要它的完整路径引用雪碧不太喜欢这个工作的解决方案:如何修改ActionScript 3中的Sprite类?

package myPackage 
{ 
    import flash.display.Sprite; 
    import myPackage.Sprite; 

    public class Sprite extends flash.display.Sprite 
    { 
     public function Sprite() 
     { 
      super(); 
      graphics.lineStyle(3, 0xff00ff); 
      graphics.drawRect(0, 0, 64, 64); 
      doStuff(); 
     } 

     public function doStuff(): void 
     { 
      trace("hello world"); 
      if (Math.random() < 0.9) 
       addChild(new myPackage.Sprite()); 
     } 
    } 
} 

缺少进口给了我这些错误虽然Java编译器能处理好那些没有进口2:

  • 错误:不明确的参考雪碧。
  • 错误:基类雪碧的定义没有被发现。

是否有另一种方法可以将变量,属性和方法添加到Sprite中,然后将新的Sprite作为类使用?如果是原型,有没有一个简单而简单的例子?

+0

只需更改您的类名,使其不会被Flash使用 - 您可以拥有多个具有相同名称但不推荐的类,并且猜测您对于OOD来说是相当新的,它更容易保持名称不同 – 2013-04-14 00:51:23

+0

“对OOD合理新的“?你可能 ?名称冲突在编程中并不新鲜。这就是为什么命名空间和软件包被发明出来的原因! – n4pgamer

+0

对不起,如果我冒犯了你 - 只是从你的问题中得到的印象 – 2013-04-14 08:56:18

回答

0

我建议您为子采摘另一个类的名称。即使你找到了一种用你自己的方法来代替Adobe的Sprite,这是一个坏主意。另外,除非您有Sprite的现有子类的源代码,否则我建议不要尝试直接更改它(例如,重新编译为Sprite类的子项而不是Adobe的Sprite类)。

雪碧是一个非常常用的类,你可能会希望其他开发人员能够按照你的代码的一些日子。如果您使用'EnhancedSprite'或类似的东西,很明显会有更多/不同的功能可用。

为什么你需要时您尝试使用相同的类名使用完整的类路径很明显。这将始终是您的Sprite/EnhancedSprite文件中的情况。如果你真的必须使用'Sprite'这个名字,你需要找到一种方法让你的动作编译器导入除Sprite之外的所有Adobe类以及你自己的Sprite类。

如果希望所有精灵子类从改善类扩展,你基本上需要重新编译他们的所有(影片剪辑是大个,我个人不惹引擎盖下)。这也是一个坏主意,因为现有的子类可能有一个匹配你自己的方法名称的方法,并会导致更多的问题。例如,如果您有stop()方法,MovieClip将如何编译?在使用'doStuff'作为方法名称之前,您必须检查Sprite的现有子类是否已将该方法或变量名称作为方法或变量名称,无论是公有还是私有。

0

首先,你不需要这条线在myPackage.Sprite类:

import myPackage.Sprite; 

很有可能发生的事情是,在任何类,你要创建这个雪碧的一个实例,你有两个雪碧类导入,但是您没有在该类中明确指定包。

例如,如果在你的主类,你有这些进口:

import flash.display.Sprite; 
import myPackage.Sprite; 

需要,无论你使用的是类名是明确的。如果你不是,你可能会得到你得到的错误。

例如,这会给你的错误,如果你有两个输入:

var mySprite:Sprite = new Sprite; 

而应该做到以下酌情:

var mySprite:myPackage.Sprite = new myPackage.Sprite; 
var regSprite:flash.display.Sprite = new flash.display.Sprite; 

而且,你跟CS6编译或Flash Builder或Flash开发?