周淼(MillsonZhou)的个人博客,记录、收藏、分享

AS3中的循环Loops

其实主要是想说for in和for each in的区别,因为开始写AS3的时候不清楚,虽然很简单

首先定义一个Object:var _obj:Object = { "name":"jack", "sex":"man", "age":19 };

1. for in: for (prop in _obj) { trace(prop); }

输出:age sex name

2. for each in: for each(prop in _obj) { trace(prop); }

输出:19 man jack

可以看出,for取出的是key,for each取出的是value

as3是面向对象的,Array也是Object,对Array使用for in、for each in又是什么结果呢,继续测试

定义一个Array:var _arr:Array = ["jack", "tom", "white"];

1. for in: for (prop in _arr) { trace(prop); }

输出:0 1 2

2. for each in: for each(prop in _arr) { trace(prop); }

输出:jack tom white

果然没有错,和Object的结果是一样的,具体的开发中,其实对Array一般不用for in、for each in,直接用下面这种写法

for (var i:Number = 0; i < _arr.length; i++) { trace("key: " + i +", value: " + _arr[i]); }

这样能同时取到key、value,使用更灵活,as3中的循环还有while和do while,这两个和其他语言基本一样,就不细说了

IE 中js脚本错误:未结束的字符串常量

有可能的一个原因,也就是我今天遇到的:js脚本的编码格式和html文件不统一

有时候错误就是这么的莫名其妙,明明在firefox等其他非IE内核的浏览器中没有错误,等到了IE,错误就来了

如果是这种可能的情况的话,说实话,怪不得IE,自己在开发过程中太随意了,不严谨,如果仅仅是因为有了firefox等容错比较好的浏览器,就来批评IE是不对的,因为其实本来就是自己的错

科技使人变笨是有道理的

AS3替换鼠标

开发过程中出现这样的需求,当鼠标移动到某一元件上面的时候,将默认鼠标替换为自定义的鼠标(一个元件)

我是这样写的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
var _cursor:MovieClip = new my_cursor; //my_cursor为自定义的一个元件
_cursor.visible = false;
addChild(_cursor);
_mc.addEventListener(MouseEvent.MOUSE_OVER, onMcOverHandler);
_mc.addEventListener(MouseEvent.MOUSE_OUT, onMcOutHandler);
private function onMcOverHandler(e:MouseEvent):void{
trace("over");
Mouse.hide();
_cursor.visible = true;
_cursor.x = MouseX;
_cursor.y = MouseY;
_cursor.startDrag();
}
private function onMcOutHandler(e:MouseEvent):void{
trace("out");
Mouse.show();
_cursor.visible = false;
_cursor.stopDrag();
}

按理说,应该是没有问题的,可是鼠标老是会闪,trace出的结果是不停的over、out,检查了老半天,觉得代码是没有问题的,难道是元件的问题,直接把_mc对应的元件换成了自己画的一个长方形元件,鼠标也是用的静态的一张图,结果还是闪个不停

又纠结了很长时间,并请教了老大之后,终于得出了一个结论,问题出在自定义的鼠标上面,看下面两张图的对比

old.pngnew.png

当鼠标移动到_mc上面时,触发MOUSE_OVER事件

1
2
_cursor.x = MouseX;
_cursor.y = MouseY;

这两段代码之后将会触发MOUSE_OUT事件,然后在MOUSE_OUT事件中

1
_cursor.visible = false;

这行代码使_cursor被隐藏,再次触发MOUSE_OVER事件,两个事件就这样不停的触发,造成鼠标闪动,为什么会这样?

如果尝试着把Mouse.hide(); 和 Mouse.show(); 这两行代码注释掉的话,你会发现自定义的鼠标还是会闪动

当_cursor移动到鼠标位置的时候,如果你给_cursor加了MOUSE_OVER事件的话,你会发现这个事件被触发了,这下应该懂了吧,系统鼠标就相当于一个隐藏的文件,虽然看不到,但是它还是存在的,当把_cursor移动到鼠标位置的时候,就挡住了_mc,这时必然会触发MOUSE_OUT事件,反之亦然

怎么解决,一种就是通过上面两个图的方法,更改_cursor元件,往原点外偏移一段距离;或者:

1
2
_cursor.x = MouseX ± x;
_cursor.y = MouseY ± x;

只要不挡住系统鼠标就行,但是这种只适合比较大的元件,需要比较精确的定位的话,这种方法可能是行不通的,不知道其他还有什么方法




如果只是需要在整个flash中替换鼠标的话,相对而言就没有这么复杂了

1
2
3
4
5
6
7
8
9
10
var _cursor:MovieClip = new my_cursor;
addChild(_cursor);
Mouse.hide();
stage.addEventListener(MouseEvent.MOUSE_OVER, onStageOverHandler);
private function onStageOverHandler(e:MouseEvent):void{
_cursor.x = MouseX;
_cursor.y = MouseY;
e.updateAfterEvent();
}




文章发布后可能会有修改,修改错误、笔误什么的,一切以三水之都博客下内容为准

在.htaccess文件中使用301重定向

因为博客修改了固定链接,造成了很多死链,其实对于不注重收录的我来说,修不修复都无所谓,但是人总要不断学习吗,就google了一下关于301重定向的知识,下面是几个一般性的例子:

# 重定向某一固定页面
Redirect 301 /oldpage.html http://www.zhoumiao.com/message-board.html

# 重定向整站
Redirect 301 / http://www.zhoumiao.com/

# html结尾的网址重定向为php结尾
RedirectMatch 301 (.*)\.html$ http://www.zhoumiao.com$1.php

# aspx结尾的网址重定向为php结尾
RedirectMatch 301 (.*)\.aspx$ http://www.zhoumiao.com$1.php

# 重定向带www域名到不带www域名
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} .
RewriteCond %{HTTP_HOST} !^zhoumiao\.com
RewriteRule (.*) http://zhoumiao.com/$1 [R=301,L]

# 重定向不带www域名到带www域名
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^zhoumiao.com [NC]
RewriteRule ^(.*)$ http://www.zhoumiao.com/$1 [L,R=301]

# 重定向zhoumiao.com/index.php 到 zhoumiao.com
Options +FollowSymLinks
RewriteEngine on
# index.php to /
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*index\.php\ HTTP/
RewriteRule ^(.*)index\.php$ /$1 [R=301,L]

flash cs3无法导出flash,一闪就消失了

在使用flash cs3+as3开发flash程序的时候,遇到了这样的问题,当导出flash的时候,导出对话框一闪就消失了,编译器也不报错

如果报错的话倒好了,知道错在哪里就可以修改了,最怕的就是这种情况,没有头绪

google了一通,觉得应该是文本使用了“动画消除锯齿”的缘故

因为我起初是在win xp下开发的,当时没有问题,因为使用的字体是安装过的

后来开发基本完成了就放在一边很长时间,这期间为了装酷装上了win7,可能正好没有那个字体吧,就发生了这种情况

把所有的“动画消除锯齿”改为使用设备字体就好了

你可以在这里http://kids.ci123.com/home.php看到这个flash (需要注册的,公司的网站)

返回顶部