`
yky28yky
  • 浏览: 12849 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

[转]FLEX推广贴――使用AS project编写游戏/FLASH网站(2011-08-12 16:22:13)

 
阅读更多

[转]FLEX推广贴――使用AS project编写游戏/FLASH网站
(2011-08-12 16:22:13)
2011年08月12日
   一般我们谈到FLEX,首先想到的就是它的组件框架。然而,FLEX SDK与FLEX Builder其实两个不同的产品,一个是开源免费的,一个则不是。后者是前者的支持,但并不是只能作为前者的支持。
  当建立AS project项目的时候,FLEX Builder只会使用FLASH的内置类库来进行编译,所以和通常意义的FLEX完全不同,而是区别于FLASH的另一种编译AS文件的手段。下面将会 就如何将一个项目从使用FLASH CS3/4迁移至FLEX Builder做出说明。
  一个具体项目,是由表现与逻辑两部分组成的。FLA内的图形元件是表现,而AS则是逻辑。所以我们首先的问题就是,如何将表现与逻辑联系在一起。
  CS3/4的方法大家应该都很熟悉,就是绑定类。给元件取个类名,相应目录放上一个AS文件,就能将两者联系起来。而在FLEX中,实现这样的功能有两种方法:
  1.        Embed
  FLEX AS project唯一比FLASH内多的内容,就是这样的元标签。
  了解FLEX的应该对Embed非常熟悉,是主要的导入外部资源的方式。具体写法如下:
  [Embed(source=”xxx.swf”,symbol=”symbol_name”)]
  Public var imageClass:Class;
  在之后的语句里,只要var newins:Sprite=new imageClass();addChild(newins);就可以将这个图形元件呈现出来。然而,每次都要建立一个Class的确有些麻烦。下面这种 写法是FLEX文档没有涉及的,所以很多人都不知道,实际上可以这样写:
  Package{
  Import flash.display.Sprite;
  [Embed(source=”xxx.swf”,symbol=”symbol_name”)]
  Public class ImageClass extends Sprite{
  Public function ImageClass():void{
  //do something….
  }
  //the other functions ..
  }
  }
  也就是说,我们在原来的AS文件CLASS前面添加一句[Embed],就可以将它和对应SWF文件内的一个元件联系起来。这样的做法和直接绑定 类是一样的。诸如某个元件里还设置了几个实例,如果在CS3中没有勾选自动声明实例,我们需要在AS文件中手动声明实例一样,在FLEX Builder中我们也一样需要这样做,否则就会报错:
  Package{
  Import flash.display.Sprite;
  [Embed(source=”xxx.swf”,symbol=”symbol_name”)]
  Public class ImageClass extends Sprite{
  //SWF中对应元件内已取名的实例
  Public var ins1:Sprite;
  Public var ins2:Sprite;
  Public var ins3:Sprite;
  Public function ImageClass():void{
  //do something….
  }
  //the other functions ..
  }
  }
  说白了,结果就是这样。把原来FLA文件生成SWF,然后在AS文件头上加上Embed来实现绑定,所得到的结果和原来直接绑定是一样的。只是由FLA主动寻找链接的AS文件编译,变成了AS文件寻找指定SWF内的元件一起编译。
  当然,还是有一些不同的。这样导入的元件,其内部时间线上的AS会被完全忽略,stop()也不会被保留。而且,内部元件所有的类定义也都会被忽 略,只保留类名。多帧元件会被认为是MovieClip,单帧元件会被认为是Sprite,按钮会被认为是SimpleButton,位图会被认为是 BitmapData(不过你如果trace一下会看到转过来的其实是对应的asset类,反正是一样的我就不作说明了),不管你原来是否给了它其他的基 类,或者绑定过类文件,那部分内容都不会过来。能过来的就是帧标签,舞台上设定的实例名,grid-9定义三种。类名定义也不会过来,你将它绑定到什么类 上,它就叫什么类(当然必须要兼容)。
  有些时候的确不方便。不过对于游戏来说,这应该是无所谓的吧?
  这里有一个例外,如果直接[Embed(source=”xxx.swf”)],不写元件名,也是可以导入的。使用这种方法,类定义,AS都可以 保留,就跟直接用loader载入一个外部SWF一样。但同样的,因为两者不在同一个应用域,是不能直接交互的。这样的方法我很少用,具体也不了解,但这 样做体积会比较大一点(相当于内镶SWF的字节码),不是很推荐就是了。
  2.        SWC
  发布设置里,勾上“生成SWC”,即可在生成SWF文件的同时生成一个对应的SWC文件。
  将这个SWC文件拖到FLEX的lib目录中,建立的项目就可以直接导入它的所有类,当然也就包括所有元件了。
  注意FLA写类名的时候请写好包名。否则进来的所有类全都是顶级类,不import都会被导入(带元件的类很大的
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics