不久前,我按照教程制作了一个粒子类。基本上它使用某种虚拟列表,替换数组方法,这使得它非常快速的解决方案。所以一切都很好,除了我真的不明白到底发生了什么。这很令人困惑,所以我试图在这些东西中找到逻辑,不幸的是没有成功。如果有人能真正解释这一点,我会很高兴,所以我可以把它变成有用的东西。
package
{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.events.Event;
import Part;
import FPSCounter;
public class Pixels extends Sprite
{
private var num:int = 500000;
private var sw:Number = stage.stageWidth;
private var sh:Number = stage.stageHeight;
private var bdata:BitmapData=new BitmapData(sw,sh,false,0x111111);
private var bmp:Bitmap = new Bitmap(bdata);
private var firstParticle:Part;
private var radius:Number;
private var range:Number;
private var color:uint = 0xffffff;
public function Pixels()
{
addChild(bmp);
addChild(new FPSCounter());
createParticles();
addEventListener(Event.ENTER_FRAME,anim);
}
private function createParticles():void
{
var lastParticle:Part;
for (var i:int = 0; i < num; i++)
{
radius = Math.random() * (2 * Math.PI);
range = Math.random() * (2 * Math.PI);
var thisP:Part = new Part;
thisP.x = sw / 2;
thisP.y = sh / 2;
thisP.xvel=Math.sin(range) * radius;
thisP.yvel = Math.cos(range) * radius;
if (i == 0)
{
firstParticle = thisP; }
else
{
lastParticle.next = thisP; // ????
}
lastParticle = thisP;
}
}
private function anim(event:Event):void
{
var p:Part = firstParticle;
bdata.lock();
p = firstParticle;
bdata.fillRect(bdata.rect, 0x111111);
do
{
p.y += p.xvel;
p.x += p.yvel;
bdata.setPixel(p.x, p.y, color);
p = p.next;
}
while (p != null)
bdata.unlock();
}
}