1

単一ピクセルを 1/60 秒間点滅させ、1280x720 画面上のすべての単一ピクセルが白く点滅するまで 2 秒間かけて消えようとしています。2 秒が経過した後、画面は再び 3 秒ほど真っ黒になり、ループして再び実行されます。

私がそれを解決した方法は、別のstackoverflowユーザーが思いついたこのflaを使用することで、ムービークリップを使用するように変更しました。問題は、921600 個のムービー クリップをランダムに開始することができないことです。それは本当に重くて遅くなります。動作する添付ファイルを参照してください

ともかく!これを行うための非常にスマートな方法があると確信しています。私は初心者です。助けや提案をありがとう。

フラ (cs5) https://mega.co.nz/#!ERRFiJBJ!VYSaH164BcjD9QIiSdpk8WxFp68dYDC0vWzKySC8rg0

swf https://mega.co.nz/#!kBoxmJCR!Mx7sHX94-9ch15dKdT8knHRRKRljytZXdOBK-2P-TLQ

最高、ローリン

上記にリンクしている fla の元のデザインについては、このリンクの Mahmoud Abd El-Fattah によるソリューションを参照してください。 ムーブ クリップのランダムな開始時間

4

1 に答える 1

2

さて、最も簡単な方法は次のようになります。

static const WIDTH:int=1280;
static const HEIGHT:int=720;
static const WH:int=WIDTH*HEIGHT;
static const FRAMES:int=120; // 2 seconds * 60 frames. Adjust as needed
static var VF:Vector.<int>; // primary randomizer
static var BD:BitmapData; // displayed object
static var curFrame:int; // current frame
static var BDRect:Rectangle;
function init():void {
    // does various inits
    if (!VF) VF=new Vector.<int>(WH,true); // fixed length to optimize memory usage and performance
    if (!BD) BD=new BitmapData(WIDTH,HEIGHT,false,0); // non-transparent bitmap
    BDRect=BD.rect;
    BD.fillRect(BDRect,0); // for transparent BD, fill with 0xff000000
    curFrame=-1;
    for (var i:int=0;i<WH;i++) VF[i]=Math.floor(Math.random()*FRAMES); // which frame will have the corresponding pixel lit white
}
function onEnterFrame(e:Event):void {
    curFrame++;
    BD.lock();
    BD.fillRect(BDRect,0);
    if ((curFrame>=0)&&(curFrame<FRAMES)) {
        // we have a blinking frame
        var cw:int=0;
        var ch:int=0;
        for (var i:int=0;i<WH;i++) {
            if (VF[i]==curFrame) BD.setPixel(cw,ch,0xffffff);
            cw++; // next column. These are to cache, not calculate
            if (cw==WIDTH) { cw=0; ch++; } // next row
        }
    } else if (curFrame>FRAMES+20) {
        // allow the SWF a brief black period. If not needed, check for >=FRAMES
        init(); 
    }
    BD.unlock();
}
function Main() {
    init();
    addChild(new Bitmap(BD));
    addEventListener(Event.ENTER_FRAME,onEnterFrame);
}
于 2013-02-21T05:41:02.040 に答える