【问题标题】:Random Pixels Blink White for 1/60th of a Second随机像素呈白色闪烁 1/60 秒
【发布时间】:2013-02-21 05:01:20
【问题描述】:

我试图让单个像素闪烁 1/60 秒,然后在 2 秒内消失,直到 1280x720 屏幕上的每个像素都闪烁白色。 2 秒后屏幕再次全黑 3 秒左右,然后循环并再次执行。

我解决它的方法是使用另一个 stackoverflow 用户提出的这个 fla,我修改它使用电影剪辑。问题是让 921600 影片剪辑随机开始是行不通的。它变得非常沉重和缓慢。请参阅适用于

的附件

无论如何!我确信有一种超级聪明的方法可以做到这一点。我是新手。感谢您提供任何帮助或建议。

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

瑞士法郎 https://mega.co.nz/#!kBoxmJCR!Mx7sHX94-9ch15dKdT8knHRRKRljytZXdOBK-2P-TLQ

最好, 罗林

对于我在上面链接到的 fla 的原始设计,请参阅 Mahmoud Abd El-Fattah 在此链接上的解决方案。 Random Start Times for Move Clips

【问题讨论】:

  • 奇怪的网站,它不接受我的 FF13 作为“可接受的浏览器”,不,我不想仅仅为了花里胡哨而更新 FF。 ...实际上,921600 个 MC 每个都带有一个单点是一个巨大的矫枉过正,使用单个 BitmapData(带有位图包装器)并使用 setPixel32() 更改其颜色。
  • @Vesper 这里是一个保管箱链接。除了看看它应该是什么样子之外,我不认为这个文件很有用。我知道我所拥有的是超级笨重的疯狂矫枉过正,但我​​不知道如何使用您所说的这个位图包装器。但是感谢您朝着一个方向前进。 dl.dropbox.com/u/753249/exposure7_2.fladl.dropbox.com/u/753249/exposure7_2.swf

标签: actionscript-3 flash actionscript flash-cs5


【解决方案1】:

好的,最简单的方法是这样的:

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);
}

【讨论】:

  • 嘿。我完全愚蠢,实际上不知道如何使用您编写的代码。看起来这是有道理的,如果我能让它发挥作用,cmets 看起来会很有用。我把它放在一个空白的关键帧上吗?我需要导入单像素图像吗?抱歉,我对这些东西完全陌生。
  • 嗯,BitmapData 已经由像素组成。这段代码可以放在类中或关键帧上,如果是关键帧,您必须调用Main() 或删除function Main() {} 行,以便里面的代码执行一次。最好将此代码放入扩展Sprite 的类中,以便Main() 成为其构造函数(为此重命名函数),并调用addChild(new MyBlinkingStuff());
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-18
  • 2017-08-24
  • 2019-10-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多