我在AS3写一个纸牌游戏。我正在使用的艺术家(在Flash CS4中)生成了一个包含所有卡片图形和动画的单个swf文件。 fla工作文件的结构如下所示:
- Scene
- CardGraphics (Movie Clip)
- CardFront
- CardBack
- CardValueImage (Movie Clip)
...
在程序中,我创建了52个我的Card类实例,每个实例都有一个从加载的swf创建的MovieClip实例。我们的想法是将CardValueImage MovieClip的框架设置为与Card实例的套装和排名成员变量相对应。但是,我无法弄清楚我如何访问CardValueImage并调用gotoAndStop(或者我需要调用的任何方法)。
这基本上就是我想做的事情:
// Card Class
[Embed(source = 'CardGraphics.swf')]
private static var CardsClip:Class;
private var clip:MovieClip = new CardsClip;
// Card Constructor
this.valueImageFrame = suit * 13 + rank; // Calculate which frame contains the
// graphical representation of this card
this.clip.CardValueImage.gotoAndStop(valueImageFrame);
答案 0 :(得分:1)
尝试:
this.clip.getChildByName('CardValueImage').gotoAndStop(valueImageFrame);
我不确定CardValueImage是否是您在CardGraphics中拥有的动画片段的实例名称,如果是,那么它应该起作用:)
编辑: 要访问嵌入式swf的时间轴,您需要一个不同的方法,留下一个代码示例,以及一个更详细解释它的博客文章。
package
{
import mx.core.ByteArrayAsset;
import flash.display.Loader;
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.Event;
public class App extends Sprite
{
[Embed(source = '../assets/CardGraphics.swf', mimeType="application/octet-stream")]
public static const CardsClip : Class;
public var loader : Loader = new Loader;
public var swfasset : ByteArrayAsset;
public var clip : MovieClip;
public function App()
{
swfasset = new CardsClip();
loader.contentLoaderInfo.addEventListener(Event.INIT, loadCompleteListener, false, 0, true);
loader.loadBytes(swfasset);
}
private function loadCompleteListener(e : Event) : void
{
clip = MovieClip(loader.content);
var cardsGraphics:MovieClip = MovieClip(clip.getChildByName('CardsGraphics'));
var cardValueImage:MovieClip = MovieClip(cardsGraphics.getChildByName('CardValueImage'));
cardValueImage.gotoAndStop(2);
addChild(clip);
}
}
}
http://www.8bitrocket.com/newsdisplay.aspx?newspage=36607
*请注意,代码已更改为符合您的方案。
答案 1 :(得分:1)
Object(a.contentLoaderInfo.content)
例如,如果您有一个swf,并且想要访问实例名称为some_name
的符号。
package {
import flash.display.Loader;
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.Event;
public class Main extends Sprite
{
[Embed(source="assets/YourMovie.swf", mimeType="application/x-shockwave-flash")]
private var ClassName:Class
private var mov:MovieClip
private var symbolFromSWF:MovieClip
public function Main()
{
mov=new ClassName();
mov.addEventListener(Event.COMPLETE,onComp);
addChild(mov);
}
protected function onComp(event:Event):void
{
var a:Loader=Loader(mov.getChildAt(0));
symbolFromSWF=Object(a.contentLoaderInfo.content).some_name;
}
}
}