存档

‘Computer’ 分类的存档

as3中的深度管理的利于弊

2010年5月5日 1 条评论

as3相比于as1和as2,引入了新的深度管理方法。从而抛弃了as1,as2时期的swapdepth和getnexthigherdepth的深度管理方法。
代替他们的是addChildAt,addChild,removeChild,removeChildAt,swapChildAt等。
广大as3爱好者无不拍手称快。
新的深度管理的方式,将深度管理的工作交给flash自身进行,提供给用户的child索引实际上是连续的,避免的as1,2时期深度不连续的问题。同时深度管理也更加直观。

但是,从我而言,这种新式的深度管理同样也带来了弊端。

以上一篇博文中提到的多页连翻中的深度管理为例,我们可以发现,在多页连翻的过程中实际上是需要不停的去创建页面,并指定z序,同时还需要不停的交换不同页面的z序。这在as3时期的新的深度管理方法下面,简直是噩梦。
此时,你就不得不单独先一个类,去实现类似于as2时期的深度管理方案。这也就要求被管理的对象必须给其重新附加一个depth属性。
以下为depthmanager类源代码。

package org.kingse.CFlipPage.Utilities {
    import flash.display.*;
 
    public class DepthManger {
 
        public function DepthManger(){
            throw (new Error("静态类,不能实例化。", 9999));
        }
        public static function getNextHighestDepth(container:DisplayObjectContainer):Number{
            throw (new Error("未实现!"));
        }
        public static function remove(container:DisplayObjectContainer, displayobj:DisplayObject):void{
            container.removeChild(displayobj);
        }
        public static function addAt(container:DisplayObjectContainer, displayobj:DisplayObject, depth:int):void{
            var i:int;
            var childrencount:int = container.numChildren;
	        if (childrencount == 0){
                container.addChild(displayobj);
                displayobj["depth"] = depth;
                return;
            }
            if (container.getChildAt(childrencount-1)["depth"]<depth){
                container.addChildAt(displayobj,childrencount);
                displayobj["depth"]=depth;
                return;
            }
            i = childrencount-1;
            var depth1:int;
            var depth2:int;
            while (i >=0) {
                depth1=container.getChildAt(i)["depth"];
                if (i-1>=0){
                    depth2=container.getChildAt(i-1)["depth"];
                }else{
                    depth2=-1;
                }
                if (depth==depth1){
                    container.removeChildAt(i);
                    container.addChildAt(displayobj,i);
                    displayobj["depth"]=depth;
                    return;
                }
                if ((depth<depth1)&&(depth>depth2)){
                    container.addChildAt(displayobj,i);
                    displayobj["depth"]=depth;
                    return;
                }
                i--;
            }
        }
        public static function swapDepths(container:DisplayObjectContainer, displayobj:DisplayObject, depth:Number):void{
            var tempdepth:int;
	        if ((container == null) || (displayobj == null)){
                return;
            }
            var nowindex:int;
            var nowdepth:int;
            var aimdepth:int=int(depth);
            try{
                nowindex = container.getChildIndex(displayobj);
                nowdepth = displayobj["depth"];
                if (nowdepth == aimdepth){
                    return;
                }
            }catch(err:Error){
                return;
            }
            var childrencount:int = container.numChildren;
            var depth1:int;
            var depth2:int;
            var i:int=childrencount-1;
            if (container.getChildAt(i)["depth"] < aimdepth){
                container.removeChild(displayobj);
                container.addChild(displayobj);
                displayobj["depth"]=aimdepth;
            }
            while (i>=0){
                depth1=container.getChildAt(i)["depth"];
                if (i-1>=0){
                    depth2=container.getChildAt(i-1)["depth"];
                }else{
                    depth2=-1;
                }
                if (aimdepth==depth1){
                    container.swapChildrenAt(i,nowindex);
                    displayobj["depth"]=aimdepth;
                    container.getChildAt(nowindex)["depth"]=nowdepth;
                    return;
                }
                if ((aimdepth<depth1)&&(aimdepth>depth2)){
                    container.removeChild(displayobj);
                    if (nowindex>=i){
                        container.addChildAt(displayobj,i);
                    }else{
                        container.addChildAt(displayobj,((i-1<0) ? 0 : (i-1)));
                    }
                    displayobj["depth"]=aimdepth;
                    return;
                }
                i--;
            }
        }
    }
}
分类: Computer 标签: ,

多页连翻型电子杂志组件原理简介

2010年5月4日 没有评论

电子杂志之风盛行于几年前,从最初的fflippage,pageflip,margpark等组件,到zinemaker,iebook等软件。相关应用层出不群。
但是就效果来说,大部分都基于国外开源的pageflip组件或者原理类似。

其中比较独特的是自在幻想(fictiony)的fflippage组件,该组件实现了多页连翻效果,在真实性上更加完善。

本文以简图探讨多页连翻型与单翻型究竟在架构上有什么不同。

先看下面的图

上图表面的是典型的电子杂志组件的层次安排图。

其中this为整个电子杂志组件,最下面两层为shadow和shadowmask,这两层在整个组件上创造出翻页是的书下面的光影效果。

再上一层是page,page就是页面内容的容器。在往上就是pagemask了,pagemask控制page容器整体的显示范围。

page这个容器里面包含最底层content,也就是内容,例如图片等,shade,中间缝隙的阴影等,contentmask是控制翻页过程中content能够够显示出来的部分。

那么这个体系结构中,page实际上是可以多个累加,进行深度管理的。每个page都有其自己的坐标,以及shade,和contentmask,这样每个就构成了多页连翻的显示结构,至于多页连翻的程序实现,就不在本文探讨范围之内了

分类: Computer 标签: , ,

不明白,我这歪脖也能被人看上?

2010年5月2日 没有评论

嘛也不说,直接上图

分类: Computer 标签:

闪客精灵导出的Fla提示“无法将场景载入内存,您的文件可能已损坏”的解决方法

2010年4月18日 没有评论

用闪客精灵(SWF Decompiler)反编译swf,导出Fla时,得到的Fla用flash打开经常会出现“无法将场景载入内存,您的文件可能已损坏”的提示。尤其在源swf中含有嵌入的视频音频资源时,更是如此。本质上的原因是fla中部分资源发生了损坏,无法正常读取,所有修复这部分受损的资源即可

此种情况下,一般的解决步骤如下:

1、用flash打开fla,从库面板中找到所有损坏的资源(那些资源预览中提示无法预览的资源)

2、用swf decompiler打开原swf,单独导出这些损坏的资源

3、在flash中,用第二步导出的资源替换fla库中的资源。

解决,收工

分类: Computer 标签: ,

图解Origin 8.0科技绘图及数据分析

2010年4月10日 没有评论

好书分享。
附此书目录,下载地址见贴内
封面 -10
书名 -9
版权 -8
前言 -7
目录 -5
第1章 Origin基础 4
 1.1 Origin简介 4
  1.1.1 常用的科技绘图及数据处理软件 4
  1.1.2 Origin的主要功能 4
 1.2 Origin工作环境 5
  1.2.1 菜单(Menu) 5
  1.2.2 工具栏(Toolbar) 6
  1.2.3 项目管理器(Project Explorer) 8
  1.2.4 事件记录(Results Log) 9
  1.2.5 命令窗口(Command Window) 10
  1.2.6 编程环境(Code Builder) 10
 1.3 Origin子窗口 11
  1.3.1 Origin工作簿(Workbook) 11
  1.3.2 Excel工作簿 11
  1.3.3 图形(Graph) 11
  1.3.4 矩阵(Matrix)工作簿 12
  1.3.5 函数图(Function) 12
  1.3.6 版面布局(Layout Page) 13
  1.3.7 记事(Notes) 13
 1.4 Origin示例数据 13
 1.5 动手做一个简明例子 14 阅读全文…

分类: Computer, Study 标签:

About ASV,UAE,ASR

2010年3月14日 2 条评论

早些时候,我公开发布过ASV,UAE等的破解(keygen算出来的key)。当时也有不少人得到了。
后来由于官方知会,就停止提供了,也声明了,结果最近来要的人又多了。

【09.06.15更新】
收到官方email知会,uae,asv停止更新,请不要再询问下载信息~

还是申明下,ASV,UAE,ASR破解,不再发布了(其实我也没有新版可发布,不接触电子杂志及flash很久了,兴趣转移了)。要想使用的话,去官方购买吧,价格也就那样,不贵。
要想自己研究破解,参考本博或者本人在unpack上发表的asv破文及keygen源码即可,其他的自己参照着做即可解决。(要破解,建议先手头准备一个正版key,asv,uae,asr系列验证的地方太多,有正版key好做比较)。

以上,望各位为了ASV,UAE,ASR而来的消停消停吧。 :mrgreen:

分类: Computer 标签: , ,

srand,rand函数的使用注意事项

2010年1月12日 没有评论

在实际应用中,我们经常需要产生随机数,这些随机数的应用范围也是十分广泛的。但计算机只能依据一定算法产生伪随机数序列。c语言中最常用的产生伪随机数序列的函数是srand和rand

srand,rand函数在实现上利用TlsGetValue等一系列函数进行数据的存取,也就意味着srand,rand存取的数据是和线程相关的。

根据我使用经验,总结出以下几点注意事项:

1、rand函数初次使用之前必须调用srand函数初始化,才能保证产生不同的随机数序列。

2、在多线程程序中,如果每个线程都需要调用rand,那么必须在每个线程里单独进行初始化。

3、单进程的srand初始化,可以简单的采用time(0)即可,但是多线程中,如果每个线程的开始时间近乎相同,那么就不可采用time(0)进行初始化,因为time(0)实际精度只有s级,会导致每个线程产生相同的随机数序列,因此需要用每个线程各不相同的一个数去初始化srand,例如threadid等等

分类: Computer 标签: , ,

IDA Pro 5.5+Hex-Rays.Decompiler 1.1 0day放出

2009年12月20日 2 条评论

RT。
相信不用多做介绍,ida和hex-rays decompiler是什么东西,大部分玩逆向的都知道~~

自从去年0day放出5.2以后,长达一年的时间内没有动静,这次终于等到了ida 5.5版本。~

这里感谢 crackl@b forum的分享!

http://www.namipan.com/d/idapro55.zip/e0f420a29d2da1ed58697c6ab2e97adcc97daf5a97b37705

http://www.brsbox.com/filebox/down/fc/7fed14a8c798c73bf733360dda76a0e7

分类: Computer 标签: , ,