Flash AS3教程:疑难杂症汇总

互联网   发布时间:2008-10-06 01:25:15   作者:佚名   我要评论
前面学习了Flash AS3教程:ImageLoader类,但是有时我们在做项目时可能会遇到这样或那样的问题,这篇里给大家专门提供些解决办法。 在做项目的时候,总会碰到很多,奇奇怪怪的问题,看了这篇文章相信会有些帮助,虽然不是很全面,但只要是我碰到过的问题,就分享给大家!
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

前面学习了Flash AS3教程:ImageLoader类,但是有时我们在做项目时可能会遇到这样或那样的问题,这篇里给大家专门提供些解决办法。
在做项目的时候,总会碰到很多,奇奇怪怪的问题,看了这篇文章相信会有些帮助,虽然不是很全面,但只要是我碰到过的问题,就分享给大家!但是也怕有些想不起了。。尽力额、、

==================== 气 死 你 的 分 割 线 ====================

1、数组的排序问题:Array.sort()方法
大家都经常用排序,一般都是字符串排序什么的,都不会发现什么的,现在来看一个有趣的现象

CODE:
var a:Array = [7,3,32,64,96,13,42];
a.sort();
trace(a);
//输出:13,3,32,42,64,7,96
奇怪了,为什么排序出来的东西是个这样的。。
分析为什么:仔细看一下,会发现每个数字的第一个数字,的确是按排序放好的:1,3,3,4,6,7,9
为什么会这样呢?仔细来看看Array的官方文档

QUOTE:

默认情况下,Array。sort() 按以下方式进行排序:
1、排序区分大小写(Z 优先于 a)。
2、按升序排序(a 优先于 b)。
3、修改该数组以反映排序顺序;在排序后的数组中不按任何特定顺序连续放置具有相同排序字段的多个元素。
4、元素无论属于何种数据类型,都作为字符串进行排序,所以 100 在 99 之前,这是因为 "1" 的字符串值小于 "9" 的字符串值。
不难发现,第4条说明了,默认是以字符串进行排序,而不是以字符串排序,难怪会出现这样的结果额
那么应该如何排序才会出现我们要的答案呢?

CODE:
var a:Array = [7,3,32,64,96,13,42];
a.sort(Array.NUMERIC);
trace(a);
//输出:3,7,13,32,42,64,96
加的这个参数是什么东西额。。仔细看看帮助文档吧。。
然后Array提供了几个常量分别是:

QUOTE:

CASEINSENSITIVE : uint = 1 [static] 指定 Array 类排序方法为不区分大小写的排序。
DESCENDING : uint = 2 [static] 指定 Array 类排序方法为降序排序。
NUMERIC : uint = 16 [static] 指定 Array 类排序方法为数值(而不是字符串)排序。
RETURNINDEXEDARRAY : uint = 8 [static] 指定排序返回的数组包含数组索引。
UNIQUESORT : uint = 4 [static] 指定 Array 类排序方法的唯一排序要求。
==================== 气 死 你 的 分 割 线 ====================

2、Loader.load加载图片,显示不出来
这个问题可以一笔带过额。。很多人都碰到过,其实是因为你没有加checkPolicyFile
如果确定图片跨域了,那么加载图片的时候,应该这样写

CODE:
var loader:Loader = new Loader;
var request:URLRequest= new URLRequest(url);
var lc:LoaderContext = new LoaderContext(true);
loader.load(request, lc):
加的这个new LoaderContext(true),可以去参考官方帮助文档
这个构造函数可以传三个参数
第一参数:指定是否去加载跨域文件
第二参数:指定要使用的应用程序域
第三参数:指定要使用的安全沙箱

==================== 气 死 你 的 分 割 线 ====================

3、flash嵌入代码
经常出问题,比如打开窗口会被阻止,flash游戏做方向键的,屏幕会跟着动等类似问题
我也经常碰到这样的问题,花时间研究了一下
注意第一个,嵌入代码中有一个使flash透明的参数,不要把它设置成透明,那么很多问题都可以解决,不信的话,大家可以试试,还有很多不常用的属性,有些可以阻止flash某些方法的使用,很烦人的,特别是某些博客,公开平台等,传flash之后,他在嵌入代码中会加一些这样的属性,那么flash有很多事情都不能做
另外还有一个就是,如果是从flash中弹出新窗口,设置成不透明也会被阻止,但是在当前窗口打开,就不会
这是我在做项目的时候,碰到的问题,以及我的解决方法,如果有高人有更好的办法,一定要告诉我额。。。

==================== 气 死 你 的 分 割 线 ====================

4、mask遮罩层
mask这个属性相信很多人看过帮助文档之后,不会仔细去看,特别是熟悉AS2的setMask的人
当然包括我自己也放过这样的错误,因此在此提起,希望各位新手在学习的时候,把帮助文档看清楚

QUOTE:

mask 属性
mask:DisplayObject[read-write]
语言版本 :ActionScript 3.0
Player 版本 :Flash Player 9
调用显示对象被指定的 mask 对象遮罩。 要确保当舞台缩放时蒙版仍然有效,mask 显示对象必须处于显示列表的活动部分。 但不绘制 mask 对象本身。 将 mask 设置为 null 可删除蒙版。
要能够缩放遮罩对象,它必须在显示列表中。 要能够拖动蒙版 Sprite 对象(通过调用其 startDrag() 方法),它必须在显示列表中。 要为基于 sprite 正在调度的 mouseDown 事件调用 startDrag() 方法,请将 sprite 的 buttonMode 属性设置为 true。
根据帮助文档的说法,如果要缩放遮罩层,就必须把遮罩层放在相应的显示列表中,也就是addChild(mask)
比如:我现在使用的是
stage.scaleMode = StageScaleMode.SHOW_ALL;
如果说你的遮罩层没有addChild那么,在缩放窗口的时候,mask是不会改变宽高;反之加入了显示列表,就会跟着窗口一起缩放
mask的拖拽和点击等事件也是如此!
综上所述:设置遮罩层最佳做法是放到显示列表,当然不排除有特别作用的

另外,你把mask的属性清空,本来被做为遮罩层的,就可以看的到了,否则是看不到遮罩层的

==================== 气 死 你 的 分 割 线 ====================

5、莫名其妙的mc
你使用Loader加载进来的mc,如果里面是动画,或者带有声音
你加载进来,就算你不addChild,他也在播放的,而且有时候你控制他stop,还控制不了。。
解决方案是:加stop(),做动画素材的时候,尽量把关键动画都做在主场景帧上,那么程序中就可以控制动画了
置于声音,还真是个头疼的东西,当然使用mc的同样管理方案也是可以的,但是我建议,把声音做到库中
然后使用ClassLoader把声音拿下来,然后用程序控制声音。

==================== 气 死 你 的 分 割 线 ====================

6、幽灵般的容器
一个容器,当被addChild后,你就可以直观的看得到他,但是你又removeChild,很多人都认为这样,容器就不存在了,实则不然,他还存在
比如你做一个飞机游戏,飞机爆炸后,你就会removeChild它,但是这样做是不够的,他依然还存在那个位置,而且x,y值是依然不变的
如果飞机上还写了碰撞检测,如果这时候有子弹飞过来,依然会算碰撞成功,还有很多类似的例子
个人建议:两个办法,简单的游戏嘛,可以设个全局逻辑值,当确定不需要在碰撞检测,把这个值变成false,每次检测碰撞,也检查一下这个值,就行了
第二个办法是复杂一点的,扩展容器类,侦听他的removedFromStage,removed事件和addedToStage,added事件,如果加入了,则容器中某个值等于true,反之是false
这个属性就可以叫返回是否被加入显示对象
当然还有其他的办法,比如检查容器的contains方法,可以检查出当前容器中是否含有容器,如果removeChild,那么你检查结果就是不存在

==================== 气 死 你 的 分 割 线 ====================

oh。。先写这么多,肯定不是很完全。。一下子我也没办法把我在项目中碰到的任何问题搬出来。。想起来,我在继续写。。

相关文章

  • flash cs6鼠标跟随效果实现代码分享

    flash cs6想要实现鼠标跟随效果?该怎么制作呢?今天我们就来看看使用as2.0实现鼠标跟随效果的教程,需要的朋友可以参考下
    2019-05-19
  • Flash cs6怎么使用代码输入中英文文本?

    Flash cs6怎么使用代码输入中英文文本?Flash cs6中可以使用文字工具直接输入文本,也可以使用代码来输入文本,该怎么使用代码输入文本呢?请看下文详细的教程,需要的朋友
    2018-03-11
  • flash as3.0怎么定义抽象类和抽象?

    flash as3.0抽象类怎么定义? as3.0中有很多抽象类,该怎么定义抽象类和抽象方法呢?下面我们就来看看简单的例子,需要的朋友可以参考下http://www.jb51.net/softs/408402.
    2018-02-28
  • flash cs6中怎么使用ActionScript3.0?

    flash cs6中怎么使用ActionScript3.0?flash cs6中想要使用ActionScript3.0功能,该怎么使用呢?下面我们就来看看详细的教程,需要的朋友可以参考下
    2018-01-25
  • Flash中怎么实现鼠标点击决定图像位置?

    本教程给大家分享一个Flash小教程,教大家在Flash CS6中怎么实现鼠标点击决定图像位置?方法很简单,感兴趣的朋友欢迎前来一起分享学习
    2018-01-12
  • Flash中如何用代码将图片放在自己想要的舞台位置?

    本教程教程序员之家的ActionScript教程学习者在Flash中如何用代码将图片放在自己想要的舞台位置,教程讲解的详细,感兴趣的朋友欢迎前来分享学习
    2017-11-20
  • 在Flash CS6中使用with函数绘制背景图教程

    本教程教程序员之家的ActionScript教程学习者如何在Flash CS6中使用with函数绘制背景图?教程一步步讲解的挺详细,方法也不难,非常适合Flash新手入门学习
    2017-11-18
  • Flash怎么设置元件坐标?flash使用代码设置元件的坐标的教程

    Flash怎么设置元件坐标?flash中导如的元件需要添加坐标,该怎么定位元件坐标呢?下面我们就来看看flash使用代码设置元件的坐标的教程,需要的朋友可以参考下
    2017-10-11
  • Flash怎么制作来回摇摆的花朵的动画?

    Flash怎么制作来回摇摆的花朵的动画?Flash中想要给花朵制作一段摇摆的动画效果,该怎么制作呢?下面我们就来看看详细的教程,很简单,需要的朋友可以参考下
    2017-05-23
  • Flash怎么制作流动七彩色的文字?

    Flash怎么制作流动七彩色的文字?想要让文字动起来,该怎么使用flash给文字制作一个流动七彩色的动画呢?下面我们就来看看详细的教程,需要的朋友可以参考下
    2017-04-23

最新评论

?


http://www.vxiaotou.com