博客公告(点击显示/隐藏)|  今日心情:神学
2010-07-30 21:09:43
小S吧今天你来了吗?更新速度:每周2-3篇以上!
在俺博客看到有用的东西,学习了之后,记得回访带点人气哦 ^_^ 嘿嘿!
欢迎跟俺交换友情链接啊。。留言,直接QQ等联系我都行啊
转载本博客文章请注明:来源小S吧——sunbright博客,链接地址:http://www.xiaos8.com
鼠标的滚轮不灵活了,自己拆开看了一下
发现是橡皮圈和滚轮太松了,摩擦力不够,致使滚动滚轮时,滚动条没任何反应
于是乎就想办法增加橡皮圈和滚轮之间的摩擦力
刚开始用纸在橡皮圈和滚轮之间再固定一层增加摩擦力,弄好后效果倒是达到了,但是橡皮圈因此鼓了起来,致使滚动时,老是被卡住
突然想起个把月买过502胶,把橡皮圈和滚轮之间涂上一层502胶,少许时间后,效果达到了
于是在将鼠标组装起来,试了一下效果,嘿!还真不错!
又省了几十块钱换鼠标了,哇哈哈!
很少写Flex相关的东西,今天遇到了这个问题,想了很多办法,也查了百度,都没有得到比较正确的办法。
下面是解决的办法,但不知道有没有更简单的办法就是了,俺只是业余摆弄一下Flex做一些AIR小工具。

首先是一段DataGrid相关实例代码:

<mx:DataGrid id="dataComp" dataProvider="{resultList}" width="100%" height="100%" sortableColumns="false" selectable="false"
  resizableColumns="false" draggableColumns="false" resize="dataCompResizeHandle()">
  <mx:columns>
    <mx:DataGridColumn dataField="line" headerText="行数" textAlign="center" width="40"/>
    <mx:DataGridColumn dataField="text" headerText="匹配文本" paddingLeft="5" paddingRight="5"
      itemRenderer="mx.controls.Label"/>
    <mx:DataGridColumn dataField="path1" headerText="路径" paddingLeft="5" paddingRight="5"
      itemRenderer="mx.controls.Label"/>
    <mx:DataGridColumn dataField="times" headerText="次数" textAlign="center" width="40"/>
  </mx:columns>
</mx:DataGrid>

侦听resize事件,当得到resize之后做这样的操作:

//数据对象重设尺寸处理
private var widthList:Array = [40,0.7,0.3,40];
private function dataCompResizeHandle():void{
  dataComp.validateNow();
  var value:Number,display:DataGridColumn,i:int;
  var list:Array = dataComp.columns;
  var length:int = list.length;
  var dataWidth:int = 0;
  for(i = 0; i < length; i ++){
    display = list[i];
    dataWidth += display.width;
  }
  for(i = 0; i < length; i ++){
    display = list[i];
    value = widthList[i];
    if(value > 1){
      dataWidth -= value;
      display.width = int(value);
    }
  }
  for(i = 0; i < length; i ++){
    display = list[i];
    value = widthList[i];
    if(value <= 1) display.width = int(dataWidth * value);
  }
}

要点注释:
1、得到resize之后一定要dataComp.validateNow();,这样取出来的总列宽才是正确的!
2、第一个for循环在计算总列宽,直接取dataComp的宽度是不对的,它会包含滚动条的宽度,我也不知道有没有什么办法可以直接取到总列宽,因此我采用了for循环去累加列宽;
3、第二个for循环在设置widthList中是在设置需要固定列宽的子项,然后从总列宽中减去;
4、第三个for循环在设置widthList中是按百分比设置子项列宽。

前言
标题纠结了很久,刚开始叫“我用反射函数describeType在干吗?”,看到第一位仁兄的回帖,继续纠结,继续推敲,最后就出现了现在的标题。。
如果不知道describeType是什么东西,那么先去看这篇基础教程吧:
http://www.xiaos8.com/article.asp?id=251

下面展出的图片是我在公司开发的内部debug工具的截图,因为我们公司的Flash是跑在C++上,很多接口都是依赖C++实现的,那么很多逻辑都是从C++启动,可能没办法直接打开调试,那么我们得有办法调试,所以下面这个工具就孕育而生了,当然跟市面上的Alcon差不多,不过我们的功能更多,且可以针对网络环境调试,和更多适应我们公司的调试功能。

下面4个截图都是我对一个游戏中AI对象进行数据检查:

1、对象可读属性检查,当然他是用反射函数实现的,检查到反射出来的XML中accessor是可读时,即显示出来
uploads/201005/20100531_1.gif

2、对象的结构检查,当你去调试别人写的类时,特别是结构较为复杂的话,那么用反射函数来帮忙,将所有结构打印出来,他的继承关系,他实现的接口等,将一目了然!
uploads/201005/20100531_2.gif

3、对象的属性检查,还是一样你去调试别人的类,那么用反射函数来帮忙,一眼就可以看到如此多的属性,而且是否是只读属性,还是只写属性,或者是可读可写属性,就连属性返回对象的类型也一目了然!
uploads/201005/20100531_3.gif

4、对象的方法检查,同理调试别人的类,依然用反射函数来帮忙,转瞬间就能知道他所有的方法调用,而且还能知道这个方法是出自哪个类实现的,也能知道该方法会返回什么类型!
uploads/201005/20100531_4.gif

今天的上海Flash聚会,谈熠讲的很精彩,特别是flash.utils.Proxy类,自从我知道了这个类,很多项目中都用它,它使我的程序变得相当灵活,而且在跟C++定义接口时,Flash用Proxy类封装接口,相当完美!不过我却要补充的是一个关于Proxy类的bug,用Proxy类开发差不多有1年了,遇到过一个比较头疼的问题,下面这个链接就是我以前发的关于这个bug的描述。
http://www.xiaos8.com/article.asp?id=503
这个bug,暂时是没有直接的解决办法,不过我相信能碰到的人应该很少
我们公司的技术构成是C++和Flash共同存在,很多时候在加载时需要用到不同域加载,因此才能碰到这个问题。
我现在采用的解决办法是自己写一个Proxy类,不过这办法我觉得比较SB,一般我们调用方法的时候都是Object.method(),而使用我们自己写的,自然没那么方便了,只能Proxy.call(methodName,args); Proxy.set(name,value); Proxy.get(name); 但好处是Proxy那种灵活性依然存在,不过是写程序的时候很麻烦,而且面对可读性可能比使用Proxy类更差。因此还需大家谨慎衡量一下利弊哦~