PDA

Volledige versie bekijken : laden uit xml, omzetten naar sprite en dan draggen


Glennson
%Europe/Berlin %792 %2009, 19:01
hoi, ik heb een opdracht voor school en ben nog een rookie in actionscript.
mijn bedoeling is om bij elke i (die een lus vooraf gaat) 3 files te plaatsen. Dit lukt ook maar het is de bedoeling dat je de juiste image naar het woord sleept, daarom zet ik ze dus in een sprite. Met deze code echter kan ik enkel slepen me de laatste image en ook als ik met de andere images sleep beweegt enkel de laatste. Ik zou een soort van array moete hebbe denk ik maar als ik er

var tekst[j]:Sprite = new Sprite();
tekst[j].addChild(myLoader2);
addChild(tekst[j]);

van maak krijg ik fouten.

Dit is mijn code (zonder voorgaande lus met i)


for (var j:int = 0; j < aantalAntwoorden; j++) {
trace(dataXML.question[i].answers.answer[j]);
trace(dataXML.question[i].answers.answer[j].@type);

var myLoader2:Loader = new Loader();
var fileRequest2:URLRequest = new URLRequest(dataXML.question[i].answers.answer[j]);

myLoader2.load(fileRequest2);
myLoader2.scaleX = 1;
myLoader2.scaleY = 1;
myLoader2.x = j*200;
myLoader2.y = 200 + i*200;

var tekst:Sprite = new Sprite();
tekst.addChild(myLoader2);
addChild(tekst);

tekst.addEventListener(MouseEvent.MOUSE_DOWN, startTextDrag);
stage.addEventListener(MouseEvent.MOUSE_UP, stopTextDrag);
tekst.addEventListener(Event.ENTER_FRAME, dragText);
var clickOffset:Point = null;

function startTextDrag(event:MouseEvent) {
clickOffset = new Point(event.localX, event.localY);
}

function stopTextDrag(event:MouseEvent) {
clickOffset = null;
}
function dragText(event:Event) {
if (clickOffset != null) {
tekst.x = mouseX - clickOffset.x;
tekst.y = mouseY - clickOffset.y;
}
}


}
}

Dauntless
%Europe/Berlin %979 %2009, 23:31
Welkom op FlashFocus!

Ik heb even [as] tags rond je code gezet, maar doe het volgende keer zelf :).

- Verplaats de functies naar buiten de for loop
- Gebruik event.currentTarget om het tekstvak/sprite aan te spreken waar je op geklikt hebt ipv rechtstreeks 'tekst'

Tegen de tijd dat dragText uitgevoerd wordt heeft 'text' de laatste waarde die hij in de for loop had (het is immers een gedeelde variabele tussen je for loop en je functie). Door event.currentTarget te gebruiken doe je het dynamisch.

Glennson
%Europe/Berlin %500 %2009, 12:00
bedankt voor de reactie maar ik geraak er niet uit. Ik heb verschillende dingen geprobeerd met die event.currentTarget maar ik slaag er niet in.
(excuses hiervoor, ik ben nog maar een beginner :p)

hier is mijn hele code, dit is misschien makkelijker...
zou je deze mss kunnen aanpassen naar hoe jij denkt dat het moet, alvast bedankt!

stop();

//XML inlezen
var xmlURL:URLRequest = new URLRequest("data.xml");
var xmlLoader:URLLoader = new URLLoader(xmlURL);
xmlLoader.addEventListener(Event.COMPLETE, xmlLoaded);

//als XML is ingelezen
function xmlLoaded(event:Event) {
var dataXML = XML(event.target.data);
//trace (dataXML);
//trace (dataXML.question1.*);
var aantalVragen = int;
var aantalAntwoorden = int;
aantalVragen = dataXML.question.length();
trace("Aantal vragen = " + aantalVragen);

for (var i:int = 0; i < aantalVragen; i++) {

trace("Vraag "+ (i+1) + ": " + dataXML.question[i].text);
aantalAntwoorden = dataXML.question[i].answers.answer.length();
trace("Aantal antwoorden = " + aantalAntwoorden);

var myLoader:Loader = new Loader();
var fileRequest:URLRequest = new URLRequest(dataXML.question[i].text);
myLoader.load(fileRequest);
myLoader.scaleX = 0.50;
myLoader.scaleY = 0.50;
myLoader.x = 10 + j*200;
myLoader.y = 10 + i*200;
addChild(myLoader);

for (var j:int = 0; j < aantalAntwoorden; j++) {
trace(dataXML.question[i].answers.answer[j]);
trace(dataXML.question[i].answers.answer[j].@type);

var myLoader2:Loader = new Loader();
var fileRequest2:URLRequest = new URLRequest(dataXML.question[i].answers.answer[j]);

myLoader2.load(fileRequest2);
myLoader2.scaleX = 1;
myLoader2.scaleY = 1;
myLoader2.x = j*200;
myLoader2.y = 200 + i*200;

var tekst:Sprite = new Sprite;
tekst.addChild(myLoader2);
addChild(tekst);
}

tekst.addEventListener(MouseEvent.MOUSE_DOWN, startTextDrag);
stage.addEventListener(MouseEvent.MOUSE_UP, stopTextDrag);
tekst.addEventListener(Event.ENTER_FRAME, dragText);

var clickOffset:Point = null;

function startTextDrag(event:MouseEvent) {

clickOffset = new Point(event.localX, event.localY);
}

function stopTextDrag(event:MouseEvent) {

clickOffset = null;
}

function dragText(event:Event) {

if (clickOffset != null) {
event.currentTarget.x = mouseX - clickOffset.x;
event.currentTarget.y = mouseY - clickOffset.y;
}
}
}
}

Dauntless
%Europe/Berlin %530 %2009, 12:44
Zo zou het op het eerste zicht moeten lukken. Zet ook je 3 functies nog buiten de andere functie.

Kan je je files even uploaden ? Dat test gemakkelijker.

Glennson
%Europe/Berlin %660 %2009, 15:51
in bijlage alle files