- 浏览: 200642 次
- 性别:
- 来自: 上海
最新评论
-
zhuzhuaijq:
Flash OBJECT和EMBED标签详解 -
matt.u:
好像有点深奥。
一篇比较好演示AS的重构方法 -
luofeng113:
分析得不错,
flex编程感受 -
felixsky:
请问flexunit如何测试private和internal的 ...
FLEXUnit应用 -
wv1124:
你不能分个页啊,看得人都要死了
Apollo: 开发者问答录
对象数组
比如要构建一个有很多属性的数组,简单的可以这样做:
以下是引用片段:
vara:Array=newArray();
for(vari=0;i<10;i++){
a[i]=newObject();
a[i].x=10;
a[i].y=10*i;
a[i].name="---";
a[i].id=i;
//随便你给什么属性啊。
}
////先用局部变量存储对象会更好一点。
vara=newArray()
for(vari=0;i<10;i++){
varta=newObject();
ta.x=10;
ta.y=10;
ta.name="n"+i;
a.push(ta);
}
////或者更简便一点的方法:
vara=newArray()
for(vari=0;i<10;i++){
a[i]={x:10,y:10,name:"n"+i}
}
程序控制角色运动
下面这段代码控制 MovieClip mc 从 (50,50) 横向运动到(100,50) 停止,速度为 5 pixel:
以下是引用片段:
mc._x=mc._y=50;
mc.onEnterFrame=function(){
_x+=5;
trace(_x);
if(_x==100){
delete(mc.onEnterFrame);
}
};
精确计时
我们设定了时间为 60 秒,然后通过 setInterval 来定期(每1000milliseconds)触发一个函数 runTimer。
function runTimer 用来计时,当时间到了以后,转去执行 outThere。
function outThere 用来处理时间到了以后的动作,不要忘记 clearInterval(intervalID),停止计时。
以下是引用片段:
vartime:Number=60;
varintervalID:Number;
intervalID=setInterval(runTimer,1000);
functionrunTimer(){
time--;
trace(time);
if(time==0){
outThere();
}
}
functionoutThere(){
//blahblahblah
clearInterval(intervalID);
}
找到目前最小的一个可用的深度 Depth(来自国外)
针对 Flash Player 6 的:
以下是引用片段:
availTopDepth=function(){
varallDepths=[];
for(varzin_root){
if(_root[z]instanceofButton_root[z]instanceofMovieClip_root[z]instanceofTextField){
allDepths.push(_root[z].getDepth());
}
}
if(allDepths.length!=0){
sortAll=function(a,b){if(ab){return1;}else{return0;}};
allDepths.sort(sortAll);
return(parseInt(allDepths[allDepths.length-1])+1);
}
};
trace(_root.availTopDepth());放置一个 MovieClip 在 Stage,再执行这段 Action 就会得到最近的一个可用深度。我们也可以用这个来创建绝对不
会出问题的 MovieClip,比如:
_root.createEmptyMovieClip("mc_name", availTopDepth());
getNextHighestDepth() 以及 getInstanceAtDepth(depth)是 for player 7 的。
鼠标消隐
鼠标消隐之后,右健弹出菜单,鼠标就又出现了,并且一直保留着~
完整的解决方法是:在 左健抬起、右健第二次抬起、回车键抬起的时候再次消隐鼠标。
完整的方法比较复杂,下面是一个简单的解决方法,可以解决绝大多数的问题:
以下是引用片段:
onEnterFrame=function(){
if(Key.isDown(1)Key.isDown(Key.ENTER)){
Mouse.hide();
}
}
我常用的一个加速度移动的代码
以下是引用片段:
//以下代码放到主场景第一帧
stop();
_global.a=5;
//移动加速度,越大越慢
_global.click_x=0;
//用来记录点击鼠标的位置
_global.click_y=0;
_root.onMouseDown=function(){
_global.click_x=_root._xmouse;
_global.click_y=_root._ymouse;
//me是受控mc的instancename
me.onEnterFrame=function(){
if(Math.abs(_global.click_x-me._x)<2&&Math.abs(_global.click_y-me._y)<2){
//如果已经基本移到了鼠标点过的位置就取消这个事件句柄的响应程序
delete(this.onEnterFrame);
return;
}else{
//控制移动
me._x+=(_global.click_x-me._x)/_global.a;
me._y+=(_global.click_y-me._y)/_global.a;
}
};
};
//////以下部分可选
//a_v是个可以输入的文本框,用来输入加速度,即可以自定义速度,方便调试
a_v.onChanged=function(){
if(a_v.text==""Number(a_v.text)>1000Number(a_v.text)<0){
//defaultvalue
a_v.text=5;
}else{
_global.a=Number(a_v.text)?Number(a_v.text):5;
//trace(_global.a);
}
};
随机输出1到100而不从复的语句:
以下是引用片段:
seq=newArray(100);
pArray=newArray(100);
functionmakeRandom(){
for(i=1;i<=100;i++){
seq[i]="A";
}
}
functionmRandom(){
while(true){
n=int(random(100))+1;
if(seq[n]=="A"){
seq[n]="0";
break;
}
}
return(n);
}
functionrArray(){
for(i=1;i<=100;i++){
pArray[i]=mRandom();
trace(pArray[i]);
}
}
stop();
偷梁换柱
我们可以用这样一个技巧,在某些函数外部加一些东西而不需要了解函数的代码~~
比如,假如当前有很多mc 覆盖了onEnterFrame函数,我们可以这样了解那些在_root下的mc 的onEnterFrame函
数是以什么顺序执行的:
代码:
以下是引用片段:
for(variin_root){
if(_root[i].onEnterFrame!=null){//如果这个Object实现了onEnterFrame接口的话
_root[i].oldFunc=_root[i].onEnterFrame;//首先保存原来的onEnterFrame的句柄
_root[i].onEnterFrame=function(){//然后开始替换了~~加上一层壳~~
trace(this+":onEnterFrameCalled.");
this.oldFunc();//我们用保留的句柄调用原来的函数
trace(this+":onEnterFrameReturned.");
}
}
}
如果要取消这些附加的操作:
代码:
以下是引用片段:
for(variin_root){
if(_root[i].oldFunc!=null){//如果发现改过得痕迹
_root[i].onEnterFrame=_root[i].oldFunc;
delete(oldFunc);
}
}
呵呵这些操作的关键在于 Flash里面的引用机制:
所有函数名都是引用,而函数本身是浮在数据的海洋里面的。如果没有任何变量引用他,他就会被回收。如果有,
他就不会被回收。所以有着样一个有趣的事情:delete函数不会删掉任何东西,除了要求删掉的那个名字:(和java
机制相似,而和C不同)
以下是引用片段:
a=function(){trace("Functionacalled");}
b=a;
delete(a);//除了a这个名字被删掉以外,没有任何事情发生
b();
函数通过this得到其调用者的实例。
MovieClipPlus.as
定义了一些简单的MC操作
//画点:由于Flash没有画点,那我们就画短线
以下是引用片段:
MovieClip.prototype.point=OxMovieClipPoint;
functionOxMovieClipPoint(x,y){
this.moveTo(x,y);
this.lineTo(x+1,y);
}
//画矩形,左上角x1,y1 右下角x2,y2, 颜色rgb, 不透明度alpha
以下是引用片段:
MovieClip.prototype.rect=OxMovieClipRect;
functionOxMovieClipRect(x1,y1,x2,y2,rgb,alpha){
this.beginFill(rgb,alpha);
this.moveTo(x1,y1);
this.lineTo(x1,y2);
this.lineTo(x2,y2);
this.lineTo(x2,y1);
this.lineTo(x1,y1);
this.endFill();
}
//画圆:这么bt的冬冬当然不是我写的,作者素JodyKeating
//圆心x,y,半径r
MovieClip.prototype.circle=OxMovieClipCircle;
functionOxMovieClipCircle(x,y,r){
vara=r*0.414213562;
varb=r*0.707106781;
this.moveTo(x+r,y);
this.curveTo(x+r,y-a,x+b,y-b);
this.curveTo(x+a,y-r,x,y-r);
this.curveTo(x-a,y-r,x-b,y-b);
this.curveTo(x-r,y-a,x-r,y);
this.curveTo(x-r,y+a,x-b,y+b);
this.curveTo(x-a,y+r,x,y+r);
this.curveTo(x+a,y+r,x+b,y+b);
this.curveTo(x+r,y+a,x+r,y);
}
两点间的直线移动
以下是引用片段:
vars=15;
_root.onMouseDown=function(){
varoldM_x=_root._xmouse;
varoldM_y=_root._ymouse;
ax=aa._x;
ay=aa._y;
dis=Math.sqrt((oldM_x-ax)*(oldM_x-ax)+(oldM_y-ay)*(oldM_y-ay));
xa=(oldM_x-ax)/dis;
ya=(oldM_y-ay)/dis;
amove();
};
functionamove(){
onEnterFrame=function(){
aa._x+=s*xa;
aa._y+=s*ya;
if(Math.sqrt((aa._x-ax)*(aa._x-ax)+(aa._y-ay)*(aa._y-ay))>dis){
deleteonEnterFrame;
}
};
}
计算两个对象之间/两点之间的距离(注册点)
以下是引用片段:
functiongetDistanceOf(target1,target2,x2,y2){
if(arguments.length==4){
dx=x2-target1;
dy=y2-target2;
}elseif(arguments.length==2){
dx=target2._x-target1._x;
dy=target2._y-target1._y;
}
returnMath.sqrt(dx*dx+dy*dy);
}
//Arguments 对象是一个数组,其中包含作为参数传递给任何函数的值。每次在动作脚本中调用函数时,都会为该函
数自动创建 Arguments 对象。同时还会创建一个局部变量 arguments,使您可引用 arguments 对象。
让播放的MC暂停一段时间
以下是引用片段:
functionpausePlay(sec){
pfunc=function(){
this.play();
clearInterval(this.pint);
}
stop();
this.pint=setInterval(this,"pfunc",sec*1000);
}
//这样调用.sec是暂停的时间,单位是秒.
pausePlay(2);
onHitTest(target),自己写的一个MC事件,当该MC与指定的MC hitTest的时候触发事件.其实也没什么特别的地方,一样也是用setInterval来实现
以下是引用片段:
stop();
MovieClip.prototype.listen=function(target){
if(this.isHiting==undefined){
this.isHiting=this.hitTest(target);
}
if(this.hitTest(target)){
if(this.isHiting==false){
this.broadcastMessage("onHitTest",this,target);//广播事件,给事件传递this和target两个参数
}
this.isHiting=true;
}else{
this.isHiting=false;
}
};//为MovieClip添加域成员listen成员,用于监视当前对象与目标是否碰撞
MovieClip.prototype.watch=function(target){
this.timer=setInterval(this,"listen",50,target);
};//以每50毫秒检测一次的速度来检测是否碰撞
MovieClip.prototype.unWatch=function(){
clearInterval(this.timer);
};//停止对对象的监视
ASBroadcaster.initialize(MovieClip.prototype);//初始化MovieClip原型为事件源
//下面是调用的示例
//假设有两个MovieClip,左边ball,右边wall,让ball不断往wall移动,同时监视wall,一旦击中触发事件onHitTest
ball.onEnterFrame=function(){
this._x+=5;
};//让ball不断往右方移动工
myListener=newObject();
myListener.onHitTest=function(source,target){
trace("The"+source._name+"hit"+target._name+".");
};
ball.addListener(myListener);//创建监听员并注册给ball
ball.watch(wall);//让ball监视wall
MD5 32位码的Flash算法
以下是引用片段:
//-----------
functionmd5(s){
returnbinl2hex(core_md5(str2binl(s),s.length*strsize));
}
functioncore_md5(x,len){
x[len>>5]=(x[len>>5])(128<<len%32);
x[(((len+64)>>>9)<<4)+14]=len;
vara=1732584193;
varb=-271733879;
varc=-1732584194;
vard=271733878;
vari=0;
while(ivarolda=a;
varoldb=b;
varoldc=c;
varoldd=d;
a=md5_ff(a,b,c,d,x[i+0],7,-680876936);
d=md5_ff(d,a,b,c,x[i+1],12,-389564586);
c=md5_ff(c,d,a,b,x[i+2],17,606105819);
b=md5_ff(b,c,d,a,x[i+3],22,-1044525330);
a=md5_ff(a,b,c,d,x[i+4],7,-176418897);
d=md5_ff(d,a,b,c,x[i+5],12,1200080426);
c=md5_ff(c,d,a,b,x[i+6],17,-1473231341);
b=md5_ff(b,c,d,a,x[i+7],22,-45705983);
a=md5_ff(a,b,c,d,x[i+8],7,1770035416);
d=md5_ff(d,a,b,c,x[i+9],12,-1958414417);
c=md5_ff(c,d,a,b,x[i+10],17,-42063);
b=md5_ff(b,c,d,a,x[i+11],22,-1990404162);
a=md5_ff(a,b,c,d,x[i+12],7,1804603682);
d=md5_ff(d,a,b,c,x[i+13],12,-40341101);
c=md5_ff(c,d,a,b,x[i+14],17,-1502002290);
b=md5_ff(b,c,d,a,x[i+15],22,1236535329);
a=md5_gg(a,b,c,d,x[i+1],5,-165796510);
d=md5_gg(d,a,b,c,x[i+6],9,-1069501632);
c=md5_gg(c,d,a,b,x[i+11],14,643717713);
b=md5_gg(b,c,d,a,x[i+0],20,-373897302);
a=md5_gg(a,b,c,d,x[i+5],5,-701558691);
d=md5_gg(d,a,b,c,x[i+10],9,38016083);
c=md5_gg(c,d,a,b,x[i+15],14,-660478335);
b=md5_gg(b,c,d,a,x[i+4],20,-405537848);
a=md5_gg(a,b,c,d,x[i+9],5,568446438);
d=md5_gg(d,a,b,c,x[i+14],9,-1019803690);
c=md5_gg(c,d,a,b,x[i+3],14,-187363961);
b=md5_gg(b,c,d,a,x[i+8],20,1163531501);
a=md5_gg(a,b,c,d,x[i+13],5,-1444681467);
d=md5_gg(d,a,b,c,x[i+2],9,-51403784);
c=md5_gg(c,d,a,b,x[i+7],14,1735328473);
b=md5_gg(b,c,d,a,x[i+12],20,-1926607734);
a=md5_hh(a,b,c,d,x[i+5],4,-378558);
d=md5_hh(d,a,b,c,x[i+8],11,-2022574463);
c=md5_hh(c,d,a,b,x[i+11],16,1839030562);
b=md5_hh(b,c,d,a,x[i+14],23,-35309556);
a=md5_hh(a,b,c,d,x[i+1],4,-1530992060);
d=md5_hh(d,a,b,c,x[i+4],11,1272893353);
c=md5_hh(c,d,a,b,x[i+7],16,-155497632);
b=md5_hh(b,c,d,a,x[i+10],23,-1094730640);
a=md5_hh(a,b,c,d,x[i+13],4,681279174);
d=md5_hh(d,a,b,c,x[i+0],11,-358537222);
c=md5_hh(c,d,a,b,x[i+3],16,-722521979);
b=md5_hh(b,c,d,a,x[i+6],23,76029189);
a=md5_hh(a,b,c,d,x[i+9],4,-640364487);
d=md5_hh(d,a,b,c,x[i+12],11,-421815835);
c=md5_hh(c,d,a,b,x[i+15],16,530742520);
b=md5_hh(b,c,d,a,x[i+2],23,-995338651);
a=md5_ii(a,b,c,d,x[i+0],6,-198630844);
d=md5_ii(d,a,b,c,x[i+7],10,1126891415);
c=md5_ii(c,d,a,b,x[i+14],15,-1416354905);
b=md5_ii(b,c,d,a,x[i+5],21,-57434055);
a=md5_ii(a,b,c,d,x[i+12],6,1700485571);
d=md5_ii(d,a,b,c,x[i+3],10,-1894986606);
c=md5_ii(c,d,a,b,x[i+10],15,-1051523);
b=md5_ii(b,c,d,a,x[i+1],21,-2054922799);
a=md5_ii(a,b,c,d,x[i+8],6,1873313359);
d=md5_ii(d,a,b,c,x[i+15],10,-30611744);
c=md5_ii(c,d,a,b,x[i+6],15,-1560198380);
b=md5_ii(b,c,d,a,x[i+13],21,1309151649);
a=md5_ii(a,b,c,d,x[i+4],6,-145523070);
d=md5_ii(d,a,b,c,x[i+11],10,-1120210379);
c=md5_ii(c,d,a,b,x[i+2],15,718787259);
b=md5_ii(b,c,d,a,x[i+9],21,-343485551);
a=safe_add(a,olda);
b=safe_add(b,oldb);
c=safe_add(c,oldc);
d=safe_add(d,oldd);
i=i+16;
}
returnArray(a,b,c,d);
}
functionmd5_cmn(q,a,b,x,s,t){
returnsafe_add(bit_rol(safe_add(safe_add(a,q),safe_add(x,t)),s),b);
}
functionmd5_ff(a,b,c,d,x,s,t){
returnmd5_cmn((b&c)((~b)&d),a,b,x,s,t);
}
functionmd5_gg(a,b,c,d,x,s,t){
returnmd5_cmn((b&d)(c&(~d)),a,b,x,s,t);
}
functionmd5_hh(a,b,c,d,x,s,t){
returnmd5_cmn((b^c)^d,a,b,x,s,t);
}
functionmd5_ii(a,b,c,d,x,s,t){
returnmd5_cmn(c^(b(~d)),a,b,x,s,t);
}
functionsafe_add(x,y){
varlsw=(x&65535)+(y&65535);
varmsw=((x>>16)+(y>>16))+(lsw>>16);
return(msw<<16)(lsw&65535);
}
functionbit_rol(num,cnt){
return(num<<cnt)(num>>>(32-cnt));
}
functionstr2binl(str){
varbin=Array();
varmask=(1<<strsize)-1;
vari=0;
while(i<(str.length*strsize)){
bin[i>>5]=(bin[i>>5])((str.charCodeAt(i/strsize)&mask)<<i%32);
i=i+strsize;
}
returnbin;
}
functionbinl2hex(binarray){
if(hexcase){
}else{
}
varhex_tab="0123456789abcdef";
varstr="";
vari=0;
while(i<(binarray.length*4)){
str=str+(hex_tab.charAt(((binarray[i>>2])>>((i%4*8)+4))&15)+hex_tab.charAt(((binarray[i
>>2])>>(i%4*8))&15));
i++;
}
returnstr;
}
varhexcase=0;
varstrsize=8;
//--------以上不用修改,
b=md5("xx");
//xx可设为任意字符
s=b.toUpperCase();
//转换成大写
trace(b);
trace(s);
发点缓动函数 以下是引用片段:
Math.linearTween=function(t,b,c,d){
returnc*t/d+b;
};
//线性运动函数
Math.easeInQuad=function(t,b,c,d){
returnc*(t/=d)*t+b;
};
//二次缓入函数
Math.easeOutQuad=function(t,b,c,d){
return-c*(t/=d)*(t-2)+b;
};
//二次缓出函数
Math.easeINOutQuad=function(t,b,c,d){
if((t/=d/2)<1){
returnc/2*t*t+b;
}
return-c/2*((--t)*(t-2)-1)+b;
};
//二次缓入缓出函数
Math.easeInCubic=function(t,b,c,d){
returnc*Math.pow(t/d,3)+b;
};
//三次缓入函数
Math.easeOutCubic=function(t,b,c,d){
returnc*(Math.pow(t/d-1,3)+1)+b;
};
//三次缓出函数
Math.easeINOutCubic=function(t,b,c,d){
if((t/=d/2)<1){
returnc/2*Math.pow(t,3)+b;
}
returnc/2*(Math.pow(t-2,3)+2)+b;
};
//三次缓入缓出函数
Math.easeInQuart=function(t,b,c,d){
returnc*Math.pow(t/d,4)+b;
};
//四次缓入函数
Math.easeOutQuart=function(t,b,c,d){
return-c*(Math.pow(t/d-1,4)-1)+b;
};
//四次缓出函数
Math.easeINOutQuart=function(t,b,c,d){
if((t/=d/2)<1){
returnc/2*Math.pow(t,4)+b;
}
return-c/2*(Math.pow(t-2,4)-2)+b;
};
//四次缓入缓出函数
Math.easeInQuint=function(t,b,c,d){
returnc*Math.pow(t/d,5)+b;
};
//五次缓入函数
Math.easeOutQuint=function(t,b,c,d){
returnc*(Math.pow(t/d-1,5)+1)+b;
};
//五次缓出函数
Math.easeINOutQuint=function(t,b,c,d){
if((t/=d/2)<1){
returnc/2*Math.pow(t,5)+b;
}
returnc/2*(Math.pow(t-2,5)+2)+b;
};
//五次缓入缓出函数
Math.easeInSine=function(t,b,c,d){
returnc*(1-Math.cos(t/d*(Math.PI/2)))+b;
};
//正弦缓出函数
Math.easeOutSine=function(t,b,c,d){
returnc*Math.sin(t/d*(Math.PI/2))+b;
};
//正弦缓出函数
Math.easeINOutSine=function(t,b,c,d){
returnc/2*(1-Math.cos(Math.PI*t/d))+b;
};
//正弦缓入缓出函数
Math.easeInExpo=function(t,b,c,d){
returnc*Math.pow(2,10*(t/d-1))+b;
};
//指数缓入函数
Math.easeOutExpo=function(t,b,c,d){
returnc*(-Math.pow(2,-10*t/d)+1)+b;
};
//指数缓出函数
Math.easeINOutExpo=function(t,b,c,d){
if((t/=d/2)<1){
returnc/2*Math.pow(2,10*(t-1))+b;
}
returnc/2*(-Math.pow(2,-10*--t)+2)+b;
};
//指数缓入缓出函数
Math.easeInCirc=function(t,b,c,d){
returnc*(1-Math.sqrt(1-(t/=d)*t))+b;
};
//圆形缓入函数
Math.easeOutCirc=function(t,b,c,d){
returnc*Math.sqrt(1-(t=t/d-1)*t)+b;
};
//圆形缓出函数
Math.easeINOutCirc=function(t,b,c,d){
if((t/=d/2)<1){
returnc/2*(1-Math.sqrt(1-t*t))+b;
}
returnc/2*(Math.sqrt(1-(t-=2)*t)+1)+b;
};
//圆形缓入缓出函数
比如要构建一个有很多属性的数组,简单的可以这样做:
以下是引用片段:
vara:Array=newArray();
for(vari=0;i<10;i++){
a[i]=newObject();
a[i].x=10;
a[i].y=10*i;
a[i].name="---";
a[i].id=i;
//随便你给什么属性啊。
}
////先用局部变量存储对象会更好一点。
vara=newArray()
for(vari=0;i<10;i++){
varta=newObject();
ta.x=10;
ta.y=10;
ta.name="n"+i;
a.push(ta);
}
////或者更简便一点的方法:
vara=newArray()
for(vari=0;i<10;i++){
a[i]={x:10,y:10,name:"n"+i}
}
程序控制角色运动
下面这段代码控制 MovieClip mc 从 (50,50) 横向运动到(100,50) 停止,速度为 5 pixel:
以下是引用片段:
mc._x=mc._y=50;
mc.onEnterFrame=function(){
_x+=5;
trace(_x);
if(_x==100){
delete(mc.onEnterFrame);
}
};
精确计时
我们设定了时间为 60 秒,然后通过 setInterval 来定期(每1000milliseconds)触发一个函数 runTimer。
function runTimer 用来计时,当时间到了以后,转去执行 outThere。
function outThere 用来处理时间到了以后的动作,不要忘记 clearInterval(intervalID),停止计时。
以下是引用片段:
vartime:Number=60;
varintervalID:Number;
intervalID=setInterval(runTimer,1000);
functionrunTimer(){
time--;
trace(time);
if(time==0){
outThere();
}
}
functionoutThere(){
//blahblahblah
clearInterval(intervalID);
}
找到目前最小的一个可用的深度 Depth(来自国外)
针对 Flash Player 6 的:
以下是引用片段:
availTopDepth=function(){
varallDepths=[];
for(varzin_root){
if(_root[z]instanceofButton_root[z]instanceofMovieClip_root[z]instanceofTextField){
allDepths.push(_root[z].getDepth());
}
}
if(allDepths.length!=0){
sortAll=function(a,b){if(ab){return1;}else{return0;}};
allDepths.sort(sortAll);
return(parseInt(allDepths[allDepths.length-1])+1);
}
};
trace(_root.availTopDepth());放置一个 MovieClip 在 Stage,再执行这段 Action 就会得到最近的一个可用深度。我们也可以用这个来创建绝对不
会出问题的 MovieClip,比如:
_root.createEmptyMovieClip("mc_name", availTopDepth());
getNextHighestDepth() 以及 getInstanceAtDepth(depth)是 for player 7 的。
鼠标消隐
鼠标消隐之后,右健弹出菜单,鼠标就又出现了,并且一直保留着~
完整的解决方法是:在 左健抬起、右健第二次抬起、回车键抬起的时候再次消隐鼠标。
完整的方法比较复杂,下面是一个简单的解决方法,可以解决绝大多数的问题:
以下是引用片段:
onEnterFrame=function(){
if(Key.isDown(1)Key.isDown(Key.ENTER)){
Mouse.hide();
}
}
我常用的一个加速度移动的代码
以下是引用片段:
//以下代码放到主场景第一帧
stop();
_global.a=5;
//移动加速度,越大越慢
_global.click_x=0;
//用来记录点击鼠标的位置
_global.click_y=0;
_root.onMouseDown=function(){
_global.click_x=_root._xmouse;
_global.click_y=_root._ymouse;
//me是受控mc的instancename
me.onEnterFrame=function(){
if(Math.abs(_global.click_x-me._x)<2&&Math.abs(_global.click_y-me._y)<2){
//如果已经基本移到了鼠标点过的位置就取消这个事件句柄的响应程序
delete(this.onEnterFrame);
return;
}else{
//控制移动
me._x+=(_global.click_x-me._x)/_global.a;
me._y+=(_global.click_y-me._y)/_global.a;
}
};
};
//////以下部分可选
//a_v是个可以输入的文本框,用来输入加速度,即可以自定义速度,方便调试
a_v.onChanged=function(){
if(a_v.text==""Number(a_v.text)>1000Number(a_v.text)<0){
//defaultvalue
a_v.text=5;
}else{
_global.a=Number(a_v.text)?Number(a_v.text):5;
//trace(_global.a);
}
};
随机输出1到100而不从复的语句:
以下是引用片段:
seq=newArray(100);
pArray=newArray(100);
functionmakeRandom(){
for(i=1;i<=100;i++){
seq[i]="A";
}
}
functionmRandom(){
while(true){
n=int(random(100))+1;
if(seq[n]=="A"){
seq[n]="0";
break;
}
}
return(n);
}
functionrArray(){
for(i=1;i<=100;i++){
pArray[i]=mRandom();
trace(pArray[i]);
}
}
stop();
偷梁换柱
我们可以用这样一个技巧,在某些函数外部加一些东西而不需要了解函数的代码~~
比如,假如当前有很多mc 覆盖了onEnterFrame函数,我们可以这样了解那些在_root下的mc 的onEnterFrame函
数是以什么顺序执行的:
代码:
以下是引用片段:
for(variin_root){
if(_root[i].onEnterFrame!=null){//如果这个Object实现了onEnterFrame接口的话
_root[i].oldFunc=_root[i].onEnterFrame;//首先保存原来的onEnterFrame的句柄
_root[i].onEnterFrame=function(){//然后开始替换了~~加上一层壳~~
trace(this+":onEnterFrameCalled.");
this.oldFunc();//我们用保留的句柄调用原来的函数
trace(this+":onEnterFrameReturned.");
}
}
}
如果要取消这些附加的操作:
代码:
以下是引用片段:
for(variin_root){
if(_root[i].oldFunc!=null){//如果发现改过得痕迹
_root[i].onEnterFrame=_root[i].oldFunc;
delete(oldFunc);
}
}
呵呵这些操作的关键在于 Flash里面的引用机制:
所有函数名都是引用,而函数本身是浮在数据的海洋里面的。如果没有任何变量引用他,他就会被回收。如果有,
他就不会被回收。所以有着样一个有趣的事情:delete函数不会删掉任何东西,除了要求删掉的那个名字:(和java
机制相似,而和C不同)
以下是引用片段:
a=function(){trace("Functionacalled");}
b=a;
delete(a);//除了a这个名字被删掉以外,没有任何事情发生
b();
函数通过this得到其调用者的实例。
MovieClipPlus.as
定义了一些简单的MC操作
//画点:由于Flash没有画点,那我们就画短线
以下是引用片段:
MovieClip.prototype.point=OxMovieClipPoint;
functionOxMovieClipPoint(x,y){
this.moveTo(x,y);
this.lineTo(x+1,y);
}
//画矩形,左上角x1,y1 右下角x2,y2, 颜色rgb, 不透明度alpha
以下是引用片段:
MovieClip.prototype.rect=OxMovieClipRect;
functionOxMovieClipRect(x1,y1,x2,y2,rgb,alpha){
this.beginFill(rgb,alpha);
this.moveTo(x1,y1);
this.lineTo(x1,y2);
this.lineTo(x2,y2);
this.lineTo(x2,y1);
this.lineTo(x1,y1);
this.endFill();
}
//画圆:这么bt的冬冬当然不是我写的,作者素JodyKeating
//圆心x,y,半径r
MovieClip.prototype.circle=OxMovieClipCircle;
functionOxMovieClipCircle(x,y,r){
vara=r*0.414213562;
varb=r*0.707106781;
this.moveTo(x+r,y);
this.curveTo(x+r,y-a,x+b,y-b);
this.curveTo(x+a,y-r,x,y-r);
this.curveTo(x-a,y-r,x-b,y-b);
this.curveTo(x-r,y-a,x-r,y);
this.curveTo(x-r,y+a,x-b,y+b);
this.curveTo(x-a,y+r,x,y+r);
this.curveTo(x+a,y+r,x+b,y+b);
this.curveTo(x+r,y+a,x+r,y);
}
两点间的直线移动
以下是引用片段:
vars=15;
_root.onMouseDown=function(){
varoldM_x=_root._xmouse;
varoldM_y=_root._ymouse;
ax=aa._x;
ay=aa._y;
dis=Math.sqrt((oldM_x-ax)*(oldM_x-ax)+(oldM_y-ay)*(oldM_y-ay));
xa=(oldM_x-ax)/dis;
ya=(oldM_y-ay)/dis;
amove();
};
functionamove(){
onEnterFrame=function(){
aa._x+=s*xa;
aa._y+=s*ya;
if(Math.sqrt((aa._x-ax)*(aa._x-ax)+(aa._y-ay)*(aa._y-ay))>dis){
deleteonEnterFrame;
}
};
}
计算两个对象之间/两点之间的距离(注册点)
以下是引用片段:
functiongetDistanceOf(target1,target2,x2,y2){
if(arguments.length==4){
dx=x2-target1;
dy=y2-target2;
}elseif(arguments.length==2){
dx=target2._x-target1._x;
dy=target2._y-target1._y;
}
returnMath.sqrt(dx*dx+dy*dy);
}
//Arguments 对象是一个数组,其中包含作为参数传递给任何函数的值。每次在动作脚本中调用函数时,都会为该函
数自动创建 Arguments 对象。同时还会创建一个局部变量 arguments,使您可引用 arguments 对象。
让播放的MC暂停一段时间
以下是引用片段:
functionpausePlay(sec){
pfunc=function(){
this.play();
clearInterval(this.pint);
}
stop();
this.pint=setInterval(this,"pfunc",sec*1000);
}
//这样调用.sec是暂停的时间,单位是秒.
pausePlay(2);
onHitTest(target),自己写的一个MC事件,当该MC与指定的MC hitTest的时候触发事件.其实也没什么特别的地方,一样也是用setInterval来实现
以下是引用片段:
stop();
MovieClip.prototype.listen=function(target){
if(this.isHiting==undefined){
this.isHiting=this.hitTest(target);
}
if(this.hitTest(target)){
if(this.isHiting==false){
this.broadcastMessage("onHitTest",this,target);//广播事件,给事件传递this和target两个参数
}
this.isHiting=true;
}else{
this.isHiting=false;
}
};//为MovieClip添加域成员listen成员,用于监视当前对象与目标是否碰撞
MovieClip.prototype.watch=function(target){
this.timer=setInterval(this,"listen",50,target);
};//以每50毫秒检测一次的速度来检测是否碰撞
MovieClip.prototype.unWatch=function(){
clearInterval(this.timer);
};//停止对对象的监视
ASBroadcaster.initialize(MovieClip.prototype);//初始化MovieClip原型为事件源
//下面是调用的示例
//假设有两个MovieClip,左边ball,右边wall,让ball不断往wall移动,同时监视wall,一旦击中触发事件onHitTest
ball.onEnterFrame=function(){
this._x+=5;
};//让ball不断往右方移动工
myListener=newObject();
myListener.onHitTest=function(source,target){
trace("The"+source._name+"hit"+target._name+".");
};
ball.addListener(myListener);//创建监听员并注册给ball
ball.watch(wall);//让ball监视wall
MD5 32位码的Flash算法
以下是引用片段:
//-----------
functionmd5(s){
returnbinl2hex(core_md5(str2binl(s),s.length*strsize));
}
functioncore_md5(x,len){
x[len>>5]=(x[len>>5])(128<<len%32);
x[(((len+64)>>>9)<<4)+14]=len;
vara=1732584193;
varb=-271733879;
varc=-1732584194;
vard=271733878;
vari=0;
while(ivarolda=a;
varoldb=b;
varoldc=c;
varoldd=d;
a=md5_ff(a,b,c,d,x[i+0],7,-680876936);
d=md5_ff(d,a,b,c,x[i+1],12,-389564586);
c=md5_ff(c,d,a,b,x[i+2],17,606105819);
b=md5_ff(b,c,d,a,x[i+3],22,-1044525330);
a=md5_ff(a,b,c,d,x[i+4],7,-176418897);
d=md5_ff(d,a,b,c,x[i+5],12,1200080426);
c=md5_ff(c,d,a,b,x[i+6],17,-1473231341);
b=md5_ff(b,c,d,a,x[i+7],22,-45705983);
a=md5_ff(a,b,c,d,x[i+8],7,1770035416);
d=md5_ff(d,a,b,c,x[i+9],12,-1958414417);
c=md5_ff(c,d,a,b,x[i+10],17,-42063);
b=md5_ff(b,c,d,a,x[i+11],22,-1990404162);
a=md5_ff(a,b,c,d,x[i+12],7,1804603682);
d=md5_ff(d,a,b,c,x[i+13],12,-40341101);
c=md5_ff(c,d,a,b,x[i+14],17,-1502002290);
b=md5_ff(b,c,d,a,x[i+15],22,1236535329);
a=md5_gg(a,b,c,d,x[i+1],5,-165796510);
d=md5_gg(d,a,b,c,x[i+6],9,-1069501632);
c=md5_gg(c,d,a,b,x[i+11],14,643717713);
b=md5_gg(b,c,d,a,x[i+0],20,-373897302);
a=md5_gg(a,b,c,d,x[i+5],5,-701558691);
d=md5_gg(d,a,b,c,x[i+10],9,38016083);
c=md5_gg(c,d,a,b,x[i+15],14,-660478335);
b=md5_gg(b,c,d,a,x[i+4],20,-405537848);
a=md5_gg(a,b,c,d,x[i+9],5,568446438);
d=md5_gg(d,a,b,c,x[i+14],9,-1019803690);
c=md5_gg(c,d,a,b,x[i+3],14,-187363961);
b=md5_gg(b,c,d,a,x[i+8],20,1163531501);
a=md5_gg(a,b,c,d,x[i+13],5,-1444681467);
d=md5_gg(d,a,b,c,x[i+2],9,-51403784);
c=md5_gg(c,d,a,b,x[i+7],14,1735328473);
b=md5_gg(b,c,d,a,x[i+12],20,-1926607734);
a=md5_hh(a,b,c,d,x[i+5],4,-378558);
d=md5_hh(d,a,b,c,x[i+8],11,-2022574463);
c=md5_hh(c,d,a,b,x[i+11],16,1839030562);
b=md5_hh(b,c,d,a,x[i+14],23,-35309556);
a=md5_hh(a,b,c,d,x[i+1],4,-1530992060);
d=md5_hh(d,a,b,c,x[i+4],11,1272893353);
c=md5_hh(c,d,a,b,x[i+7],16,-155497632);
b=md5_hh(b,c,d,a,x[i+10],23,-1094730640);
a=md5_hh(a,b,c,d,x[i+13],4,681279174);
d=md5_hh(d,a,b,c,x[i+0],11,-358537222);
c=md5_hh(c,d,a,b,x[i+3],16,-722521979);
b=md5_hh(b,c,d,a,x[i+6],23,76029189);
a=md5_hh(a,b,c,d,x[i+9],4,-640364487);
d=md5_hh(d,a,b,c,x[i+12],11,-421815835);
c=md5_hh(c,d,a,b,x[i+15],16,530742520);
b=md5_hh(b,c,d,a,x[i+2],23,-995338651);
a=md5_ii(a,b,c,d,x[i+0],6,-198630844);
d=md5_ii(d,a,b,c,x[i+7],10,1126891415);
c=md5_ii(c,d,a,b,x[i+14],15,-1416354905);
b=md5_ii(b,c,d,a,x[i+5],21,-57434055);
a=md5_ii(a,b,c,d,x[i+12],6,1700485571);
d=md5_ii(d,a,b,c,x[i+3],10,-1894986606);
c=md5_ii(c,d,a,b,x[i+10],15,-1051523);
b=md5_ii(b,c,d,a,x[i+1],21,-2054922799);
a=md5_ii(a,b,c,d,x[i+8],6,1873313359);
d=md5_ii(d,a,b,c,x[i+15],10,-30611744);
c=md5_ii(c,d,a,b,x[i+6],15,-1560198380);
b=md5_ii(b,c,d,a,x[i+13],21,1309151649);
a=md5_ii(a,b,c,d,x[i+4],6,-145523070);
d=md5_ii(d,a,b,c,x[i+11],10,-1120210379);
c=md5_ii(c,d,a,b,x[i+2],15,718787259);
b=md5_ii(b,c,d,a,x[i+9],21,-343485551);
a=safe_add(a,olda);
b=safe_add(b,oldb);
c=safe_add(c,oldc);
d=safe_add(d,oldd);
i=i+16;
}
returnArray(a,b,c,d);
}
functionmd5_cmn(q,a,b,x,s,t){
returnsafe_add(bit_rol(safe_add(safe_add(a,q),safe_add(x,t)),s),b);
}
functionmd5_ff(a,b,c,d,x,s,t){
returnmd5_cmn((b&c)((~b)&d),a,b,x,s,t);
}
functionmd5_gg(a,b,c,d,x,s,t){
returnmd5_cmn((b&d)(c&(~d)),a,b,x,s,t);
}
functionmd5_hh(a,b,c,d,x,s,t){
returnmd5_cmn((b^c)^d,a,b,x,s,t);
}
functionmd5_ii(a,b,c,d,x,s,t){
returnmd5_cmn(c^(b(~d)),a,b,x,s,t);
}
functionsafe_add(x,y){
varlsw=(x&65535)+(y&65535);
varmsw=((x>>16)+(y>>16))+(lsw>>16);
return(msw<<16)(lsw&65535);
}
functionbit_rol(num,cnt){
return(num<<cnt)(num>>>(32-cnt));
}
functionstr2binl(str){
varbin=Array();
varmask=(1<<strsize)-1;
vari=0;
while(i<(str.length*strsize)){
bin[i>>5]=(bin[i>>5])((str.charCodeAt(i/strsize)&mask)<<i%32);
i=i+strsize;
}
returnbin;
}
functionbinl2hex(binarray){
if(hexcase){
}else{
}
varhex_tab="0123456789abcdef";
varstr="";
vari=0;
while(i<(binarray.length*4)){
str=str+(hex_tab.charAt(((binarray[i>>2])>>((i%4*8)+4))&15)+hex_tab.charAt(((binarray[i
>>2])>>(i%4*8))&15));
i++;
}
returnstr;
}
varhexcase=0;
varstrsize=8;
//--------以上不用修改,
b=md5("xx");
//xx可设为任意字符
s=b.toUpperCase();
//转换成大写
trace(b);
trace(s);
发点缓动函数 以下是引用片段:
Math.linearTween=function(t,b,c,d){
returnc*t/d+b;
};
//线性运动函数
Math.easeInQuad=function(t,b,c,d){
returnc*(t/=d)*t+b;
};
//二次缓入函数
Math.easeOutQuad=function(t,b,c,d){
return-c*(t/=d)*(t-2)+b;
};
//二次缓出函数
Math.easeINOutQuad=function(t,b,c,d){
if((t/=d/2)<1){
returnc/2*t*t+b;
}
return-c/2*((--t)*(t-2)-1)+b;
};
//二次缓入缓出函数
Math.easeInCubic=function(t,b,c,d){
returnc*Math.pow(t/d,3)+b;
};
//三次缓入函数
Math.easeOutCubic=function(t,b,c,d){
returnc*(Math.pow(t/d-1,3)+1)+b;
};
//三次缓出函数
Math.easeINOutCubic=function(t,b,c,d){
if((t/=d/2)<1){
returnc/2*Math.pow(t,3)+b;
}
returnc/2*(Math.pow(t-2,3)+2)+b;
};
//三次缓入缓出函数
Math.easeInQuart=function(t,b,c,d){
returnc*Math.pow(t/d,4)+b;
};
//四次缓入函数
Math.easeOutQuart=function(t,b,c,d){
return-c*(Math.pow(t/d-1,4)-1)+b;
};
//四次缓出函数
Math.easeINOutQuart=function(t,b,c,d){
if((t/=d/2)<1){
returnc/2*Math.pow(t,4)+b;
}
return-c/2*(Math.pow(t-2,4)-2)+b;
};
//四次缓入缓出函数
Math.easeInQuint=function(t,b,c,d){
returnc*Math.pow(t/d,5)+b;
};
//五次缓入函数
Math.easeOutQuint=function(t,b,c,d){
returnc*(Math.pow(t/d-1,5)+1)+b;
};
//五次缓出函数
Math.easeINOutQuint=function(t,b,c,d){
if((t/=d/2)<1){
returnc/2*Math.pow(t,5)+b;
}
returnc/2*(Math.pow(t-2,5)+2)+b;
};
//五次缓入缓出函数
Math.easeInSine=function(t,b,c,d){
returnc*(1-Math.cos(t/d*(Math.PI/2)))+b;
};
//正弦缓出函数
Math.easeOutSine=function(t,b,c,d){
returnc*Math.sin(t/d*(Math.PI/2))+b;
};
//正弦缓出函数
Math.easeINOutSine=function(t,b,c,d){
returnc/2*(1-Math.cos(Math.PI*t/d))+b;
};
//正弦缓入缓出函数
Math.easeInExpo=function(t,b,c,d){
returnc*Math.pow(2,10*(t/d-1))+b;
};
//指数缓入函数
Math.easeOutExpo=function(t,b,c,d){
returnc*(-Math.pow(2,-10*t/d)+1)+b;
};
//指数缓出函数
Math.easeINOutExpo=function(t,b,c,d){
if((t/=d/2)<1){
returnc/2*Math.pow(2,10*(t-1))+b;
}
returnc/2*(-Math.pow(2,-10*--t)+2)+b;
};
//指数缓入缓出函数
Math.easeInCirc=function(t,b,c,d){
returnc*(1-Math.sqrt(1-(t/=d)*t))+b;
};
//圆形缓入函数
Math.easeOutCirc=function(t,b,c,d){
returnc*Math.sqrt(1-(t=t/d-1)*t)+b;
};
//圆形缓出函数
Math.easeINOutCirc=function(t,b,c,d){
if((t/=d/2)<1){
returnc/2*(1-Math.sqrt(1-t*t))+b;
}
returnc/2*(Math.sqrt(1-(t-=2)*t)+1)+b;
};
//圆形缓入缓出函数
发表评论
-
pv3d学习资料
2009-08-13 14:54 1870官方网站 http://www.papervision3d.c ... -
Flash客户端间的交互
2009-08-13 14:35 3067Flash有着天生非凡的动画和交互能力, 在RIA (富互联网 ... -
ItemRenderer的用法
2009-01-14 13:59 1812项目渲染器(ItemRenderer ... -
Flex3组件拖放教程
2008-08-27 16:27 2494关于组件拖放 可视化的开发环境就是要允许用户能够在屏幕中通过鼠 ... -
基于MVC的Flex framework比较
2008-08-13 10:13 1592关键字: mvc framework 原文出处:[url]h ... -
色彩模式(RGB、CMYK、HSB、Lab、Duotone等)
2008-08-05 13:10 3790色彩是一门很深的学问,每种色彩都有自己的特点和原理。设计师要在 ... -
colormatrixFilter
2008-07-31 12:38 1137http://hi.baidu.com/fmz1206/blo ... -
使用BlazeDS实现Java和Flex通信
2008-06-16 09:21 1055http://blog.chinaunix.net/u/216 ... -
amf是什么东东
2008-06-12 16:59 1353今天我们开发的 J2EE 网 ... -
编写时间轴代码代码规范
2008-06-06 15:34 1166For any major project, you co ... -
关于ApplicationDomain的一些理解
2008-06-05 17:07 2866应用程序域: 允许跨域加载swf后,还可能出现加载的swf中的 ... -
Flash OBJECT和EMBED标签详解
2008-06-05 17:03 31120Flash OBJECT和EMBED标签 一 ... -
flex的一些项目
2008-06-03 14:48 1325一些Flex开源项目的整理 Adobe APIs 主要包 ... -
flex模式(转载)
2008-06-03 14:28 1532[url] http://www.awflasher.com/ ... -
programming Flex2 学习笔记-第5章-框架基础.txt (转载的,来自)
2008-05-29 10:40 1269来自http://blog.chinaunix.net ... -
给DataGrid设置背景色(汇总)
2008-05-27 16:49 5043DataGrid颜色专题 在Flex运用中经常提到的有关 ... -
通过ApplicationDomain类获得被加载应用程序域
2008-05-27 13:32 1641首先先回顾一下FLASH的OO ... -
一些Flex / Flash开源项目
2008-05-09 14:26 1547Adobe APIs 主要包含corelib, ... -
这几个网站是我经常去的,做开发时可以参考
2008-05-09 14:14 1403http://www.flashas.net/ http:// ... -
108种Flash常见问题解答(收藏别的:站名:http://www.flashas.net/)
2008-05-09 14:09 24271. 论坛上常说的MC、FS、 ...
相关推荐
在"html 源代码大放送"这个主题中,我们可以深入探讨HTML的各个方面,包括基本结构、元素、属性以及如何利用HTML创建交互式网页。 一、HTML的基本结构 一个基本的HTML文件由三部分组成:文档声明、头部和主体。...
在“VC++源代码大放送”这个主题中,我们主要关注的是Microsoft Visual C++(简称VC++)的编程实践。VC++是一款强大的Windows平台下的C++开发工具,由微软公司开发,它集成了编译器、调试器以及其他辅助开发功能,是...
群发源代码大放送了 硬盘代码太过了,以前做的老东西想删除了,就上传网上共享吧。 原创,完全开源,我N年前做的东西了, 使用了Castle.ActiveRecord +Spring.NET+ log4net+CSV+NHibernate+ SmartThreadPool+...
标题中的“dll bpl delphi 框架 源代码 大放送”表明这是一个与Delphi编程语言相关的资源包,重点在于dll(动态链接库)、bpl(Delphi的包文件)以及框架的源代码。Delphi是Object Pascal的一种现代实现,广泛用于...
本资源名为"TP保护大放送MASM驱动最新源代码",这是一份专注于TP保护技术的MASM(Microsoft Macro Assembler)编写的驱动程序源代码。MASM是微软公司提供的一个宏汇编器,用于编写基于x86架构的低级程序,如系统驱动...
群发源代码大放送了 硬盘代码太过了,以前做的老东西想删除了,就上传网上共享吧。 原创,完全开源,我N年前做的东西了, 使用了Castle.ActiveRecord +Spring.NET+ log4net+CSV+NHibernate+ SmartThreadPool+...
7巧用Javascript代码来限制文本的字节数 8用JavaScript创建“闪动”标题栏 9轻松实现打字机效果 10星星跟随鼠标 11地震效果的浏览器 12表格单元格背景色鼠标响应 13用JavaScript实现页面百叶窗效果 14用JS的方法使用...
地震效果的浏览器,此代码可以让你的浏览器有地震般的效果
群发源代码大放送了 硬盘代码太过了,以前做的老东西想删除了,就上传网上共享吧。 原创,完全开源,我N年前做的东西了, 使用了Castle.ActiveRecord +Spring.NET+ log4net+CSV+NHibernate+ SmartThreadPool+...
群发源代码大放送了 硬盘代码太过了,以前做的老东西想删除了,就上传网上共享吧。 原创,完全开源,我N年前做的东西了, 使用了Castle.ActiveRecord +Spring.NET+ log4net+CSV+NHibernate+ SmartThreadPool+...
群发源代码大放送了 硬盘代码太过了,以前做的老东西想删除了,就上传网上共享吧。 原创,完全开源,我N年前做的东西了, 使用了Castle.ActiveRecord +Spring.NET+ log4net+CSV+NHibernate+ SmartThreadPool+...
群发源代码大放送了之-55BBS 硬盘代码太过了,以前做的老东西想删除了,就上传网上共享吧。 原创,完全开源,我N年前做的东西了, 使用了Castle.ActiveRecord +Spring.NET+ log4net+CSV+NHibernate+ ...
资源名称:jQuery常用经典技巧大放送资源截图: 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。
【标题】"双语企业asp源代码"是一个用于构建具备中英文双语功能的企业网站的源码包。ASP,全称Active Server Pages,是微软开发的一种服务器端脚本语言,常用于动态网页的创建。这个源代码包包含了构建一个完整的...
标题“VC6图片放大缩小源代码”涉及到的是在Visual C++ 6.0(简称VC6)环境下,通过编程实现图像的放大与缩小功能。这是一个常见的图像处理任务,尤其在图形用户界面(GUI)开发中非常实用。在这个项目中,开发者...
Flash动画网站精彩放送,告诉你不知道的flash网站。
### jQuery常用技巧大放送:深入解析与应用 在现代Web开发中,jQuery因其轻量级、易用性以及强大的功能而备受开发者青睐。本文将详细介绍jQuery中的几个关键技巧,帮助开发者更高效地操作DOM元素,提升网页动态效果...