MyGameMyLove.com

仿QQ秀更换衣服
仿QQ秀更换衣服v1
2007-11-5 仿QQ秀 flash js 换衣服
公司的网站打算要作一个用户改变形象的功能,要象QQ那样,心中有一些兴奋,因为我可以试一下了。现在的要求要比QQ秀里边还多一个功能就是可以设定人物的动作。今天只是吧总体的结构作好了,主要完成了:1。js与flash的交互,js调用flash里的函数。完成某一个功能。2。加载js提交的图片地址。
作完以后,和老板沟通以后,原来不需要加载的图片的平铺,只是一个部位一个图片就好了,唉~我花了好久来调试平铺图片,不过也好,我研究了一下,BitmapData这个类,写了一个比较通用的"用加载的图片填充mc”的方法(在这里查看)。不过无所谓,BitmapDat的填充只要设置一个参数,不让它平铺就OK了:P
注意的一点:因为flash现在安全的限制,所以只能在网上才能正确浏览。
效果:请点击这里
下载地址:../down.asp?id=111
/*----------飞飞 07-10-18 www.mygamemylove.com 我的经验与你分享
Email mygamemylove@qq.com
*/
/*
人物的身体分解
第一个部位里边都有一个mcMask电影符号作为填充以后的遮蔽部分.(如果要遮蔽的话)
mcT 头
mcLB mcRB 左臂 右臂
mcS 身体
mcRK mcRK 左裤 右裤
mcLT mcRT 左腿 右腿
mcLJ mcRJ 左脚 右脚
mcMask 每个元件遮蔽
*/
//
//身体分成的部位
/* mcT 头
mcLB mcRB 左臂 右臂
mcS 身体
mcRK mcRK 左裤 右裤
mcLT mcRT 左腿 右腿
mcLJ mcRJ 左脚 右脚
mcMask 每个元件遮蔽
*/
/*
填充某个mc
------------*/
//别忘了引用包
import flash.display.BitmapData;
import flash.geom.*;
//画矩形
function createRectangle(x:Number, y:Number, w:Number, h:Number, mc:MovieClip) {
mc.moveTo(x, y);
mc.lineTo(x+w, y);
mc.lineTo(x+w, y+h);
mc.lineTo(x, y+h);
mc.lineTo(x, y);
mc.endFill();
}
//
//mcTarget:MovieClip 要填充的影片 mcDraw:MovieClip 填充的素材 strMask 遮蔽,要填充的影片里的影片名字
function FillBmpMc(mcTarget:MovieClip, mcDraw:MovieClip, strMask:String) {
mcTarget.rect_mc.bmp.dispose();
mcTarget.rect_mc.removeMovieClip();
var rect_mc:MovieClip = mcTarget.createEmptyMovieClip("rect_mc", mcTarget.getNextHighestDepth());
rect_mc.bmp = new BitmapData(20, 20, false);
rect_mc.bmp.draw(mcDraw);
rect_mc.beginBitmapFill(rect_mc.bmp);
//
/*如果不相平铺填充影片,请用下面的参数
matrix = new Matrix();
repeat = false;
smoothing = true;
rect_mc.beginBitmapFill(rect_mc.bmp, matrix, repeat, smoothing);
*/
//因为只能填充一下用程序画的图形。
createRectangle(0, 0, mcTarget._width, mcTarget._height, rect_mc);
//如果填充一个不规则的图形,就要在要填充的影片里放一个作遮蔽的影片,不用的话,传一个没有申明的变量就可以了。
if (strMask != undefined) {
rect_mc.setMask(mcTarget[strMask]);
}
}
//获得文件路径
function getFilePath():String {
var arrA:Array, strRen:String, strSplit:String;
strSplit = "/";
arrA = _root._url.split(strSplit);
if (arrA.length == 1) {
strSplit = "\\";
}
for (var i:Number = 0; i if (i == 0) {
strRen = arrA[0];
} else {
strRen += strSplit+""+arrA[i];
}
}
strRen += strSplit;
return strRen;
}
//提示框
_root.createEmptyMovieClip("mcForTY", _root.getNextHighestDepth());
//提示框滚屏类
var objTalkYou:casTalkYou = new casTalkYou(txtTalkYou, 9);
//加载图片 MovieClipLoader 侦听对象
//strImgUrl:String 图片地址相对flash文件所在位置,因为我加了getFilePath()这个函数, mcToName:MovieClip 加载图片附上的mc, mcFillMc:MovieClip 要填充的mc
function loadImgToMc(strImgUrl:String, mcToName:MovieClip, mcFillMc:MovieClip) {
var objLoad:Object = new Object();
objLoad.onLoadInit = function(target_mc:MovieClip) {
//talkYou("加载完成,第一帧");
objTalkYou.TalkYou("");
//有遮蔽
FillBmpMc(mcFillMc, target_mc, "mcMask");
//利用完了就搞死它:P
target_mc.removeMovieClip();
};
objLoad.onLoadComplete = function(target_mc:MovieClip, httpStatus:Number) {
objTalkYou.TalkYou("完全下载");
objTalkYou.TalkYouOver(_root.mcForTY);
};
objLoad.onLoadError = function(target_mc:MovieClip, errorCode:String, httpStatus:Number) {
objTalkYou.TalkYou("未能加载");
};
objLoad.onLoadProgress = function(target_mc:MovieClip, loadedBytes:Number, totalBytes:Number) {
objTalkYou.TalkYou("加载.."+Math.floor((loadedBytes/totalBytes)*100)+"%");
};
objLoad.onLoadStart = function(target_mc:MovieClip) {
objTalkYou.TalkYou("开始下载");
};
var myLoader:MovieClipLoader = new MovieClipLoader();
myLoader.addListener(objLoad);
//加载图片路
myLoader.loadClip(getFilePath()+strImgUrl, mcToName);
}
//调加载填充函数 加载身体
/* mcT 头
mcLB mcRB 左臂 右臂
mcS 身体
mcRK mcRK 左裤 右裤
mcLT mcRT 左腿 右腿
mcLJ mcRJ 左脚 右脚
mcMask 每个元件遮蔽
*/
//
//身体分成的部位
/* mcT 头
mcLB mcRB 左臂 右臂
mcS 身体
mcRK mcRK 左裤 右裤
mcLT mcRT 左腿 右腿
mcLJ mcRJ 左脚 右脚
mcMask 每个元件遮蔽
*/
//js to flash
import flash.external.*;
var methodName:String = "goHome";
var instance:Object = null;
var method:Function = goToMacromedia;
/*var wasSuccessful:Boolean = ExternalInterface.addCallback(methodName, instance, method);
var txtField:TextField = this.createTextField("txtField", this.getNextHighestDepth(), 0, 0, 200, 50);
txtField.border = true;
txtField.text = wasSuccessful.toString();*/
ExternalInterface.addCallback(methodName, instance, method);
function goToMacromedia(strA, flag) {
if (flag == 1) {//头
loadImgToMc(strA, _root.createEmptyMovieClip("hanyifu"+_root.getNextHighestDepth(), _root.getNextHighestDepth()), mcT);
} else if (flag == 2) {//左臂 右臂
loadImgToMc(strA, _root.createEmptyMovieClip("hanyifu"+_root.getNextHighestDepth(), _root.getNextHighestDepth()), mcLB);
loadImgToMc(strA, _root.createEmptyMovieClip("hanyifu"+_root.getNextHighestDepth(), _root.getNextHighestDepth()), mcRB);
} else if (flag == 3) {// 身体
loadImgToMc(strA, _root.createEmptyMovieClip("hanyifu"+_root.getNextHighestDepth(), _root.getNextHighestDepth()), mcS);
} else if (flag == 4) {//左裤 右裤
loadImgToMc(strA, _root.createEmptyMovieClip("hanyifu"+_root.getNextHighestDepth(), _root.getNextHighestDepth()), mcRK);
loadImgToMc(strA, _root.createEmptyMovieClip("hanyifu"+_root.getNextHighestDepth(), _root.getNextHighestDepth()), mcLK);
} else if (flag == 5) {//左腿 右腿
loadImgToMc(strA, _root.createEmptyMovieClip("hanyifu"+_root.getNextHighestDepth(), _root.getNextHighestDepth()), mcLT);
loadImgToMc(strA, _root.createEmptyMovieClip("hanyifu"+_root.getNextHighestDepth(), _root.getNextHighestDepth()), mcRT);
} else if (flag == 6) {//左脚 右脚
loadImgToMc(strA, _root.createEmptyMovieClip("hanyifu"+_root.getNextHighestDepth(), _root.getNextHighestDepth()), mcLJ);
loadImgToMc(strA, _root.createEmptyMovieClip("hanyifu"+_root.getNextHighestDepth(), _root.getNextHighestDepth()), mcRJ);
} else if(flag==7){//初使所有部位
//一次定义完
var arrTemList:Array=strA.split(",")
var mcImg:MovieClip = _root.createEmptyMovieClip("mcImg", _root.getNextHighestDepth());
loadImgToMc(arrTemList[0], mcImg, mcT);
//
var mcImg1:MovieClip = _root.createEmptyMovieClip("mcImg1", _root.getNextHighestDepth());
loadImgToMc(arrTemList[1], mcImg1, mcLB);
var mcImg2:MovieClip = _root.createEmptyMovieClip("mcImg2", _root.getNextHighestDepth());
loadImgToMc(arrTemList[1], mcImg2, mcRB);
//
var mcImg3:MovieClip = _root.createEmptyMovieClip("mcImg3", _root.getNextHighestDepth());
loadImgToMc(arrTemList[2], mcImg3, mcS);
//
var mcImg4:MovieClip = _root.createEmptyMovieClip("mcImg4", _root.getNextHighestDepth());
loadImgToMc(arrTemList[3], mcImg4, mcRK);
var mcImg5:MovieClip = _root.createEmptyMovieClip("mcImg5", _root.getNextHighestDepth());
loadImgToMc(arrTemList[3], mcImg5, mcLK);
//
var mcImg6:MovieClip = _root.createEmptyMovieClip("mcImg6", _root.getNextHighestDepth());
loadImgToMc(arrTemList[4], mcImg6, mcLT);
var mcImg7:MovieClip = _root.createEmptyMovieClip("mcImg7", _root.getNextHighestDepth());
loadImgToMc(arrTemList[4], mcImg7, mcRT);
//
var mcImg8:MovieClip = _root.createEmptyMovieClip("mcImg8", _root.getNextHighestDepth());
loadImgToMc(arrTemList[5], mcImg8, mcLJ);
var mcImg9:MovieClip = _root.createEmptyMovieClip("mcImg9", _root.getNextHighestDepth());
loadImgToMc(arrTemList[5], mcImg9, mcRJ);
//
}}
Email mygamemylove@qq.com
*/
/*
人物的身体分解
第一个部位里边都有一个mcMask电影符号作为填充以后的遮蔽部分.(如果要遮蔽的话)
mcT 头
mcLB mcRB 左臂 右臂
mcS 身体
mcRK mcRK 左裤 右裤
mcLT mcRT 左腿 右腿
mcLJ mcRJ 左脚 右脚
mcMask 每个元件遮蔽
*/
//
//身体分成的部位
/* mcT 头
mcLB mcRB 左臂 右臂
mcS 身体
mcRK mcRK 左裤 右裤
mcLT mcRT 左腿 右腿
mcLJ mcRJ 左脚 右脚
mcMask 每个元件遮蔽
*/
/*
填充某个mc
------------*/
//别忘了引用包
import flash.display.BitmapData;
import flash.geom.*;
//画矩形
function createRectangle(x:Number, y:Number, w:Number, h:Number, mc:MovieClip) {
mc.moveTo(x, y);
mc.lineTo(x+w, y);
mc.lineTo(x+w, y+h);
mc.lineTo(x, y+h);
mc.lineTo(x, y);
mc.endFill();
}
//
//mcTarget:MovieClip 要填充的影片 mcDraw:MovieClip 填充的素材 strMask 遮蔽,要填充的影片里的影片名字
function FillBmpMc(mcTarget:MovieClip, mcDraw:MovieClip, strMask:String) {
mcTarget.rect_mc.bmp.dispose();
mcTarget.rect_mc.removeMovieClip();
var rect_mc:MovieClip = mcTarget.createEmptyMovieClip("rect_mc", mcTarget.getNextHighestDepth());
rect_mc.bmp = new BitmapData(20, 20, false);
rect_mc.bmp.draw(mcDraw);
rect_mc.beginBitmapFill(rect_mc.bmp);
//
/*如果不相平铺填充影片,请用下面的参数
matrix = new Matrix();
repeat = false;
smoothing = true;
rect_mc.beginBitmapFill(rect_mc.bmp, matrix, repeat, smoothing);
*/
//因为只能填充一下用程序画的图形。
createRectangle(0, 0, mcTarget._width, mcTarget._height, rect_mc);
//如果填充一个不规则的图形,就要在要填充的影片里放一个作遮蔽的影片,不用的话,传一个没有申明的变量就可以了。
if (strMask != undefined) {
rect_mc.setMask(mcTarget[strMask]);
}
}
//获得文件路径
function getFilePath():String {
var arrA:Array, strRen:String, strSplit:String;
strSplit = "/";
arrA = _root._url.split(strSplit);
if (arrA.length == 1) {
strSplit = "\\";
}
for (var i:Number = 0; i
strRen = arrA[0];
} else {
strRen += strSplit+""+arrA[i];
}
}
strRen += strSplit;
return strRen;
}
//提示框
_root.createEmptyMovieClip("mcForTY", _root.getNextHighestDepth());
//提示框滚屏类
var objTalkYou:casTalkYou = new casTalkYou(txtTalkYou, 9);
//加载图片 MovieClipLoader 侦听对象
//strImgUrl:String 图片地址相对flash文件所在位置,因为我加了getFilePath()这个函数, mcToName:MovieClip 加载图片附上的mc, mcFillMc:MovieClip 要填充的mc
function loadImgToMc(strImgUrl:String, mcToName:MovieClip, mcFillMc:MovieClip) {
var objLoad:Object = new Object();
objLoad.onLoadInit = function(target_mc:MovieClip) {
//talkYou("加载完成,第一帧");
objTalkYou.TalkYou("");
//有遮蔽
FillBmpMc(mcFillMc, target_mc, "mcMask");
//利用完了就搞死它:P
target_mc.removeMovieClip();
};
objLoad.onLoadComplete = function(target_mc:MovieClip, httpStatus:Number) {
objTalkYou.TalkYou("完全下载");
objTalkYou.TalkYouOver(_root.mcForTY);
};
objLoad.onLoadError = function(target_mc:MovieClip, errorCode:String, httpStatus:Number) {
objTalkYou.TalkYou("未能加载");
};
objLoad.onLoadProgress = function(target_mc:MovieClip, loadedBytes:Number, totalBytes:Number) {
objTalkYou.TalkYou("加载.."+Math.floor((loadedBytes/totalBytes)*100)+"%");
};
objLoad.onLoadStart = function(target_mc:MovieClip) {
objTalkYou.TalkYou("开始下载");
};
var myLoader:MovieClipLoader = new MovieClipLoader();
myLoader.addListener(objLoad);
//加载图片路
myLoader.loadClip(getFilePath()+strImgUrl, mcToName);
}
//调加载填充函数 加载身体
/* mcT 头
mcLB mcRB 左臂 右臂
mcS 身体
mcRK mcRK 左裤 右裤
mcLT mcRT 左腿 右腿
mcLJ mcRJ 左脚 右脚
mcMask 每个元件遮蔽
*/
//
//身体分成的部位
/* mcT 头
mcLB mcRB 左臂 右臂
mcS 身体
mcRK mcRK 左裤 右裤
mcLT mcRT 左腿 右腿
mcLJ mcRJ 左脚 右脚
mcMask 每个元件遮蔽
*/
//js to flash
import flash.external.*;
var methodName:String = "goHome";
var instance:Object = null;
var method:Function = goToMacromedia;
/*var wasSuccessful:Boolean = ExternalInterface.addCallback(methodName, instance, method);
var txtField:TextField = this.createTextField("txtField", this.getNextHighestDepth(), 0, 0, 200, 50);
txtField.border = true;
txtField.text = wasSuccessful.toString();*/
ExternalInterface.addCallback(methodName, instance, method);
function goToMacromedia(strA, flag) {
if (flag == 1) {//头
loadImgToMc(strA, _root.createEmptyMovieClip("hanyifu"+_root.getNextHighestDepth(), _root.getNextHighestDepth()), mcT);
} else if (flag == 2) {//左臂 右臂
loadImgToMc(strA, _root.createEmptyMovieClip("hanyifu"+_root.getNextHighestDepth(), _root.getNextHighestDepth()), mcLB);
loadImgToMc(strA, _root.createEmptyMovieClip("hanyifu"+_root.getNextHighestDepth(), _root.getNextHighestDepth()), mcRB);
} else if (flag == 3) {// 身体
loadImgToMc(strA, _root.createEmptyMovieClip("hanyifu"+_root.getNextHighestDepth(), _root.getNextHighestDepth()), mcS);
} else if (flag == 4) {//左裤 右裤
loadImgToMc(strA, _root.createEmptyMovieClip("hanyifu"+_root.getNextHighestDepth(), _root.getNextHighestDepth()), mcRK);
loadImgToMc(strA, _root.createEmptyMovieClip("hanyifu"+_root.getNextHighestDepth(), _root.getNextHighestDepth()), mcLK);
} else if (flag == 5) {//左腿 右腿
loadImgToMc(strA, _root.createEmptyMovieClip("hanyifu"+_root.getNextHighestDepth(), _root.getNextHighestDepth()), mcLT);
loadImgToMc(strA, _root.createEmptyMovieClip("hanyifu"+_root.getNextHighestDepth(), _root.getNextHighestDepth()), mcRT);
} else if (flag == 6) {//左脚 右脚
loadImgToMc(strA, _root.createEmptyMovieClip("hanyifu"+_root.getNextHighestDepth(), _root.getNextHighestDepth()), mcLJ);
loadImgToMc(strA, _root.createEmptyMovieClip("hanyifu"+_root.getNextHighestDepth(), _root.getNextHighestDepth()), mcRJ);
} else if(flag==7){//初使所有部位
//一次定义完
var arrTemList:Array=strA.split(",")
var mcImg:MovieClip = _root.createEmptyMovieClip("mcImg", _root.getNextHighestDepth());
loadImgToMc(arrTemList[0], mcImg, mcT);
//
var mcImg1:MovieClip = _root.createEmptyMovieClip("mcImg1", _root.getNextHighestDepth());
loadImgToMc(arrTemList[1], mcImg1, mcLB);
var mcImg2:MovieClip = _root.createEmptyMovieClip("mcImg2", _root.getNextHighestDepth());
loadImgToMc(arrTemList[1], mcImg2, mcRB);
//
var mcImg3:MovieClip = _root.createEmptyMovieClip("mcImg3", _root.getNextHighestDepth());
loadImgToMc(arrTemList[2], mcImg3, mcS);
//
var mcImg4:MovieClip = _root.createEmptyMovieClip("mcImg4", _root.getNextHighestDepth());
loadImgToMc(arrTemList[3], mcImg4, mcRK);
var mcImg5:MovieClip = _root.createEmptyMovieClip("mcImg5", _root.getNextHighestDepth());
loadImgToMc(arrTemList[3], mcImg5, mcLK);
//
var mcImg6:MovieClip = _root.createEmptyMovieClip("mcImg6", _root.getNextHighestDepth());
loadImgToMc(arrTemList[4], mcImg6, mcLT);
var mcImg7:MovieClip = _root.createEmptyMovieClip("mcImg7", _root.getNextHighestDepth());
loadImgToMc(arrTemList[4], mcImg7, mcRT);
//
var mcImg8:MovieClip = _root.createEmptyMovieClip("mcImg8", _root.getNextHighestDepth());
loadImgToMc(arrTemList[5], mcImg8, mcLJ);
var mcImg9:MovieClip = _root.createEmptyMovieClip("mcImg9", _root.getNextHighestDepth());
loadImgToMc(arrTemList[5], mcImg9, mcRJ);
//
}}
浏览量:
返回列表相关评论
luwiso@163.com
2008-2-24
功能是做出来了,可惜用中文软件来编写,在Mozilla Firefox里是无法交互的.
geye77@163.com
2008-1-25
额正在学。。
good
2007-12-10
鼓励一下,需要修正mozilla下无法使用的bug。

谢谢你的见意,没有在mozilla里试过,js与flash的通信是通过flash提供的方法来完成,如果不行,可能是flash不支持吧。只是猜测没有细究。如果有时候会研究一下的。
design888
2007-11-18
你好强!我根本看不懂!

见笑了。
bree5200c@163.com
2007-11-18
关注,功能好象挺好玩的。是什么网站啊,上去参观一下。

正在制作,只是老板的一时的打算,只是看能不能实现,要过一此时候才能完成。
相关主题
2007-11-5 仿QQ秀 flash js 换衣服
公司的网站打算要作一个用户改变形象的功能,要象QQ那样,心中有...查看..
有话说? 好的,那就到我的留言本里给我留言吧!我们共同进步.
友情连接 :我要申请