- 浏览: 576145 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
wzh051527:
我是大四实习生一个,自我感觉技术能力在第三年。。唯一不明白,为 ...
十年技术,不要再迷茫 -
room_bb:
.hrl文件怎么加入到编译规则里面?比如:pp.hrl文件-d ...
Erlang中用的makefile的一点解释 -
吉米家:
感觉帆软报表的flash打印就很不错哇,特别好用
JSP 实现报表打印 -
雪碧爱芬达:
苦逼程序员的辛酸反省与总结 -
mlyjxx:
...
十年技术,不要再迷茫
如果你有一定的as游戏开发经验,那相信你也应该知道但场景里放入好多的子可视对象时,鼠标的滑动会导致cpu的狂飙; 原因主要在于fp内部在不停的遍历可视对象.你可能会用过或者知道可视对象都有这个方法getObjectsUnderPoint () 它能够返回鼠标点下的可视对象列表 .这也是鼠标滑过时消耗高的原因所在.当然它更大的用途是用于辅助重绘的实现以及其他. 有什么方法可以降低这块的消耗呢?答案是有的; 每个可视对象都有两个属性 mouseChildren 跟mouseEnabled mouseChildren的作用是确定对象的子项是否支持鼠标 而 <?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
creationComplete="init()"
backgroundColor="0xcacaca"
minWidth="955" minHeight="600">
<fx:Declarations>
<!-- 将非可视元素(例如服务、值对象)放在此处 -->
</fx:Declarations>
<fx:Script>
<![CDATA[
import com.quadTrees.Hash;
import com.quadTrees.INoder;
import com.quadTrees.Noder;
import com.quadTrees.QuadTrees;
import flash.filters.GlowFilter;
import flash.utils.getTimer;
import mx.core.UIComponent;
private var qtree:QuadTrees=new QuadTrees
private var keys:Vector.<String>=new Vector.<String>
private var array:Vector.<INoder>=new Vector.<INoder>
private var s:Sprite=new Sprite
private var arr:Vector.<INoder>=new Vector.<INoder>
private var searhSize:int=200;
private var ui:UIComponent=new UIComponent
private var definition:int=10
private var _idIndex:int=0
private var item:Noder
private var selete:INoder
private var mouseDown:Boolean
private var clickItem:Noder
private function init():void
{
this.addElement(ui)
this.addElement(txt)
this.addElement(box)
this.addElement(this.add)
this.addElement(this.remove)
this.addElement(this.numStepper)
this.addElement(this.numStepper0)
this.addEventListener(MouseEvent.MOUSE_DOWN,mouseDownFunc);
this.addEventListener(MouseEvent.MOUSE_UP,mouseUpFunc)
for(var i:int=0;i<300;i++){
var s:Noder=new Noder(this.qtree)
s.graphics.lineStyle(1)
s.graphics.beginFill(0xffff00)
s.graphics.drawCircle(0,0,40)
s.x=Math.random()*900>>0
s.y=Math.random()*450>>0
s.vo.id=idIndex.toString()
s.mouseChildren=false
s.mouseEnabled=false
s.cacheAsBitmap=true
ui.addChild(s)
array.push(s)
keys.push(s.vo.id)
if(i==0)item=s;
}
var rect:Rectangle=new Rectangle(0,0,1000,1000)
qtree.setUP(1000/2,1000/2,rect,array,keys);
qtree.graphics=ui.graphics
this.qtree.minSize=10
var b:Timer=new Timer(80)
b.addEventListener(TimerEvent.TIMER,moveFunc);
var hash:Hash=this.qtree.nodes
b.start()
}
private function mouseUpFunc(event:MouseEvent):void
{
mouseDown=false
if(clickItem)clickItem.filters=[]
clickItem=null
}
private function mouseDownFunc(event:MouseEvent):void
{
mouseDown=true
var array:Vector.<INoder>=this.getMouseUnderPoint()
var item:INoder=this.getHitTestPoint(array)
if(item)
{
Noder(item).filters=[new GlowFilter(0x0000ff,1,20,20)]
clickItem=item as Noder
}
}
private function comparFunc(a:INoder,b:INoder):Number
{
var index1:int=DisplayObject(a).parent.getChildIndex(DisplayObject(a))
var index2:int=DisplayObject(b).parent.getChildIndex(DisplayObject(b))
return index2-index1
}
private function get idIndex():int
{
this._idIndex++
return this._idIndex
}
protected function add_clickHandler(event:MouseEvent):void
{
for(var i:int=0;i<10;i++){
var s:Noder=new Noder(this.qtree)
s.graphics.lineStyle(2)
s.graphics.beginFill(0)
s.graphics.drawCircle(0,0,(Math.random()*3>>0)+20)
s.x=Math.random()*900>>0
s.y=Math.random()*450>>0
s.vo.id=idIndex.toString()
s.mouseEnabled=false;
s.mouseChildren=false
s.cacheAsBitmap=true
ui.addChild(s)
array.push(s)
}
}
public function getHitTestPoint(array:Vector.<INoder>):INoder
{
if(array.length<1)return null;
array=array.sort(comparFunc);
for(var i:int=0;i<array.length;i++)
{
var item:INoder=array[i]
if(DisplayObject(item).hitTestPoint(this.mouseX,this.mouseY)){
return item
break
}
}
return null
}
protected function remove_clickHandler(event:MouseEvent):void
{
try{
for(var i:int=0;i<10;i++)
{
var item:Noder=array.shift() as Noder
item.unload()
item.parent.removeChild(item)
}
}catch(e:Error)
{
}
}
private function moveFunc(event:TimerEvent):void
{
if(!this.mouseDown){
for(var i:int=0;i<this.array.length;i++){
var item:Noder=array[i] as Noder
item.x+=item.vx*item.a
if(item.x>900||item.x<0)
{
item.a=-item.a;
}
item.y+=item.vy*item.b
if(item.y>500||item.y<0)
{
item.b=-item.b;
}
}
if(selete)
{
Noder(selete).filters=[]
}
var t:Number=getTimer();
// arr=getMouseUnderPoint()
// selete=getHitTestPoint(arr)
// this.txt.text='区域内共有:'+arr.length+'个对象 搜索时间:'+String(getTimer()-t)+' 毫秒'
// this.box.text='对象数:'+array.length.toString()
if(selete){
Noder(selete).filters=[new GlowFilter];
}
}
}
private function getMouseUnderPoint():Vector.<INoder>
{
var vx:Number=this.mouseX-searhSize/2;
var vy:Number=this.mouseY-searhSize/2;
this.ui.graphics.clear();
this.ui.graphics.drawRect(vx,vy,searhSize,searhSize)
var rect2:Rectangle=new Rectangle(vx,vy,searhSize,searhSize)
return qtree.find(this.qtree.node,rect2,definition)
}
private function sizeChangeFunc():void
{
this.searhSize=this.numStepper.value
}
private function sizeChangeFunc2():void
{
this.definition=this.numStepper0.value
}
]]>
</fx:Script>
<s:NumericStepper visible="false" id="numStepper" width="55"
change="sizeChangeFunc()" snapInterval="2" x="313" y="39" minimum="10" maximum="500" value="100" stepSize="10"/>
<s:NumericStepper visible="false" id="numStepper0" width="55"
change="sizeChangeFunc2()" snapInterval="5" x="423" y="39" minimum="10" maximum="200" value="10" stepSize="5"/>
<s:TextInput id="txt" x="10" y="10" width="468"/>
<s:TextInput id="box" x="10" y="36"/>
<s:Button click="add_clickHandler(event)" id="add" x="210" y="40" label="+" width="31"/>
<s:Button click="remove_clickHandler(event)" id="remove" x="249" y="40" label="-" width="26"/>
<s:Label x="146" y="49" text="添加屏遮物"/>
</s:Application>
发表评论
-
as3 Loader 加载资源后内存泄露无法释放的问题。
2014-06-21 10:30 631as3 Loader 加载资源后内存泄露无法释放的问题。 ... -
as3判断flash player版本的函数
2014-06-10 20:35 790//判断当前版本是否高于9.0.115.0为例子. pr ... -
CSS 中文字体的英文名称 (simhei, simsun) 宋体 微软雅黑
2014-04-03 15:25 957华文细黑:STHeiti Light [STXihei]华文 ... -
as3.0的垃圾回收机制
2013-09-07 14:02 1459还是同样的博客,还是同样的作者(Daniel Sidhio ... -
AIR程序多开
2013-09-07 13:55 963AIR应用通常不能像QQ那样能进行多开操作。为了让一个用AI ... -
starling性能优化总结
2013-07-22 14:06 1437在项目开发的过程中总结了一下starling的性能优化方案: ... -
AS3 Socket从零开始
2013-07-22 12:54 1063大家如果想学AS3 Socket直接在百度里搜一下,会找到很 ... -
绕开AS3安全沙箱 跨域加载SWF
2013-07-11 12:53 858AS3的安全沙箱的确是 ... -
解决AS3在ie中初始化时stageWidth和stageHeight为0
2013-06-14 09:23 964先看下面的一段脚本,这是比较经典的初始化脚本: pac ... -
动态获取swc中的类
2013-05-25 10:32 906想通过代码生成,来获取swc中的类,并且可以作为普通类正常使 ... -
AS3 中字符串的format功能实现
2013-05-25 10:19 800使用C#的朋友都知道,string.Format();还是挺 ... -
总结调用Flash的几种方法
2013-05-02 16:18 1619一、Adobe 提供的方法 <object wi ... -
Flash3D错误集锦
2013-05-02 14:03 886VerifyError: Error #1014: 无法找到 ... -
使用scale拉伸之后的坐标问题
2013-04-12 09:38 1234最近发现论坛多了很多 ... -
30个实用的网页设计工具
2013-03-20 09:58 773作为一位网页设计师或开发者,你一直需要搜寻获取强大的网页设计 ... -
如何成为强大的程序员?
2013-03-11 11:27 692Aaron Stannard是新创公 ... -
漫谈重构
2013-03-11 11:09 814因为工作内容的原因, ... -
AS3使用谷歌API生成二维码
2012-12-10 16:24 1304二维码在新闻杂志,网站,网络广告,电视广告等地方随处可见 ... -
OOP的聚合原则
2012-12-10 16:21 894什么是聚合? 聚合可以很好地表达对象是什么和做 ... -
压缩速率追踪
2012-11-02 14:16 1421Flash Player 11.3添加了一个压缩和解压B ...
相关推荐
子集和问题的一个实例为?St?〈St〉。其中,S={x1,x2,…,xn}S={x1,x2,…,xn}是一个正整数的集合,c是一个正整数。子集和问题判定是否存在 S 的一个子集 S1,使得 ∑x∈S1x=c ∑x∈S1x=c。试设计一个解子集和...
子集和问题 Description 子集和问题的一个实例为〈S,t〉。其中,S={x1,x2,...,xn}是一个正整数的集合,c 是一个正整数。子集和问题判定是否存在S的一个子集S1,使得x∈S1,∑x=c. 试设计一个解子集和问题的回溯法...
试写一个递归算法实现求一个集合的所有子集。 算法设计: 给定一个非空的集合,用递归算法输出它的所有子集。 数据输入: 由文件input.txt 提供输入数据。文件第1行是集合中的元素个数,第2行是集合的元素序列(元素...
问题描述: 子集和问题的一个实例为〈S,t〉。其中,S={ 1 x , 2 x ,…, n x }是一个正整数的集合,c是一... 程序运行结束时,输出子集和问题的解输。当问题无解时,输出“No Solution!”(solution开头是大写)。
截取字体文件的一个子集,使用于ttf格式
子集和问题判定是否存在S 的一个子集S1,使得子集里的元素之和为c 试设计一个解子集和问题的回溯法。 算法设计:对于给定的正整数的集合S={x1,x2,...,xn}和正整数c,计算S的一个子集S1,使得子集里的元素之和为c。 ...
C语言子集的解释器,可自举。把C源码编译成机器码执行。VS2010 C工程。
为综合考虑特征选择中多种子集评价方式间的折中,优化子集性能,提出一种基于子集评价多目标优化的特征选择框架,并重点对多目标粒子群优化(MOPSO)在特征子集评价中的应用进行了研究。该框架分别根据子集的稀疏度...
子集和问题的一个实例为〈S,c〉。其中,S={x1,x2,…,xn}是一个正整数的集合,c是一个正整数。子集和问题判定是否存在S的一个子集S1,使得 ∑x=c, (其中x∈S1)。试设计一个解子集和问题的方法。你可以假设处理范围...
C/C++语言编程安全子集
C语言子集词法分析上交报告
ImageNet是个非常庞大的数据集,该资源为ImageNet的子集,包含2200多张大象的自然图像
用回溯法实现子集和问题的完整代码
特征子集选择和训练参数的优化一直是SVM研究中的两个重要方面,选择合适的特征和合理的训练参数可以提高SVM分类器的性能,以往的研究是将两个问题分别进行解决。随着遗传优化等自然计算技术在人工智能领域的应用,...
很多人在算法分析中说打印子集很难 我当初用c编写的一个程序,是利用文件的打开,复制存取中间子集来实现了打印所有的子集
完整的VC++子集和程序,用回溯法实现的,可以运行。在算法分析与设计上的一个实验。
得知根节点的ID查询出此节点下所有的子集,并可以转成json格式
实现了一个C语言简单子集的编译器点段部分 可以将文法定义的合法的源代码转化为四元式 实现了词法分析、语法分析、语义分析部分 进行文件的输入输出,从文件读取文法、源代码、将四元式输出到文件