Avatar billede brandy Nybegynder
27. november 2006 - 10:54 Der er 12 kommentarer og
1 løsning

Float koordinater

Hej!

Det skulle være muligt at angive koordinater med decimaler. Dette fungerer dog ikke som ventet.
Eksempel:
MC._y = 0.532354118;
trace(MC._y);

Output:
0.5

Jeg har forsøgt mig med:
newY = 0.54564455112;
MC._y = parseFloat(newY);

Men det giver samme resultat. Er der nogen af jer der rent faktisk har en løsning på dette?
Samme problem:
http://chattyfig.figleaf.com/pipermail/flashcoders/2002-December/057360.html
Relateret indhold:
http://ohwhen.typepad.com/mx_traveller/2004/05/the_mystery_of_.html
Avatar billede maqhem Nybegynder
27. november 2006 - 16:16 #1
Du kan med meget gode øjne ane en halv pixels forskel, hvad skal du dog med en 20 milliardnedel af en pixel?
Jeg har to løsninger:

1. Find nogle bedre tal, det andet er umuligt at ane - og i det hele taget også umuligt for computeren at vise. Så mange farvekoder har den slet ikke :)

2. Lav en variabel, der repressenterer dens x- og y-værdier. Personligt ville jeg foretrække dette, og lave en lille klasse, der extender MovieClip som følgende:

class Mc extends MovieClip {
    private var xVærdi:Number;
    private var yVærdi:Number;
    function Mc() {
        xVærdi = this._x;
        yVærdi = this._y;
    }
    function set _xVærdi(newX):Void {
        xVærdi = newX;
        this._x = newX;
    }
    function set _yVærdi(newY):Void {
        yVærdi = newY;
        this._y = newY;
    }
    function get _xVærdi():Number {
        return xVærdi;
    }
    function get _yVærdi():Number {
        return yVærdi;
    }
}

Nu ved jeg ikke, hvor ferm du er til ActionScript, men ellers kan du i dit ActionScript skrive:

a._xVærdi = 20.15684;
a._yVærdi = 60;
trace("x: " + a._xVærdi + ", y: " + a._yVærdi);

Hvor a er instance på et MovieClip på din scene.

Derefter går du ind i library, højreklikker på det MovieClip, du arbejder med, og trykker Properties. Sørg for at visningen er Advanced og ikke bare Basic. Marker Export for ActionScript, og så markeres Export in first frame også. Derefter skal du i AS 2.0 Class skrive Mc, og i Identifer kan du skrive, hvad du vil - jeg har skrevet mc.

Så trykker du bare Ok, og så er det faktisk ikke sværere :)
Avatar billede maqhem Nybegynder
27. november 2006 - 16:18 #2
Det skal lige siges, at din klasse (koden, jeg skrev først) skal ligge i en fil, der hedder Mc.as i samme mappe som din fla-fil.
Avatar billede maqhem Nybegynder
27. november 2006 - 16:25 #3
Jeg vil lige pointere, at min løsning ikke påvirker MovieClippet med de sidste 0,00684 px, og dens "rigtige" x-værdi er nok 20,16 eller 20,2 - men hér snakker vi tiende- og hundrede dele af en enhed, du knap kan ane med det blåtte øje. Så i praksis virker min metode ikke, men rent teoretisk - og efter øjet duelighed - fungerer min metode fint.
Avatar billede maqhem Nybegynder
27. november 2006 - 16:30 #4
Jeg har lavet et lille eksempel:

Kode
--
a._xVærdi = 20.1928941236;
a._yVærdi = 60.9999999999;
trace("Teori:\nx: " + a._xVærdi + ", y: " + a._yVærdi + "\n\nPraksis:\nx: " + a._x + ", y:" + a._y);

Output
--
Teori:
x: 20.1928941236, y: 60.9999999999

Praksis:
x: 20.15, y:60.95
Avatar billede maqhem Nybegynder
27. november 2006 - 17:28 #5
Jeg retter lige klassen lidt til - ikke at det gør nogen betydelig forskel, men så ser det bedre ud ;)

class Mc extends MovieClip {
    private var xVærdi:Number;
    private var yVærdi:Number;
    function Mc() {
        xVærdi = this._x;
        yVærdi = this._y;
    }
    public function set _xVærdi(newX):Void {
        this._x = xVærdi = newX;
    }
    public function set _yVærdi(newY):Void {
        this._y = yVærdi = newY;
    }
    public function get _xVærdi():Number {
        return xVærdi;
    }
    public function get _yVærdi():Number {
        return yVærdi;
    }
}
Avatar billede maqhem Nybegynder
27. november 2006 - 17:29 #6
... måske burde der også stå public foran contructoren. Pyt.
Avatar billede maqhem Nybegynder
27. november 2006 - 17:35 #7
Jeg vil også lige sige, at du godt kan sætte samme klasse på flere movieclips, men husk at give dem hver især en unik linkage (identifier). Eller beder Flash dig bare ændre den. Og så kan du altså ikke undgå at give dem en identifier - måske til tider lidt upraktisk.

Nåh, jeg går da helt banannas. Jeg tror, jeg stopper nu :)
Avatar billede brandy Nybegynder
28. november 2006 - 09:11 #8
Det var et meget velskrevet, pænt og langt svar du kom med der :)
Det er meget essentielt, at jeg bibeholder de korrekte koordinater, det være sig både

2.5 og 2.4765878

Det er selvfølgelig underligt, når man ikke visuelt kan se en sådan forskel.
Ja, jeg er en rimelig erfaren AS'er ;-)

Meget pæn kode du har lavet i øvrigt.

Jeg har fået en idé ud fra det du har lavet, som jeg vil efterprøve. Jeg vender tilbage.
Avatar billede maqhem Nybegynder
28. november 2006 - 09:22 #9
Det er bare i orden :)
Avatar billede brandy Nybegynder
28. november 2006 - 10:42 #10
Du får point - projektet bliver lige lagt på is i 1 uges tid, men jeg kan sikkert bruge noget af det du har skrevet :-)
Avatar billede maqhem Nybegynder
28. november 2006 - 10:55 #11
Tak. Må jeg spørge, hvorfor de sidste tusinde-, titusinde- og hundredetusindedele er nødvendige?
Avatar billede maqhem Nybegynder
26. februar 2007 - 09:27 #12
Jeg gentager lige: "1 uges tid...". Nu er det cirka 13 uger siden :)

Kommer der en reaktion fra dig...?
Avatar billede brandy Nybegynder
01. marts 2007 - 13:14 #13
Undskylder ventetiden - har haft barselorlov :-)
Fandt ud af en løsning der tager højde for det "spild", som Flash ikke kan håndtere. Dette kombineret med min og din "løsning" er blevet enden på det.
Takker!
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