AOKWORLD

February 21, 2008

flash+xml 加载swf轮播,as3版

Filed under: Actionscript 3.0 — Tags: , — A.D.JC @ 11:47 pm

给公司做的新品活动flash,修改xml文件即可。目前用的是1.0,2.0版本。其实原理一样,语法换了而已。

做这个目的是为了练习as3,按钮和loading就不设计了。bug肯定有的,后期再改。

预览图:

campaign_swf

下载地址:
http://www.aokworld.com/blog/portfolio/as3/campaign/campaign.fla

需要动手的只有一个,就是做一个按钮样式。

实力名为 txt,第一帧为点击后的效果,第二帧为停留效果,然后在库里设置好链接即可。

campaign_jpg

xml文件:

<?xml version="1.0" encoding="utf-8"?><items>
<swf txt="" url="swf/hosting_dou.swf" link="" />
<swf txt="" url="swf/website_4800.swf" link="" />
<swf txt="" url="swf/globalMail.swf" link="" />
<swf txt="" url="swf/hosting_dou.swf" link="" />
<swf txt="" url="swf/website_4800.swf" link="" />
<swf txt="" url="swf/globalMail.swf" link="" />
</items>

as3代码:
stage.showDefaultContextMenu = false;
stage.scaleMode = "noScale";
/*
变量声明区域
------------------------------------------------------------*/

/*mc索引编号*/
var mcIndex:int = 0;
var items_xml:XML;
var mc_url_array:Array = new Array();
var mc_link_array:Array = new Array();
loadXML("index.xml");

/*创建空mc到舞台,main_mc*/
var main_mc:MovieClip = new MovieClip();
main_mc.name = "main_mc";
addChild(main_mc);

/*使用loader方法加载swf,装入container_mc*/
var mc_loader:Loader = new Loader();
mc_loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,progressHandler);
mc_loader.contentLoaderInfo.addEventListener(Event.INIT,initHandler);
mc_loader.addEventListener(Event.ENTER_FRAME,enterFrameHandler);

/*创建空mc到舞台,loading_mc,作为加载swf显示进度用。*/
var loading_mc:MovieClip = new MovieClip();
loading_mc.x = 0;
loading_mc.y = stage.stageHeight;
addChild(loading_mc);

var loading_bar:Shape = new Shape();
loading_bar.graphics.beginFill(0x000000);
loading_bar.graphics.drawRect(0,-5,5,5);
loading_bar.graphics.endFill();
loading_mc.addChild(loading_bar);

/*
函数模块区域
------------------------------------------------------------*/
/*加载xml*/
function loadXML(xml_url:String):void
{
var xml_urlLoader:URLLoader = new URLLoader();
xml_urlLoader.addEventListener(Event.COMPLETE,onLoadHandler);
xml_urlLoader.load(new URLRequest(xml_url));
}

/*加载xml成功时触发*/
function onLoadHandler(evt:Event):void
{
//获得xml数据
items_xml = new XML(evt.target.data);
for (var i:int = 0; i
{
//提取xml中的属性值,并存储到各自数组中
mc_url_array.push(items_xml.children()[i].@url.toXMLString());
mc_link_array.push(items_xml.children()[i].@link.toXMLString());

//根据xml中的url值的条数,添加btn_mc
var btn_mc:MovieClip = new btn_mc_linkage();
addChild(btn_mc);
btn_mc.name = "btn_mc"+i;
btn_mc.txt.text = i+1;
btn_mc.mcIndex = i;
btn_mc.x = 20+25*i;
btn_mc.y = 133;
btn_mc.addEventListener(MouseEvent.CLICK,clickHandler);
}
btnShowHandler(mcIndex);
mcSwitch();
}

/*影片切换*/
function mcSwitch():void
{
//创建空mc,main_mc.container_mc
var container_mc:MovieClip = new MovieClip();
container_mc.name = "container_mc";
main_mc.addChild(container_mc);
container_mc.buttonMode = true;
container_mc.addEventListener(MouseEvent.CLICK,linkHandler);

//使用loader方法加载swf,装入container_mc
mc_loader.load(new URLRequest(mc_url_array[mcIndex]));
container_mc.addChild(mc_loader);
}

/*加载mc*/
function progressHandler(evt:ProgressEvent):void
{
var precent:int = Math.floor((evt.bytesLoaded/evt.bytesTotal)*100);
loading_mc.alpha = 100;
loading_mc.width = 735/100*precent;
}
function initHandler(evt:Event):void
{
if (loading_mc.width == stage.stageWidth)
{
loading_mc.alpha = 0;
}
MovieClip(evt.target.loader.content).gotoAndPlay(2);
}

/*监听container_mc的帧数*/
function enterFrameHandler(evt:Event):void
{
/*
loader对象在还没把mc载进来之前.
evt.target.content as MovieClip得到的值是null.
载完以后这句话得到的值才是loader的mc
*/
var container_content_mc:MovieClip = evt.target.content as MovieClip;
if (container_content_mc != null)
{
var totalframes:int = container_content_mc.totalFrames;
var currentframe:int = container_content_mc.currentFrame;
if (totalframes > 1)
{
if (currentframe == totalframes)
{
mcIndex++;
if (mcIndex > mc_url_array.length-1)
{
mcIndex = 0;
}
btnShowHandler(mcIndex);
mcSwitch();
}
}
}
}

/*btn_mc点击时*/
function clickHandler(evt:Event):void
{
mcIndex = evt.currentTarget.mcIndex;
btnShowHandler(mcIndex);
mcSwitch();
}

/*btn_mc显示状态*/
function btnShowHandler(index:int):void
{
for (var i:int = 0; i
{
MovieClip(getChildByName("btn_mc" + i)).gotoAndStop(1);
}
MovieClip(getChildByName("btn_mc" + index)).gotoAndStop(2);
}

/*container_mc点击进入相应链接*/
function linkHandler(evt:Event):void
{
navigateToURL(new URLRequest(mc_link_array[mcIndex]),"_self");
}

8 Comments »

  1. 此fla文件发布时,提示java运行时环境初始化时出现错误

    Comment by ghz — July 30, 2008 @ 10:49 am

  2. good site ialsft

    Comment by ok — September 25, 2008 @ 1:17 pm

  3. 啊?这些都我写的? 我怎么都忘了.

    Comment by A.D.JC — October 15, 2008 @ 11:37 pm

  4. 好文章,这个这个…想转载一下不知道可以不?嘿嘿229

    Comment by 恶猫的博客 — October 22, 2008 @ 10:22 am

  5. 任意转载。

    Comment by A.D.JC — October 22, 2008 @ 8:55 pm

  6. Keep up the good work.

    Comment by Ronna — December 5, 2008 @ 6:56 am

  7. good site!

    Comment by car insurance — February 7, 2009 @ 3:35 pm

  8. 请问一下!!这个范例可以轮播吗?因为他都会停在第一个swf檔,只能选择要播那一个swf檔..但是都是不会播完第一个紧接第二个,如果要达成这样的功能要如何做呢?

    Comment by jason — September 18, 2009 @ 6:26 pm

RSS feed for comments on this post. TrackBack URL

Leave a comment

Powered by WordPress