vinTagesworld Flash forum

Stel zelf een vraag in het flash forum!


onChange probleem
blokje door W0utah op 15-09-07 om 15:20
Ik probeer nu via zo'n component lijstje de antwoorden van de vraag te laten veranderen, hier duikt echter een probleem op.

Er zijn 5 antwoorden per vraag, deze kunnen zo worden opgevraagt:
actionscript code

this.firstChild.childNodes[0].childNodes[3].childNodes[0].firstChild.nodeValue
this.firstChild.childNodes[0].childNodes[3].childNodes[1].firstChild.nodeValue
this.firstChild.childNodes[0].childNodes[3].childNodes[2].firstChild.nodeValue
this.firstChild.childNodes[0].childNodes[3].childNodes[3].firstChild.nodeValue
this.firstChild.childNodes[0].childNodes[3].childNodes[4].firstChild.nodeValue

 

nog ff wat extra uitleg, childNodes[0], dit is dus de eerste vraag, als je childNodes[1] zie je een andere vraag.



dat werkt allemaal, heb ik getest met trace.

actionscript code


    comboboxListener.change = function (evt_obj:Object) {
        for (var j = 0; j < 6; j++) {
          trace(vraagBox.selectedItem.data);
          _root["antwoord" + j].label = this.firstChild.childNodes[vraagBox.selectedItem.data].childNodes[3].childNodes[j].firstChild.nodeValue;
          _root["antwoord" + j].labelPlacement = "right";
        }
     
    };
 


nu heb ik dit stukje, als je verandert zie je wel de trace met de data van het item, dat klopt ook, maar in de tekstvakken van de vragen komt gewoon undefined te staan.

Ik zie nu echt niet wat ik fout doe.


EDIT: waarom komen alle topics dubbel te staan?

laatst ge-edit op: 15-09-07 om 15:30


<< [1] [2] >>
Reply
blokje door vinTage op 16-09-07 om 10:46
Als ik vanavond terugkom bekijk ik alle 2 je vragen :)

edit
je roept in je onchanged weer "oude" variablen aan, dit is imo het probleem.
Volgens mij moet je als je op jouw manier wilt werken in elke onchange de "xml uitlees" functie aanspreken.

Wat je zou kunnen doen, is als je de eerste keer je xml uitleest, alles in een array zetten, en de array uitlezen adh van het index nummer van je list menu.

Ik wil best een voorbeeldje maken, maar wil je dan een xml+fla uploaden, zodat ik dat niet zelf hoef te maken :)

Nu ga ik even kijken naar die dubbele post meuk.

edit 3
Ik DENK dat het opgelost is (was een dwarsliggend staartje van as3 tutorial sorteer systeem gedeelte)

laatst ge-edit op: 16-09-07 om 20:14
Reply
blokje door W0utah op 16-09-07 om 21:04
ik snap wat je bedoelt, dus ik lees alles uit, maar voor elke vraag een nieuwe array, met de antwoorden, aantal stemmen enzo?

 
Reply
blokje door vinTage op 16-09-07 om 22:58
Je hoeft de stemmen niet uit te lezen, alleen de vraag (op id).
Verder lees je gewoon uit het shared object EN ip/inlognaam uit, of er al gestemd is door die persoon.

 
Reply
blokje door W0utah op 19-09-07 om 16:41
Maar ik moet toch ook de stemmen hebben?

Anders kan ik ht % niet berekeken.

 
Reply
blokje door vinTage op 19-09-07 om 23:03
Ja, inderdaad, niet aan gedacht

Maar.... ik heb toch een opzetje gemaakt voor je (en daarbij gebruik gemaakt van gustaaf zn taartDiagram )

Het bouwen van de taart loopt nog niet echt soepel, maar aangezien jij je eigen taartje aan het maken was, heb ik daar maar niet teveel aandacht aan besteed.

Je hebt nodig een xml ( genaamd poll.xml) die als volgt is opgebouwd:
code

<?xml version="1.0" encoding="UTF-8"?>

<poll>
    <vraag stelling = "je favoriete fruit">
         <optie score="23">banaan</optie>
         <optie score="13">peer</optie>
         <optie score="26">appel</optie>
         <optie score="12">druif</optie>
         <optie score="26">ananas</optie>
    </vraag>
    
    <vraag stelling = "mooiste kleur">
         <optie score="25">geel</optie>
         <optie score="25">magenta</optie>
         <optie score="40">cyaan</optie>
         <optie score="10">blauw</optie>
    </vraag>
    
    <vraag stelling = "aantal bankrekeningen">
         <optie score="75">een</optie>
         <optie score="13">twee</optie>
         <optie score="12">meer dan twee</optie>
    </vraag>
</poll>


Daarnaast een FLA van 700 op 700 ofzo, met een grijze achtergrond, met daarin een comboBox met de instancenaam "mijnCombobox".
Die combobox maak je een stuk of 300 px breed, en plaatst hem in de linkerbovenhoek.

In de tijdlijn plemp je deze code :
actionscript code

function leesXML(geladen) {
  if (geladen) {
    //totaal aantal polls die weergegeven worden in de xml
    aantal = this.firstChild.childNodes.length;

    var xmlNode = this.childNodes[0];
    for (var i:Number = 0; i<aantal; i++) {

      //arrays aanmaken waarin we de vraag/antwoorden en scores opslaan
      _root["meukArray"+i] = new Array();

      //de vraagstelling word uitgelezen
      vraag = xmlNode.childNodes[i].attributes.stelling;
      //droplist vullen met het id wat we gebruiken om optieArray uit te lezen en de vraag
      mijnCombobox.addItem({data:i, label:vraag});
      //kijken hoeveel antwoorden er mogelijk waren
      aantalKeuzes = xmlNode.childNodes[i].childNodes.length;

      for (var k:Number = 0; k<aantalKeuzes; k++) {
        //score per antwoord
        itemScore = xmlNode.childNodes[i].childNodes[k].attributes.score;
        //antwoord optie
        itemOptie = xmlNode.childNodes[i].childNodes[k].firstChild.nodeValue;
        //array vullen
        _root["meukArray"+i].push({optie:itemOptie, score:itemScore});
      }
    }
  }
}
onzeGegevens = new XML();
onzeGegevens.ignoreWhite = true;
onzeGegevens.onLoad = leesXML;
onzeGegevens.load("poll.xml");


//string voor de taartmeuk
var stringProcent:String;
var stringTekst:String;


//de combo meuk
var comboboxListener:Object = new Object();
comboboxListener.change = function(evt_obj:Object) {

  //bestaande cirkel weghalen
  for(var w:Number = 0; w<5; w++){
    _root["sector"+w].removeMovieClip();
  }

  stringProcent = '';
  stringTekst = '';

  arrayLengte = _root["meukArray"+mijnCombobox.selectedItem.data].length;
 
  for (var al:Number = 0; al<arrayLengte; al++) {
    diagramKleurVariabel = _root["meukArray"+mijnCombobox.selectedItem.data][al].score;
    //wel of geen komma plaatsen aan het einde van deze variable
    al<arrayLengte-1 ? stringProcent += diagramKleurVariabel+"," : stringProcent += diagramKleurVariabel;
  }
 
  for (var al:Number = 0; al<arrayLengte; al++) {
    diagramOpschriftVariabel = _root["meukArray"+mijnCombobox.selectedItem.data][al].optie;
    //wel of geen komma plaatsen aan het einde van deze variable
    al<arrayLengte-1 ? stringTekst += diagramOpschriftVariabel+"," : stringTekst += diagramOpschriftVariabel;
  }
  //trace("\""+stringProcent+"\",\""+stringTekst+"\"")
 
  //taartje bakken
  taartdiagram(stringProcent,stringTekst);
  isinterval = setInterval(doe, 300);
  intervalteller = 0;

};
mijnCombobox.addEventListener("change",comboboxListener);



var root:MovieClip = this;
var akleur:Array = Array();
var aantal = 0;
akleur[0] = "0xFFFFFF";
akleur[1] = "0xD4D4CC";
akleur[2] = "0x0000FF";
akleur[3] = "0xFFCC00";
akleur[4] = "0x00FF00";
akleur[5] = "0xFFFF00";
akleur[6] = "0xFFFFFF";
akleur[7] = "0xCCCCCC";
//taartdiagram("200,160,45,108,80", "Omzet 2010,Omzet 2009,Omzet 2008,Omzet 2007,Omzet 2006");
// resultaten van de verschillende items in een string
//var isinterval = setInterval(doe, 300);
//intervalteller = 0;
function doe() {
  root["sector"+String(intervalteller)]._x -= 4000;
  root[(220+intervalteller)+"zin"]._x -= 4000;
  if (intervalteller == 0) {
    root["sector"+String(intervalteller)]._x += 6;
    root[(220+intervalteller)+"zin"]._x += 6;
    root["sector"+String(intervalteller)]._y += 6;
    root[(220+intervalteller)+"zin"]._y += 6;
  }
  intervalteller++;
  if (intervalteller>aantal) {
    clearInterval(isinterval);
  }
}
//////////////////////////////////////
function taartdiagram(string, string2) {
  var aresul:Array = string.split(",");
  var azin:Array = string2.split(",");
  var na = 0;
  var som = 0;
  aantal = aresul.length;
  while (na<aantal) {
    aresul[na] = Number(aresul[na]);
    som += aresul[na];
    na++;
  }
  var gem = som/360;
  som = 1;
  var nb = 0;
  while (nb<aantal) {
    is = Math.round(aresul[nb]/gem, 0);
    drawSector("sector"+nb,20+nb,350,250,200,som,is,akleur[nb],azin[nb]);
    som += is;
    nb++;
  }
}
//////////////////////////////////////////////////
function drawSector(parnaam, stuknr:Number, x:Number, y:Number, r:Number, s:Number, e:Number, k:Number, t:String):Void {
  naam = parnaam;
  root.createEmptyMovieClip(naam,stuknr);
  root[naam].lineStyle(2,0x000000,100);
  root[naam].beginFill(k,100);
  helft = Math.round(s+e/2);
  na = 0;
  isstart = 0;
  teller = 0;
  while (na<360) {
    rad = (na*1*Math.PI)/180;
    startx = xcor;
    starty = ycor;
    xcor = x+r*(Math.cos(rad));
    ycor = y+r*(Math.sin(rad));
    bisx = 1+(startx+xcor)/2;
    bisy = 1+(starty+ycor)/2;
    if (na == helft) {
      helftx = -40+x+Math.round((r-60)*(Math.cos(rad)));
      helfty = y+Math.round((r-60)*(Math.sin(rad)));
    }
    if (na == s) {
      isstart = 1;
      root[naam].moveTo(x,y);
      root[naam].lineTo(xcor,ycor);
    }
    if (isstart == 1) {
      teller++;
      root[naam].curveTo(bisx,bisy,xcor,ycor);
      if (teller>e) {
        isstart = 0;
        na = 1000;
      }
    }
    na++;
  }
  root[naam]._x = 4000;
  root[naam].onRollOver = function() {
    detekst(300+stuknr,"zin",50,5,250,50,t,30,akleur[0],"Arial","c");
  };
  root[naam].onRollOut = function() {
    detekst(300+stuknr);
  };
  detekst(200+stuknr,"zin",helftx,helfty,70,50,Math.round(e*100/360)+"%",22,"0x000000","Arial","c");
  root[(200+stuknr)+"zin"]._x += 4000;
}
///////////////////////////////////////////////////////////////////////////////////////////
function detekst(stuknr, parnaam, xstartPunt, ystartPunt, breedte, hoogte, partekst, lettersize, letterkleur, letterfont, lettermodex) {
  naam = String(stuknr)+parnaam;
  root.createTextField(naam,stuknr,xstartPunt,ystartPunt,breedte,hoogte);
  var my_fmt:TextFormat = new TextFormat();
  my_fmt.size = lettersize;
  my_fmt.font = letterfont;
  my_fmt.color = letterkleur;
  if (lettermodex == "c") {
    my_fmt.align = "center";
  }
  if (lettermodex == "r") {
    my_fmt.align = "right";
  }
  my_fmt.underline = false;
  root[naam].text = partekst;
  root[naam].selectable = false;
  root[naam].setTextFormat(my_fmt);
 
}
 


Ik denk dat je hier verder wel mee uit de voeten kan

laatst ge-edit op: 19-09-07 om 23:04
Reply
blokje door W0utah op 19-09-07 om 23:22
kga ff het mijn posten, nog niet letten op dat taartje, want daar was ik aan bezig

actionscript code

//maakTaart ();
function leesXML (geladen) {
  if (geladen) {
    trace(this.firstChild.childNodes[0].childNodes[3].childNodes[3].firstChild.nodeValue)
    // het aantal vragen
    var aantal:Number = this.firstChild.childNodes.length;

    vraagBox.addItem ({data:"", label:"Kies uw vraag"});
    for (var i = 0; i < aantal; i++) {
      vraagBox.addItem ({data:i, label:this.firstChild.childNodes[i].childNodes[2].firstChild.nodeValue});
    }

    var comboboxListener:Object = new Object ();
    comboboxListener.change = function (evt_obj:Object) {
      if (this.firstChild.childNodes[i].childNodes[1].firstChild.nodeValue == 1) {
        for (var i = 1; i < 6; i++) {
          _root["antwoord" + i].enabled = false;
        }
      } else {
        trace ("Je selecteerde " + vraagBox.selectedItem.label);
        trace ("Daarbij hoorde de volgende waarde " + vraagBox.selectedItem.data);
        for (var j = 0; j < 6; j++) {
          trace(vraagBox.selectedItem.data);
          _root["antwoord" + j].label = this.firstChild.childNodes[vraagBox.selectedItem.data].childNodes[3].childNodes[j].firstChild.nodeValue;
          _root["antwoord" + j].labelPlacement = "right";
        }
      }
    };
    vraagBox.addEventListener ("change",comboboxListener);
    vraagBox.selectedIndex = 0;
    /////////////////////////////////////////////////////////////////////////////////////////////////////
    radioListener = new Object ();
    radioListener.click = function (antwoord) {
      // de radiobuttons uitschakelen
      for (var i = 1; i < 6; i++) {
        _root["antwoord" + i].enabled = false;
      }
      ontvang = new LoadVars ();
      verstuur = new LoadVars ();

      verstuur.antwoord = antwoord.target.selection.data;
      verstuur.sendAndLoad ("http://192.168.1.101/~W0utR/zever/flashPoll/stem.php",ontvang,"POST");

      ontvang.onLoad = function (success) {
        if (success) {
          if (ontvang.watzegje == "true") {
            _root.antwoord.text = "En waarom zou men 2 keer stemmen?";
          } else if (ontvang.watzegje == "false") {
            _root.antwoord.text = "Uw stem wordt verwerkt.";
          }
        } else {
          _root.antwoord.text = "Er is een fout opgetreden, probeer later nog eens";
        }
      };
    };
    radioGroup.addEventListener ("click",radioListener);
  }
}
onzeGegevens = new XML ();
onzeGegevens.ignoreWhite = true;
onzeGegevens.onLoad = leesXML;
onzeGegevens.load ("http://192.168.1.101/~W0utR/zever/flashPoll/vraagenantwoord.php");


/////////////////////////////////////////////////////////////////////////////////////////////////////

function maakTaart () {
  var stemmen1:Number = 2;
  var stemmen2:Number = 1;
  var stemmen3:Number = 3;
  var stemmen4:Number = 4;
  var stemmen5:Number = 0;
  var totaal:Number = stemmen1 + stemmen2 + stemmen3 + stemmen4 + stemmen5;

  taartHolder.createEmptyMovieClip ("lijn",1);
  //dikte, kleur, alpha
  taartHolder.lijn.lineStyle (1,0x000000,100);

  taartHolder.lijn.beginFill (0xABCDEF,50);

  taartHolder.lijn.moveTo (0,0);
  taartHolder.lijn.lineTo (63.5,0);

  //taartHolder.lijn.curveTo (60,60,0,63.5);

  taartHolder.lijn.moveTo (0,0);
  taartHolder.lijn.lineTo (0,63.5);
  taartHolder.lijn.endFill ();
}
 


en dit is mijn xml

php code

<?php
header('Content-type: text/xml');
echo "<?xml version='1.0' standalone='yes'?>";

include('connectie.php');
$hoe = $_SERVER['REMOTE_ADDR'];
?>
<poll>
  <?php
  $vraagDb = mysql_query("SELECT * FROM vraag ORDER BY id ASC") or die(mysql_error());
 
  while($vraag = mysql_fetch_array($vraagDb)) {
    $stemmenDb = mysql_query("SELECT * FROM stemmen WHERE vraag = '".$vraag['id']."'") or die(mysql_error());
    $stemmen = mysql_fetch_array($stemmenDb);
  ?>
      <welk>
          <id><?php echo $vraag['id']; ?></id>
            <voted>
              <?php
        if($hoe == $stemmen['ip']) {
          echo "1";
        } else {
          echo "0";
        }
        ?>
            </voted>
            <vraag><?php echo $vraag['vraag']; ?></vraag>
            <antwoorden>
                <antwoord1><?php echo $vraag['antwoord1']; ?></antwoord1>
                <antwoord2><?php echo $vraag['antwoord2']; ?></antwoord2>
                <antwoord3><?php echo $vraag['antwoord3']; ?></antwoord3>
                <antwoord4><?php echo $vraag['antwoord4']; ?></antwoord4>
                <antwoord5><?php echo $vraag['antwoord5']; ?></antwoord5>
            </antwoorden>
        </welk>
  <?php
  }
  ?>
</poll>
 


 
Reply
blokje door vinTage op 19-09-07 om 23:25
oh, ik was alleen de terugKijk code aan het maken, ik DACHT dat je het daarover had

edit:
Jij hebt per definitie altijd 5 opties om uit te kiezen ?

laatst ge-edit op: 19-09-07 om 23:26
Reply
blokje door W0utah op 19-09-07 om 23:42
dat kan ik later nog veranderen, dat je er ook maar 3 kan hebben ofzow.

 
Reply
blokje door vinTage op 19-09-07 om 23:47
jama...nu snap ik je vraag dus nog steeds niet

Hoe kan ik helpen ?

 
Reply
blokje door W0utah op 19-09-07 om 23:57
rofl, wel, kijk in flash heb ik dus een soort van console.
Je hebt een list met alle vragen in, maar het probleem zit, als je een vraag verandert, veranderen je antwoorden niet.
En ik snap niet waarom, hij moet toch gewoon andere waarden uit de xml halen?

 
<< [1] [2] >>
Dit topic is gesloten.