May 24

五一假期做了个小游戏,颠球,处女作

ActionScript3.0


做了个颠球游戏,难点就是球要做抛物线运动并经过指定的箭头位置
找高中物理公式摆弄了一番

水平是匀速运动,这就算出了运动到目标的时间
垂直方向,已知目标的高度,和运动时间,加速度,求出初始速度即可
可是并不是那么好算哦
有兴趣的朋友算算,也好复习一下高中物理 嘿嘿ie

来玩玩吧 地址
May 21

做项目要做倒计时,就写了一个倒计时类,分享....

ActionScript3.0


TimeBack.as 代码如下:

package
{
  import flash.events.Event;
  import flash.events.EventDispatcher;
  import flash.events.TimerEvent;
  import flash.utils.Timer;
  /**
   * ...倒计时工具
   * @author Emment
   */
  public class TimeBack extends EventDispatcher
  {
    private var timer:Timer;
    
    public var ss:int;
    public var mm:int;
    
    public function TimeBack() 
    {
      timer = new Timer(1000);
      timer.addEventListener(TimerEvent.TIMER, timerHandler);
    }
    /**
     * 秒
     * @param  mm
     */
    public function startRedTime(m:int):void
    {
      mm = Math.floor(m / 60);
      ss = m % 60;
      timer.reset();
      timer.repeatCount = m;
      timer.start();
    }
    private function timerHandler(e:TimerEvent):void
    {
      if (ss == 0) {
        ss = 59; 
        if (mm == 0) {
          timer.stop();
          ss = 0;
        }else {
          mm --; 
        }
      }else {
        ss--;
      }
      var evt:Event = new Event("seconds");
      dispatchEvent(evt);
    }
  }

}

May 17

5月30日 第3次 FLASH开发者交流会火热报名中!

杂物箱
经过紧张的筹办,第三次FLASH开发者交流会活动开始报名咯!请大家访问:www.swfsh.com

在这次的活动中,我们邀请到AsWing开源UI框架的作者iiley同学跟大家介绍他在FLASH独立游戏开发方面的经验和感受。
同时我们请来积木网的主程谢敏同学,谢敏采用FLEX框架一手开发了积木网网上电脑,谢敏将为我们带来FLEX框架的完整的开发经验谈(超多干货!!)。
在1月活动中,向大家介绍FLASH播放器性能优化经验的主持人谈熠同学将在这次的活动中给我们介绍如何在FLASH中运用元编程方法来提高代码效率和优化开发过程。
“开心宠物”和“升职记”的主程唐翎同学将告诉大家一种全新的FLASH程序的UI设计方式,使你的程序能够超灵活地支持皮肤设定
……
还有很多新鲜有益的主题,我们将不断地更新在网站上,请关注:www.swfsh.com
Apr 23

Opera 这个浏览器相对比较烂

Javascript
输入 imemment.com 没反应

Opera 的 fixed 定位有严重的BUG

<div style=" position:fixed; top:100px; left:20px; width:100px; height:100px; background-color:#006666;">text</div>


这样一个BOX fixed 定位,放在内容很高可以出现滚动条的页面里
把滚动条拉到中间,刷新,你会发现 BOX 不见了,变成绝对定位了,有时候甚至会刷没了
最近在写一个JS浮动功能,除了ie6 Opera的毛病最多了,IE6 人家是前辈 有问题可以理解
Opera实在不行啊·· 只能发泄一下 没本事就别搞那么多浏览器
Apr 14

Safari下一个关于parentNode.removeChild超级诡异的BUG

Javascript
做了一个FLASH,定时10秒后去调用JS 的方法 close

function close(){
var p=domObj.parentNode;
p.removeChild(domObj)
}


就是删除FLASH自身所在的dom父节点。
很奇怪在Safari下面,时间一到执行close方法浏览器就奔溃

直接用JS去运行close方法 却没有任何异常 用FLASH中的点击去调close也没问题
只能用诡异来形容了,因为肯定是底层的原因造成的

无法找到原因,于是我就用了一个办法,见代码

function close(){
var p=domObj.parentNode;
//执行权给到JS的时候,让他延时10秒,由JS来removeChild
setTimeout(function(){p.removeChild(domObj);},10); 
}


奔溃问题解决了,考
有知道深层原因的看官请发表意见 谢谢
Apr 8

关于as3的安全策略 crossdomain.xml

ActionScript3.0
当你的flash程序去访问其他域的数据
必须得到被访问域的允许,默认会下载被加载域根目录下的安全策略文件 crossdomain.xml
当然你也可以自己去显示的加载制定目录下的 策略文件 但是获得的权限也在该目录以及子目录

flashPlayer10 之后,安全策略做了一些调整,主策略文件必须被加载,通过主策略文件的设置,才可能被允许存在其他策略文件

cross-domain-policy 为根节点
子节点有:
site-control
(如果该XML并非主策略文件,此节点被忽略,通过检查该节点的属性值,确认是否可以允许存在其他策略文件)
属性:permitted-cross-domain-policies
值:
none: 什么都不允许,包括主策略文件
master-only: 只允许主策略文件.
by-content-type: 只允许[HTTP/HTTPS]
by-ftp-filename: 只允许[FTP]
all: 允许任何目标域策略文件授予的权限,允许访问任何文件,并允许任何头被发送到服务器(强烈不推荐)

allow-access-from
属性:domain
值:可以带通配符的域 如:*.test.com
属性:to-ports
值:允许的端口范围,(*)是全部允许
属性:secure
值:默认是true. 也建议true. 否则会影响https的安全性 多的就不说啦

allow-access-from-identity
略............
allow-http-request-headers-from
(对header的访问允许设置)
属性:domain
值:可以带通配符的域 如:*.test.com
属性:headers
值:逗号隔开的列表
属性:secure
值:默认是true. 也建议true. 否则会影响https的安全性 多的就不说啦

例子:

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM
"http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<site-control permitted-cross-domain-policies="master-only"/>
<allow-access-from domain="*.example.com" to-ports="507,516-523"/>
<allow-access-from domain="www.example.com" />
<allow-http-request-headers-from domain="*.adobe.com" headers="SOAPAction"/>
</cross-domain-policy>


Generic DTD
http://www.adobe.com/xml/dtds/cross-domain-policy.dtd
Generic XSD
http://www.adobe.com/xml/schemas/PolicyFile.xsd
HTTP XSD
http://www.adobe.com/xml/schemas/PolicyFileHttp.xsd
HTTPS XSD
http://www.adobe.com/xml/schemas/PolicyFileHttps.xsd
FTP XSD
http://www.adobe.com/xml/schemas/PolicyFileFtp.xsd
Socket XSD
http://www.adobe.com/xml/schemas/PolicyFileSocket.xsd
Mar 31

Base64 类,用于字符串的二进制编码

AS3 MINNI library

var obj:Object = {name:"Dynamic Flash", url:"http://dynamicflash.com"};
          var source:ByteArray = new ByteArray();
          source.writeObject(obj);
          var encoded:String = Base64.encodeByteArray(source);
          var decoded:ByteArray = Base64.decodeToByteArray(encoded);
          var obj2:Object = decoded.readObject();
          assertEquals(obj.name, obj2.name);
          assertEquals(obj.url, obj2.url);

可以把字符串转成二进制 转成图片保存

下载地址
Mar 31

js脚本中动态调用外部js库的研究

Javascript
看题目可能不太懂什么意思
最近做一些广告库的代码
给第三方去接入,不可能让人家在网站的head标签中给你插入一段js引用
而我考虑到 以js库的形式能以文件的方式缓存,多次使用的时候,提高下载效率
减少服务器压力。
在脚本中 首先要动态在head中插入一段js库的标签
代码如下

(function(){
    if(document.getElementById('jsid'))
    return;
    var s=document.createElement('script');
    s.type='text/javascript';
    s.id = 'jsid';
    s.src='js/test.js';
    document.getElementsByTagName('head')[0].appendChild(s);
  })();


其中 test.js 有很多工具方法,被封装在一个对象中,我在接下来的代码中需要调用
问题肯定来了,test.js 什么时候加载完成呢,立刻调用它的方法肯定找不到定义啦

思考:
去监听script标签 加载,产生一个回调方法,去触发后面的代码开始
OK 没问题,但是假如有1个以上的脚本都要用这一个JS库呢?他到底在回调中 运行哪个脚本的初始函数?
初始函数都加进去运行好了! 但是你怎么就知道所有的脚本都加载完了呢?
也就是说回调运行的初始函数 不一定都能调得到 ,所以这个方法不行
同样考虑ajax去监听加载状态,产生回调同样不行

解决方法:
在test.js 库的最后一行设置一个全局变量,变量名复杂点防止冲突 比如 $value_version_2010 = "2010.03.21";
在你的脚本这样写

(function(){
    if(typeof $value_version_2010 != "undefined"){
        //你的代码
    }else{
        setTimeout(arguments.callee,50);
    }
})();


不断去检查这个变量,不存在就延时50秒 重新执行,一旦有了值,你的代码就可以安全执行了
你可以设置个全局变量记录重新执行的次数,来防止无限执行,当然只要是全局变量 你都要考虑命名安全,尽量复杂点吧

各位看官,不知道在这方面谁还有什么高招,欢迎跟帖
Mar 12

免费参加第二期FLASH专家交流会,3月28日火热报名中!

杂物箱
第二期FLASH专家交流会 3月28日 上海 畅星大厦
活动主题: 新技术和开发经验
正在火热报名中!免费参加,座位有限,快来报名 SWFSH.COM

详细.................
Feb 27

解决IE6、IE7在CSS中设置最小高度遇到的问题

xhtml CSS
当设置某一个区域的最小高度为某个值的时候,在Firefox、IE6以及IE7中的表现并不一样。如果只是设定了min-height值,那么在IE6中不能识别;但设定了height值,在 IE7和Firefox中,位置就会固定了。这是一个很大的问题。那么为了协调各个浏览器和各个版本,我们怎样做才能解决最小高度的问题呢?

.distance {
height:auto!important;
height:100px;
min-height:100px;
}