Avatar billede adoks Nybegynder
05. april 2006 - 11:35 Der er 15 kommentarer og
1 løsning

Få kordinaterne fra et objekt

Jeg bruger Flash MX 2004. Jeg har et layer for mine objekter
og et for mine actionsscript. Min ide er at brugerene online skal kunne flytte rundt på nogle objekter for derefter at gemme kordinaterne på en database, som så skal hentes frem igen.

Men jeg er stødt på det første problem, som er at jeg ikke kan få fat på x og y kordinaterne på mine Movie Clip objekter.
Min kode for at få fat i kordinaterne på objektet p1 ser således ud:

O1x = math.floor(getProperty(_root.p1, _x));
O1y = math.floor(getProperty(_root.p1, _y));

Men værdien den finder er "undefined"

For at brugeren kan flytte rundt på objekterne benytter jeg følgende actionscript, det virker :-)

on (press) {
    this.startDrag();
}
on (release) {
    this.stopDrag();
}

På forhånd tak
Avatar billede _k Nybegynder
05. april 2006 - 11:57 #1
Lige for at slå det fast: getProperty døde med Flash 4! Macromedia har sært nok ikke smidt det ud, men de anbefaler KRAFTIGT at man ikke bruger det mere. Så dropsyntaksen mens tid er ;)

Hvis du har smidt ovenstående på et mc, kan du finde værdierne sådan her:

on (press) {
    this.startDrag();
}
on (release) {
    this.stopDrag();
    trace("x-værdi: " + this._x);
    trace("y-værdi: " + this._y);
}

"trace" skriver information til dig i output-vinduet. Brugeren vil aldrig se en trace.
Du vil sikkert assigne værdierne til nogle variable og smide dem efter et php-script med enten LoadVars() eller XML.send() ?
Avatar billede adoks Nybegynder
05. april 2006 - 14:25 #2
Fino det virker, men hvordan assigner du så kordinaterne til variabler, jeg skal nemlig have dem sendt videre til en php fil.
Avatar billede _k Nybegynder
05. april 2006 - 14:56 #3
Du kan jo sådan ca. bygge det på en mio. forskellige måder, men sad jeg med det, ville jeg nok bygge afviklingen op på funktioner. Noget i retning af: (kode på tidslinjen)

var posLoadVars:LoadVars = new LoadVars();
function sendInf(obj:MovieClip, xPos:Number, yPos:Number) {
  posLoadVars.mc = obj;
  posLoadVars.xPos = xPos;
  posLoadVars.yPos = yPos;
  posLoadVars.onLoad(success) {
    if(success) { trace("Det gik da meget godt"); }else { trace("fejl i afsendelsen af variable"); }
  }
  posLoadVars.send("http://www.somewhere.com/dinPHPside.php", POST);
}

...og på dit mc:

on (release) {
    this.stopDrag();
    _parent.sendInf(this, this._x, this._y);
}

..du skal fjerne "_parent" hvis du arbejder på en knap og ikke et mc.

Variablene bliver postet til php-siden som så skal fange dem.
Avatar billede adoks Nybegynder
05. april 2006 - 15:48 #4
Hver gang at jeg publisher flashen får jeg fejl ved denne kode:

posLoadVars.onLoad(success) {

Jeg kan ikke selv se nogen fejl, men jeg kan tilgengæld heller ikke få fat i variablerne xPos og yPos via PHP, om det har noget med flash fejlen at gøre, heller mit php ved jeg ikke
Avatar billede _k Nybegynder
05. april 2006 - 15:53 #5
Ja, sådan går det jo når man skriver hurtigere end man tænker - det passer jo nok ikke, men lyder meget godt ;)

posLoadVars.onLoad = function(success) {
Avatar billede adoks Nybegynder
05. april 2006 - 16:33 #6
Jeg tror ikke at Flash på noget tidspunkt går ind i funktionen sendInf(). Der kommer ihvertfald ikke et output vindue når jeg flytter mit MC'er
Avatar billede _k Nybegynder
05. april 2006 - 17:00 #7
Smid en trace ind i starten af funktionen for at tjekke.

Som nævnt skal du fjerne _parent hvis du arbejder med en knap.

Funktionen skal ligge på tidslinjen samtidig med knappen/mc'et.
Avatar billede adoks Nybegynder
05. april 2006 - 17:12 #8
Jeg har prøvet at sætte en trace ind og det virker, men ikke inden for disse parenteser: 

posLoadVars.onLoad(success) {
    if(success) { trace("Det gik da meget godt"); }else { trace("fejl i afsendelsen af variable"); }
  }
Avatar billede adoks Nybegynder
05. april 2006 - 17:17 #9
Men det ser ud til at linen 
posLoadVars.send("http://localhost/soccer/testflash.php", POST);

bliver udføret.

Men jeg kan bare ikke få fat i variablerene(obj, yPos, xPos) eller så er de tommme
Avatar billede _k Nybegynder
05. april 2006 - 18:22 #10
De burde nu være der et eller andet sted. Hvordan tjekker du dem?

Ellers kan du smide dem med som get-parameter på urlen. I testøjemed kan du prøve:

getURL("http://localhost/soccer/testflash.php?mc="+obj+"&xpos="+xPos+"&ypos="+yPos);
Avatar billede adoks Nybegynder
05. april 2006 - 21:42 #11
jeg bruger følgende kode: $xpos = $_POST["xPos"]; men det virker ikke

Men det virker fint med GET, så send et svar og mange tak for hjælpen nu er jeg kommet et godt stykke videre
Avatar billede adoks Nybegynder
05. april 2006 - 21:47 #12
Selvom at du allerede har fortjent pointene, vil jeg lige spørge hvorfor at FLash tilføjer _level0. foran alle mine MC, og om det er muligt at fjerne det.

Det er nemlig et problem når jeg skal gemme det i MySQL, da den ikke er glad for underscore
Avatar billede adoks Nybegynder
05. april 2006 - 22:24 #13
Jeg har løst det sidste problem ved hjælp af PHP
Avatar billede _k Nybegynder
05. april 2006 - 23:17 #14
Så smider jeg da et svar :)

Det du gemmer er mc'et reelle sti i Flashfilmen. Du behøver ikke at gemme netop det, men jeg tænkte at det nok var nemmest for dig hvis du senere skulle placere mc'et igen på baggrund af databasedataene. Så har du nemlig en direkte reference i stedet for et navn der kan ligge hvor som helst.
Avatar billede adoks Nybegynder
06. april 2006 - 09:51 #15
OK, det prøver jeg at kigge på, hvis det ikke går må jeg bare oprette et nyt spm. :-)
Avatar billede _k Nybegynder
06. april 2006 - 10:15 #16
Jeg siger i hvert fald mange tak for point :)
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