얼마 전에 입문서를 통해 입자 클래스를 만들었습니다. 기본적으로 그것은 일종의 가상리스트를 사용하고, 배열 메소드를 대체하여 정말 빠른 솔루션이됩니다. 그래서 실제로는 실제로 무슨 일이 일어나는지 이해할 수 없다는 사실을 제외하고는 모든 것이 완벽하게 작동합니다. 불행히도 성공하지 못해이 물건에서 논리를 찾으려고 노력하는 것이 꽤 혼란 스럽습니다. 누군가가 이것을 설명 할 수 있다면 기쁠 것입니다. 그래서 뭔가 유용한 정보를 얻을 수 있습니다.AS3 가상 입자 배열
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();
}
}
감사를 대답. 예제에서 50 만 개의 입자가 있기 때문에 벡터가 좋은 선택이라고 생각하지 않습니다. 이 모든 것을 반복하는 데 많은 시간이 걸릴 것입니다. – 5et
어떤 경우에도 많은 시간이 소요되며 Vector는 인덱스 액세스에 적합합니다. 그러나 일반적으로 파티클이 생성되고 파기되면 사람들은 ActionScript를 기본값으로 사용하지 않기 때문에 목록을 코딩합니다. – alxx
특정 인덱스 p [xxx]에서 파티클에 액세스 할 필요가없는 경우 연결된 목록이 벡터 – Patrick