Avatar billede everclear Praktikant
02. december 2009 - 00:18 Der er 8 kommentarer og
1 løsning

AS3 kan ikke vise TextField

Jeg sidder pt med et irriterende AS3-problem.
Jeg har tilføjet en container til min stage - denne er af typen Sprite. Hertil ønsker jeg at tilføje x antal TextFields med hver deres properties. Disse properties læses fra en XML-fil og dette volder heller ingen problemer.
Text-containeren (med x antal textfields), ønsker jeg at tilføje til min main-container, som i forvejen indeholder et baggrundsbillede.

Problemet opstår idet jeg tilføjer mine objekter til min container. Mit billede bliver uden problemer vist på min stage; men jeg kan ikke se mine textfields. Jeg har prøvet at trace mig frem til problemet og kan se, at min text-container rent faktisk ligger i min main-container OG den indeholder de korrekte antal textfields - men stadig - intet på skærmen.

Jeg har et udklip af koden herunder (main-containeren hedder _currentSlide):

// Tilføj containeren
var container:Sprite  = new Sprite();
container.alpha      = 1;
_currentSlide.addChild(container);

// Load baggrundsbillede
var bitmap:Bitmap    = _loader.content as Bitmap;
bitmap.smoothing      = true;
bitmap.width           = stage.stageWidth;
bitmap.height           = stage.stageHeight;
           
// Load XML-værdier
var texts:XMLList    = _xmlProperties.slide[_currentIndex].text;
           
if (texts.length() > 0)
{
    // Der er fundet tekster
    var item:XML;
    var overlay:Sprite    = _currentSlide.getChildAt(0) as Sprite;

    // Loop tekster - for hver skal der tilføjes TextField
    for each(item in texts)
    {
    var txt:TextField    = new TextField();
    var x:int            = int(item.x);
    var y:int          = int(item.y);
 
        txt.x                = x;
    txt.y              = y;
    txt.htmlText          = item.text;
    txt.autoSize          = TextFieldAutoSize.LEFT;
        txt.multiline          = true;
    txt.alpha            = 1;
       
        // Tilføj TextField til text-containeren   
    container.addChild(txt);

        // Tilføj billedet nederst
    _currentSlide.addChildAt(bitmap, 0);
    }
}
else   
{
    _currentSlide.addChild(bitmap);   
}

// ------------- kode slut ------------------


Jeg har prøvet at fjerne billedet fra containeren, da jeg troede denne lå foran; men samme resultat....ingen textfields. Hvor er det lige jeg går galt i byen?
Avatar billede everclear Praktikant
02. december 2009 - 00:19 #1
Lige en typo....
Jeg tilføjer godt nok TextFields til overlay-spriten og ikke til container.:)
Avatar billede hmanback Nybegynder
02. december 2009 - 16:59 #2
Kan du ikke zippe alle filer og smide dem op på http://gratisupload.dk/ og poste et link her.

Jeg gerne hjælpe, og det er væsentligt nemmere når man har alle relavnte filer...
Avatar billede everclear Praktikant
02. december 2009 - 22:58 #3
Mange tak for det - jeg vil meget gerne zippe filerne; men er der mulighed for jeg kan sende dem til dig i stedet for at smide dem op, så de er offentligt tilgængelige? :)
Avatar billede hmanback Nybegynder
03. december 2009 - 11:32 #4
Klart, send til hmanback001[at]gmail[dot]com

Kigger på det efter arbejde...
Avatar billede everclear Praktikant
05. december 2009 - 15:16 #5
Nu har jeg endelig fået mine textfields til at spille - takket være hmanback. Har dog stadig et problem med mine overlay-billeder.

Jeg har lavet 3 klasser:
- SlideItem      (Et slide i mit slideshow)
- OverlayText    (En overlay-tekst)
- OverlayImage    (Et overlay billede)

Mit SlideItem indeholder 2 arrays - ét til overlay tekster og ét til overlay billeder.

Jeg opbygger alle mine slideitems og smider de respektive tekster og billeder ind, når jeg parser min XML. Og det spiller uden problemer - men men men. Jeg får ikke noget billeder ind i mit overlayimage-array på mit slideitem. Jeg er kommet frem til, at min fejl ligger i koden, hvor jeg loader mit eksterne billede ind. Denne gør brug af et Event.COMPLETE. I dette event tilføjer jeg mine billeder, men når jeg skal bruge dem senere hen, så er de der ikke.

Jeg har følgende:

var img:XML;
for each(img in imgs)
{
    imageUrl      = img.url;
    imagex        = int(img.x);
    imagey          = int(img.y);
    imageheight  = uint(img.height);
    imagewidth    = uint(img.width);
                   
    _loader = new Loader();
    _loader.load(new URLRequest(imageUrl));
    _loader.contentLoaderInfo.addEventListener(Event.COMPLETE, imageLoaded);
}

Når billedet er loadet, kalder denne:

private function imageLoaded(e:Event):void
{
    // Load Image
    _tempImage = _loader.content as Bitmap;
    var overlayImage:OverlayImage = new OverlayImage(_tempImage, imagex, imagey, imagewidth, imageheight);

    slideItem.AddOverlayImage(overlayImage);
    //trace("Antal billeder: " +    slideItem.GetOverlayImages().length);
}

Når jeg udskriver antallet af billeder i mit slideItem her; så kan jeg sagtens se, at der er billeder deri - men de er væk i mit kode, der skal bruge dem.

Kan det have noget at gøre med, at resten af min kode ikke "venter" på, at mit imageLoaded eventhandler er færdig?
Avatar billede hmanback Nybegynder
11. december 2009 - 13:31 #6
Lukketid?
Avatar billede everclear Praktikant
11. december 2009 - 16:12 #7
Det synes jeg helt sikkert - har endelig fået skidtet til at virke som jeg vil....har dog bare ét sidte problem, men det hører vist til et nyt spørgsmål.

Rigtig mange gange tak for hjælpen hmanback; hvis du smider et svar, så er der points :)
Avatar billede hmanback Nybegynder
11. december 2009 - 20:52 #8
Svar,
Hvad er dit "sidste" problem? :)
Avatar billede everclear Praktikant
11. december 2009 - 22:17 #9
Hermed point:) Mit sidste problem er, at jeg gerne vil have eksekveringen af mit loop til at vente på mit imageLoaded-event - eller på en anden måde løse mit billedeproblem.

Jeg har oprettet et nyt spørgsmål omkring det her: http://www.eksperten.dk/spm/895372

Mange tak for hjælpen :)
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