2010-03-03 7 views
0

J'essaie de faire une galerie d'images dynamiques à partir de et xml. De mes tutoriels, en ce moment je l'ai donc il va constamment ajouter la prochaine vignette ci-dessous l'autre, ce qui est bien, mais j'essaie de comprendre comment faire qu'une fois qu'il atteint une certaine coordonnée y, il sera déplacez la coordonnée x et empilez-la à nouveau. Alors que plutôt une longue liste de pouces, ce sera une pile côte à côte. Pour une raison quelconque, je n'arrive pas à comprendre comment quelque chose comme ça fonctionnerait. Mon objectif est d'avoir une pile côte à côte que je vais finir par mettre dans un clip qui sera masqué pour montrer seulement 2 piles à la fois. Puis, lorsque vous cliquez sur un bouton, vous le faites glisser. J'avais prévu d'utiliser le "movieclip.length" pour calculer jusqu'où le déplacer, mais je ne suis pas encore arrivé. Voilà ce que je suis:Comment modifier la position des enfants à l'intérieur de la boucle dans AS3

var gallery_xml:XML; 
var xmlReq:URLRequest = new URLRequest("xml/content.xml"); 
var xmlLoader:URLLoader = new URLLoader(); 
var imageLoader:Loader; 

function xmlLoaded(event:Event):void 
{ 
gallery_xml = new XML(xmlLoader.data); 
info_txt.text = gallery_xml.screenshots.image[0].attribute("thumb"); 
for(var i:int = 0; i < gallery_xml.screenshots.image.length(); i++) 
{ 
imageLoader = new Loader(); 
imageLoader.load(new URLRequest(gallery_xml.screenshots.image[i].attribute("thumb"))); 
imageLoader.x = 0; 
imageLoader.y = i * 70 + 25; 
imageLoader.name = gallery_xml.screenshots.image[i].attribute("src"); 
addChild(imageLoader); 
imageLoader.addEventListener(MouseEvent.CLICK, showPicture); 
} 

} 

xmlLoader.load(xmlReq); 
xmlLoader.addEventListener(Event.COMPLETE, xmlLoaded); 
function showPicture(event:MouseEvent):void 
{ 
imageLoader = new Loader(); 
imageLoader.load(new URLRequest(event.target.name)); 
imageLoader.x = 200; 
imageLoader.y = 25; 
addChild(imageLoader); 
} 

Je ne peux pas sembler envelopper ma tête autour de ce que je peux faire pour faire avancer les choses sur dynamiquement sans avoir à écrire une coutume si pour chaque ensemble de positions .. Je reçois le sentiment J'ai complètement oublié comment faire de l'algèbre.

Répondre

1

Je vous suggère l'une des deux solutions (non vérifiées) suivantes:

var next_x:Number = 0.0; 
var next_y:Number = 25.0; 
for (var i:int = 0; i < gallery_xml.screenshots.image.length(); ++i) 
{ 
    // ... 
    imageLoader.y = next_y; 
    imageLoader.x = next_x; 

    next_y += 70; 
    if (next_y > THRESHOLD) 
    { 
     next_x += X_OFFSET; 
     next_y = 25.0; 
    } 
} 

C'est, juste garder une trace de l'endroit où l'image suivante sera placée et ajuster en conséquence que coordonnées lorsque vous dépassez les seuils. Si vous souhaitez utiliser votre variable i, vous devrez calculer quelle ligne et colonne l'image sera placée à:

for (var i:int = 0; i < gallery_xml.screenshots.image.length(); ++i) 
{ 
    // ... 
    var row:int = i % MAX_ITEMS_PER_COLUMN; 
    var column:int = i/MAX_ITEMS_PER_COLUMN; 
    imageLoader.y = 25 + row * 70; 
    imageLoader.x = column * COLUMN_WIDTH; 
} 
+0

impressionnant. Merci! – Ghost9

+0

imageLoader.x = Math.floor (colonne) * COLUMN_WIDTH; Sinon, votre colonne ira en diagonale. – UltimateBrent

+0

ligne et la colonne sont des entiers, de sorte qu'ils n'ont pas besoin de plancher afaik –

Questions connexes