Avatar billede kalleballe Nybegynder
08. januar 2007 - 11:40 Der er 4 kommentarer og
1 løsning

fikant bygget op af pixels

Hej, - hvordan laver jeg en firkant på f.eks. 300x300, - men således at det er random pixels der efter hånden danner firkanten?

vh

KalleBalle
Avatar billede _k Nybegynder
08. januar 2007 - 20:33 #1
Det var da en sjov lille opgave. Her har du mit bud. Håber det var noget i den stil du ledte efter?

var squareSize:Number = 10;
var squareColour:Number = 0xFF0000;
var squaresHor:Number = 6;
var squaresVer:Number = 6;
var square_arr:Array = new Array();
var intervalId:Number;
var count:Number = 0;
var duration:Number = 100;
var maxCount:Number;

buildAllSquares();

maxCount = squaresHor*squaresVer;

intervalId = setInterval(this, "showSquare", duration);

function showSquare() {
    square_arr[count]._visible = true;
    if(count >= maxCount) {
        clearInterval(intervalId);
    }
    count++;
}


function buildAllSquares() {
    for(var i:Number=0;i<squaresHor;i++) {
        for(var j:Number=0;j<squaresVer;j++) {
            var mc:MovieClip = buildSquare("mc"+i+"_"+j);
            mc._x = j*squareSize;
            mc._y = i*squareSize;
            mc._visible = false;
            square_arr.push(mc);
        }
    }
    square_arr.sort(function(){return random(3)-1;});
}

function buildSquare(mc_name:String) {
    var mc:MovieClip = this.createEmptyMovieClip(mc_name, this.getNextHighestDepth());
    mc.beginFill(squareColour);
    mc.moveTo(0, 0);
    mc.lineTo(squareSize, 0);
    mc.lineTo(squareSize, squareSize);
    mc.lineTo(0, squareSize);
    mc.lineTo(0, 0);
    mc.endFill();
   
    return mc;
    }
Avatar billede kalleballe Nybegynder
08. januar 2007 - 21:22 #2
hehe,- jeg jeg løste den med denne kode... men din er også fin :)

import flash.display.BitmapData;
import flash.geom.Point;
var bm:BitmapData = new BitmapData (831, 467, true, 0xffffff);
var cont:MovieClip = _root.createEmptyMovieClip ("cont", this.getNextHighestDepth ());
var interval:Number;
var td:Number = 0;
var tp:Number = bm.width * bm.height;
var dissolveSpeed:Number = 3000;
bm.draw (BitmapData.loadBitmap ("bitmappen"));
cont.attachBitmap (bm, this.getNextHighestDepth ());

   

function dissolve (randomNum:Number)
{
    updateAfterEvent ();
    var newNum:Number = bm.pixelDissolve (bm, bm.rectangle, new Point (0, 0), randomNum, dissolveSpeed, 0);
    clearInterval (interval);
    if (td < tp)
    {
        interval = setInterval (dissolve, 1, newNum);
    }
    td += dissolveSpeed;
}

dissolve (Math.random () * 10 | 0);

Smid et svar så få r du points.

vh

KalleBalle
Avatar billede _k Nybegynder
09. januar 2007 - 11:24 #3
Ja, at bruge BitmapData er givet både hurtigere og giver et pænere resultat. Jeg vidste faktisk ikke at der var en "pixelDissolve", men så er jeg jo også blevet klogere ;)

Jeg smider et svar, men snup da bare en masse point selv, nu hvor du ikke bruger min løsning alligevel.
Avatar billede kalleballe Nybegynder
09. januar 2007 - 11:58 #4
Det er tanken der tæller :)
Avatar billede _k Nybegynder
09. januar 2007 - 12:03 #5
Jamen så siger jeg mange tak :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester