|
  
- 精华
- 0
- 积分
- 359
- 威望
- 1 点
- 银子
- 575 两
- 金子
- 0 两
|
13#
发表于 2010-1-1 15:02
| 只看该作者
优化的误区.
我这回真的把判断,改成了双for 来做了.
function onEnterFrame(event:Event):void
{
updateBalls();
for (var i:int =0; i < _numBalls ; i++)
{
for (var j:int =0 ; j< _numBalls ;j++)
{
if (i!=j){
if (checkCollision(_balls[j] as Ball, _balls[i] as Ball))
break;
}
}
}
}
为了避免当有球"碰撞"的时候,再判断其它球.
直接break 了.
然后,发现CPU其实并没有下降多少,当然,按书上的道理来讲,其实应该是上升的.
为了探寻究竟.
我把.代码改为.
function onEnterFrame(event:Event):void
{
updateBalls();
//for (var i:int =0; i < _numBalls ; i++)
// {
// for (var j:int =0 ; j< _numBalls ;j++)
// {
// if (i!=j){
// if (checkCollision(_balls[j] as Ball, _balls[i] as Ball))
// break;
// }
//
// }
//
//
// }
}
注意看,
每一祯,我只保留圆形动的脚本,
把判断,改变色彩的全关掉.
大家是不是感觉这次CPU会一下子降下去很多了???
事实上,CPU一点没有降.
至少从我这里看是这样.
也就是说,书中的这个例子.
根本上看不出,分格子判断相碰,还是用原始的循环方式来判断相碰,
均在CPU占有率上看不出效果.
因为事实上,显示那100个小圆占了90%以上的成份.
用代码证明一下.
构造函数中只加小球.
public function GridCollision3()
{
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
_grid = new CollisionGrid(stage.stageWidth, stage.stageHeight, GRID_SIZE);
graphics.lineStyle(0, .5);
for(var i:int = 0; i <= stage.stageWidth; i += 80)
{
graphics.moveTo(i, 0);
graphics.lineTo(i, stage.stageHeight);
}
for(i = 0; i <= stage.stageHeight; i += 80)
{
graphics.moveTo(0, i);
graphics.lineTo(stage.stageWidth, i);
}
makeBalls();
//addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
小球代码.
public class Ball extends Sprite
{
private var _color:uint;
private var _radius:Number;
private var _vx:Number = 0;
private var _vy:Number = 0;
public var _moveRect :Rectangle ;
private var _whitecircle:Sprite = new Sprite();
private var _redcircle : Sprite= new Sprite();
public function Ball(radius:Number, color:uint = 0xffffff)
{
_radius = radius;
_color = color;
drawWhiteCircle();
drawRedCircle();
this.addEventListener(Event.ENTER_FRAME , onFrame);
}
private function onFrame(ee:Event)
{
update();
}
function drawWhiteCircle()
{
_whitecircle = new Sprite();
with (_whitecircle){
graphics.lineStyle(0);
graphics.beginFill(0xff0000, 1);
graphics.drawCircle(0, 0, _radius);
graphics.endFill();
graphics.drawCircle(0, 0, 1);
}
this.addChild(_whitecircle);
}
function drawRedCircle()
{
_redcircle = new Sprite();
with (_redcircle){
graphics.lineStyle(0);
graphics.beginFill(0xffffff, 1);
graphics.drawCircle(0, 0, _radius);
graphics.endFill();
graphics.drawCircle(0, 0, 1);
}
this.addChild(_redcircle);
}
public function setRED(red :int)
{
if (red==1)
{
if (this.getChildIndex(_whitecircle)==0)
swapChildren(_whitecircle,_redcircle )
}else
{
if (this.getChildIndex(_whitecircle)==1)
swapChildren(_whitecircle,_redcircle )
}
}
public function update():void
{
// add velocity to position
if(this.x < _moveRect.left )
{
_vx *= -1;
}
else if(this.x >_moveRect.right)
{
_vx *= -1;
}
if(this.y < _moveRect.top)
{
_vy *= -1;
}
else if(this.y >_moveRect.bottom)
{
_vy*= -1;
}
x += _vx;
y += _vy;
}
小球只是随每祯移动.
CPU基本上和书中的例子 相差无几.
所以如果真的把这个实例的CPU优化下来了.
那一定是优化小球,显示..
比如,把小球换成死元件.等...这样一来,
优化的方向和书中的本意就相差很远了. |
|