Det ville godt nok være et helvede at skulle beregne. Men det skal da nok kunne lade sig gøre. Du kan jo ikke bare tælle "antallet" af tegnede firkanter, for de vil jo lappe over hinanden...
jeg fik lige en ide, men som jeg godt var klar over er det noget tungt lort:
this.createEmptyMovieClip("square", 10); var size = 25; function drawSquare() { x = _root._xmouse; y = _root._ymouse; with (this.square) { moveTo(x - size, y - size); beginFill(0x000000); lineTo(x + size, y - size); lineTo(x + size, y + size); lineTo(x - size, y + size); endFill(); } } image.setMask(_root.square); this.onMouseDown = function() { this.onMouseMove = function() { drawSquare(); updateAfterEvent(); }; }; this.onMouseUp = function() { checkProcent(); delete this.onMouseMove; }; //**************** function checkProcent() { w = image._width; h = image._height; x = image._x; y = image._y; pixels = 0; hit = 0; for (var i = x; i <= x + w; i++) { for (var j = y; j <= y + h; j++) { pixels++; if (square.hitTest(i, j, false)) { hit++; }
} } p = hit/pixels*100; txtProcent.text = p; }
Og så virker det ikke engang. Jeg kan åbenbart ikke finde ud af at bruge hitTest. Den rammer bounding boxen og ikke selve shapen selvom jeg har sat den til false. Kan det ikke lade sig gøre?? Det synes jeg at jeg har gjort før...
function checkProcent() { w = image._width; h = image._height; x = image._x; y = image._y; pixels = 0; hit = 0; for (var i = x; i <= x + w; i+=10) { for (var j = y; j <= y + h; j+=10) { pixels++; if (square.hitTest(i, j)) { hit++; }
Det burde jo være: function checkProcent() { w = image._width; h = image._height; x = image._x; y = image._y; pixels = 0; hit = 0; for (var i = x; i <= x + w; i++) { for (var j = y; j <= y + h; j++) { pixels++; if (square.hitTest(i, j, true)) { hit++; }
} } p = hit/pixels*100; txtProcent.text = p; }
Men så virker det slet ikke, kan man ikke lave en hittest på noget som er tegnet dynamisk?
Man kunne også have et 2D array, som havde lige så mange celler som pilledet have pixels og som var 0 fra starten. Når man så tegner en firkant, så sætter man de size*size felter i array til 1. Når man slipper den, så kan man tæller 1'er fremfor 0'er.
Men det vil blive et stort array - 200*200 pixels giver et array med 40000 felter.
Måske man skulle have et felt for hver 5 eller 10 pixels. Samme optimering kunne man lave med jakobs ide.
ja, hastigheden vil nok ikke blive stort bedre af at det er en array den skal loope igennem. Og ja, som jeg skrev tidligere kan man lave en estimeret ved at nøjes med hver 10.
Jeg tror nu at opslå på en fixed værdi i et array er hurtigere end at beregne en hittest. Det kan jeg laves som et faked 2d array i 1d - altså bare en lang liste, hvor man selv kender offset. Det gør meget hurtigere end et rigtigt 2d. Men ja, prøv :)
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.