还在整理中。。。大概要断断续续花几天
1月25日更新
都是以前做flash时记的些小tips,毕竟是从菜菜菜鸟时期就开始偶尔记点东西,有些内容可能你会觉得很小白,可能这些东西你我都知道,但我的目的就是让有需要的人可以搜索到这里
因为记的东西时间比较早,有些代码可能只在老版本里用了,都忘了,对不对不保证。反正,就随便看看。。若有错请指出,大部分内容是我自己写的,有些是从网上记的
这些tips对应flash CS3或CS4或CS5的as3 ,如果是as2的 会特别标注的
as3基础的小tips
array[array.length] = ** 可代替push
下面的,好像是储存到本机的格式
shareobject.data["分数"] = 90
shareobject.data.分数 = 90
xml.aa.(@bb = "rr").@cc
筛选符合条件的XML节点,然后读取它的cc属性
startDrag与enterframe会冲突,mousemove也与enterframe会冲突
flash放网页上若提示版本过高:
解决:1.导出时降低版本
2.插入网页用"英文.swf" swf名字是英文字母
帧频和timer都不精确,要用gettimer或data获取系统时间
数组要保存同一类型,用数组原标签
[ArrayElementType("String")]
public var arrayofstring:Array
trace(变量),指时间轴的变量
trace(this.变量),指调用trace的对象的内部变量
不用var定义的函数仍指时间轴变量
12FPS的swf加载24FPS的swf,被加载的swf仍以12FPS运行
flash文本无法显示中文:
1.usecode = true
2.外部文本编码选uncoide
3.文本框“嵌入”把要的中文导入即可
类里面接受fla内变量:
如fla内定义_globel.aa = 1
类内可用classaa = _globel.aa来接收
若mc下有sonmc,直接写tween = (sonmc,"x",……),不用写成mc.sonmc
如果是addchild(xx),对应setindex(xx,getchildindex -1),addchild是加在maintimeline上。如果是stage.addchild才是加在stage上
(parent asmovieclip).gotoandplay(2)或movieclip(parent).gotoandplay(2)这种格式,调用父级时间轴
因为parent层级比mc高,所以可将parent当mc,但mc不能当parent
e.currenttarget是发送者对象,就是被点击到的对象,无论有无被监听
e.target是目标对象,就是mc.addeventlistener的mc
控制外部加载的swf文件:
var ldr:loader
ldr.contentloaderinfo.addeventlistener(complete,oncomplete)(伪代码,监听ldr.contentloaderinfo加载完成事件)
function oncomplete(e){
var mc:movieclip = ldr.content as movieclip
mc.gotoandplay(2)
}
在as3中,child.swf即便被加载到main.swf中,child.swf中的root依旧指向child.swf,这和as2不一样
flash cs4中,alpha遮罩效果里,2个对象一定要勾选“缓存为位图”
有x个元件,每行排n个,不用双for循环的排列小技巧:(你可能知道,但我还是写上来)
for(var i = 0;i
var mc:movieclip = new movieclip();
mc.x = 起始点.x + 元件x轴向间距 * (i % n);
mc.y = 起始点.y + 元件y轴向间距 * int(i / n);
addchild(mc);
}
A.swf外部加载B.swf,并把A.swf的东西传入B.swf中:
A.swf的loader.contentloadinfocomplete事件中function(e){
obj = e.target.content;
}
在B.swf中的第一帧(必须在第一帧)定义一个方法
function getmain(x:object){
xmlB = x.xmlA;
arrayB = x.arrayA;
}
在A.swf中,obj.getmain(this);这样调用即可
获取外部传入的位图:
var bitmapdata:bitmapdata =bitmap(bmploader.content).bitmapdata;
array.length
xml.children().length()
注意这两个的length
加载外部swf时,若addchild(loader)写在complete完成事件函数的外边,则被加载的swf可以只有一帧。若写在complete事件函数内,即等加载完成才add,则被加载swf必须为2帧或以上
(事件太长了,其中原理、理由,都不记得了,也没写下来)
若tweener报错:参数为2,只get1 之类的错误,确保传参数量正确,若还是出错,重装下tweener类即可
1180:调用的方法addframscript可能未定义,把文档类extends sprite改称extendsmovieclip,因为addframscript是movieclip才有的方法
多点触控相关事件:
flash.ui.multitouch
genstureevent.pressandtapgestureevent
touchevent.transformgestureevent
若movie1.flv在flash中播放到一半卡住了,换个其他flv视频看了如果不卡,那可能是movie1.flv本身视频编码有问题,重新导一下就好了
若ns加video时开始play卡住,调一下播放头seek(1)即可
在时间轴上直接做遮罩,火狐下无法显示被遮罩的动态文本,只要取消时间轴遮罩,改用mc.mask =遮罩mc;即可
--------------------------------------------------------------------
动态获取flash中各种地方的元件:
as3中的“eval”,获取舞台上的实例名:
var mc:movieclip = this.getchildbyname("img"+5)
获取库中的类:
var class:Class = getDefinitionByName("某张位图在库中的名字") asClass;
var bmp:bitmapdata = new class(0,0) as bitmapdata;
动态创建库中的类:
for(var i = 0;i<10;i++){
this["mc"+i] = new movieclip();
}
在元件中获取主时间轴上的"mc"元件:root["mc"].属性 = ****
如A.swf加载B.swf,B中某mc内要调用A主时间轴上的代码并传值:
root.parent.root("函数名")(参数1,参数2)
如A中有mc,mc中有mc2,A还有clip与mc同级,clip中要控制mc2的属性
root["mc"]["mc2"].属性 = ****
若要用mc2的函数
root["mc"]["mc2"]["函数名"](参数1,参数2)
loader.content外部东西被加载后在flash中的类型:
载入swf,类型moviecip
载入位图,类型bitmap,而不是data
--------------------------------------------------------------------
as3图像、效果之类:
杂点perlinnoise和displayfilter配合使用:
1. 弄一张纯色图片,对其perlinnoise处理
2. 将纯色图用作位图的样板,加入filter,并处理位图
3. 若要动,则不时变换offsets:array中两个点的位置
使用置换图滤镜displaymentmapfilter时,参考图A和呈现效果的图B的顺序:
var filter = newdisplaymentmapfilter(图A,,,后面省略);(scaleX=30,scaleY=30,建议这样设置,数字太小会没效果)
图A.applyfilter(图B,,,,filter);
var bmp = new bitmap(图A);
以图A为colorchannel样本,在图B上呈现效果
RGB = "0x"+bmp.getpixel(x,y).toString(16);ps中,若文字被上下顶格裁切存为png,则在flash中文字底部会有模糊痕迹,只要切图别顶格切就能解决了
只需一个mc就能实现切换图:
class = getDefi...ByName(库中的位图名) as Class;
bmp.bitmapData = new class(0,0) as bitmapdata;
tweener的类库里有colorshortcuts这东西,写一下参数值的区域:
_color:0x0000ff
_brightness:0 - 2.55
_tintbrightness:-2.55 - 2.55(黑 - 白)渐变色彩亮度
_colortransform:分成4个通道8个参数,进行缓动渐变
_contrast:-1 - 1
_hue:-180 - 180
_saturation:饱和度,0纯灰,1正常,2高饱和
_dumbsaturation:不考虑对发光度影响,对RGB三个通道平均分配饱和度调整方式
--------------------------------------------------------------------
文本textfiled的那些:
1. 动态文本的字无法消除锯齿,貌似只能通过转成图优化(现在的flash版本不知如何了)
2. as3代码生成的动态文本在遮罩下无法显示,只能通过转成bitmap,再遮罩
3. 动态文本变色直接用textcolor属性,别用colortransform
4. 动态控制stage上文本显示区域:(忘了这是为了做什么功能要这么搞的。。)
1.stage上放个textfield:tf0,让其width=100,并设字体样式,height无视
2.代码生成一个新的textfield:tf1,通过外部调进的文本先放到这个tf1中,并设置成和stage上的那个tf0一样的属性
3.代码生成的tf1,设置换行什么的,让所有蚊子完整显示在tf上,但不addchild到stage上
4.当tf1中有文字后,获取tf1.height,让stage上的tf0的height等于tf1的height就能控制放在stage上的tf的height
5. text.width = text.textwidth可设置text框和文本一样宽,不会长出一截
6. 滚动文本:text2.x = text1.x + text1.textwidth + 20,通过if(text1.x <text1.textwidth)判断text1是否出界,要置到text2后面无需嵌入字体的方法:如果特殊字体的文字不多,则直接在stage外围放一个动态文本,设置需要的字体,把所有文字写入这个动态文本
settextformat是方法,用于文本赋值后。defaulttextformat是属性,用于文本赋值
--------------------------------------------------------------------
flash与js通信、webview
若使用externalinterface.addCallback()注册函数名为“pan”,而js无法调用该方法,猜测可能因与JSDOM对象的方法重名了
var pdf.File =File.applicationDirec..(单词太长省略).resolvePath("assets/index.html")
stagewebview.loadURL(pdf.nativePath)
显示本地网页
webstageview网页缩放
(或content="width=device-width,initcal-scale=1.0,user-scalable-yes")
自动设置缩放倍数和是否允许缩放
swf放网页上时,flash内调用的文件、xml、图像之类,都要以swf所在html的路径为参照,这个切记!上家公司有个ruby小日本从来就记不住这点。。无语
当swf用于网页上,且被其他swf调用时,若要设置原件x y,尽量直接给定数值,不要用mc.x =stage.stageheight之类(stage.stageheight拼错了,反正,意思就这个)
as3的fla无法复制as2的fla里的元件
flash截取url后面的值:(彻底忘了,不记得了)
如js中,var param = window.location.search
例,url为.....html?a=1&b=2
flash中用:
var recp = externalinterface.call("js","")即可获取
用IE低版本播放flash loading失效:
把web标准代码改成旧版IE代码html
在JS中调用时,为flash所在object设置id,并设置allowscriptaccess为“always”
firefox中,wmode = "window" 时,mousewheel可用
当wmode = "opaque"时,flash不会挡住菜单栏
transparent应该是透明
1009/1010 at function/()匿名函数
如setTimeout(function(){}),这个function就是匿名函数
--------------------------------------------------------------------
AIR
AIR文件储存路径:
1. file.desktopdirectory.resolvepath("****")
C:documents and settings当前用户名桌面
2. **.applicationstoragedirectory.****
C:documents and settings当前用户名application data应用程序项目名localstore
3. **.documentsdirectory.***
C:documents and settings当前用户名my documents
没windows下排任务栏:
1. stage.nativewindow.close()
2. window = new nativewindow
3. window.activte()
--------------------------------------------------------------------
PV3D和其他flash3D(我几乎不做3D的项目,所以新的flash3D技术基本不懂)
PV3D加载.3ds模型,纹理显示不了,要用jpg贴图,不能用png
--------------------------------------------------------------------
flash手机端
安卓再GPS可用且用户也开启的情况下调不到GPS值,可能是室内信号问题,到室外就可以了
starling开发,direct嵌入网页得把wmode改成direct
flash IOS项目的根目录下如果存在名为resources的目录,在APP正式提交时,会出现关于证书无效的错误
--------------------------------------------------------------------
flex
用百分比布局组件,加了resize事件,以适应浏览器大小,慢慢拖动浏览器效果是正常的,快速or双击浏览器放大的时候,组件大小不会变,反应不过来
解决:用callLater延迟下就好了
adt打包时,若error 301:Application descript missing/cannot beopened
检查xml文件编码格式是否是UTF-8
flex用iFrame嵌套Html,iframe.source = 链接地址
flex中
代码中用this["img"+3]可以灵活调用,不是getChildByName
只能用id来命名,不能用name属性
不管import的mxml放在啥位置,外部类包始终放在项目src目录下,与内部mxml位置无关
--------------------------------------------------------------------
其他
firework压缩png时,用“图像预览”导出
flash音效太差的话,在“发布设置”里选音频选项mp3 128kpbs 立体声
AI的那个黑框在文档设置中改大小,“文件”-“文档设置”
GIF去掉一圈圈颜色的方法,在ps中保存,在“仿色”中选“扩散”
AfterEffect相关(我用的是CS3那个时代的AE,好久不用这玩意了)
1.输出avi时,质量要选最高
2.不能导入swf,在flash中输出为avi再导入
3.每次都要自己调整锚点对称,否则缩放时中心点不对要影响元件缩放的对称性
4.文字间距(是一个个字符)不能用缩放控制,要用钢笔绘制一条黄线,再在“文本”-“路径选择”-打开“平衡排列”-调整“开始,结束留空”
5.那种文字上一束束光扫过,用的是“放射模糊”特效
6.那种颜色由亮稠化为原图,用“曝光”特效
7.像silenthill那样老电影回忆般的颗粒抖动的画面,用“漫射”
8.用wave world,要预览水波,在“模拟”-“预览(秒)”设成>0的数
9.“文本”-“动画”添加的是对文本中单个字的处理,而“变换”添加的是对整行文字块的处理
cool edit单声道边双声道,选单声道混缩,然后插入到多轨
--------------------------------------------------------------------
as2.0
_root指向根影片,若a.swf加载b.swf,那b.swf中的_root就是指向a.swf了
eval用法,调元件内的东西的格式:eval_r("mc.label"+变量).text = ……
直接把路径写在双引号内
文本转bitmap不透明解决方法:
var xx:bmp = new bmp(xx,xx,true,0x00ff0000)
true为透明度,0x00的00为透明度
完后把原先文本的_visible给false掉
textformat要在文本中有字后再set才有用