Archief - Extern tekstbestand inladen en weergeven

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Skizzy

Legacy Member
Ik ben momenteel een testje aan het uitvoeren met flash, maar ik geraak niet verder. De bedoeling is om een soort 'sms-centrale' te maken, waarbij berichten op een scherm verschijnen (maar ipv via sms worden de boodschappen ingetypt in een tekstbestand.). Ik heb een flash bestand met daarin een dynamisch tekstvak waarin een extern tekstbestand geladen moet worden (external.txt).
Hiervoor heb ik deze tutorial gevolgd en onderstaand script ingegeven (actionscrip 3, flash cs5):
var loader:URLLoader = new URLLoader();
loader.load(new URLRequest("external.txt));
loader.addEventListener(Event.*COMPLETE, onComplete);
function onComplete(event:Event):void
{
external_txt.text = event.target.data;
}
So far so good, dit werkt naar behoren. Nu zou ik alleen nog 2 extra 'functies' moeten toepassen:
1. De swf zou automatisch moeten updaten, telkens ik het txt-bestand aanpas en bewaar.
2. Het tekstbestand zou regel per regel moeten gelezen worden, en dus roteren tussen de verschillende regels.


Voorbeeld
Blablabla 1
Boodschap 2
Test 3
"Blablabla 1" ==> "Boodschap 2" ==> "Test 3" ==> "Blablabla 1" ==> ...

De bestanden die ik heb gebruikt kun je hier vinden.

Zero Grav

Legacy Member
Het gemakkelijkste om dit te gebruiken is XML. Dan hoeft ge niet manueel lijn per lijn te gaan lezen, maar kunt ge de ingebouwde functies gebruiken.

AS3 code met een dynamisch textfield met instance name: txtBanners on stage.

Code:
import flash.display.StageScaleMode;
import flash.display.StageAlign;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.events.Event;
import flash.utils.Timer;
import flash.events.TimerEvent;

stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;

var bannerLoader:URLLoader;
var bannersArr:Array;
var timer:Timer;
var currentBanner:uint;

init();

//banners inladen
function init():void {
    bannerLoader = new URLLoader();
    var r:URLRequest = new URLRequest("banners.xml");
    bannerLoader.addEventListener(Event.COMPLETE, onBannersLoadComplete );
    bannerLoader.load(r);
}

//banners zijn ingeladen, hier voegen we ze per banner toe aan een array
function onBannersLoadComplete(e:Event):void {
    var banners:XML = XML(bannerLoader.data);
    bannersArr = new Array();
    
    for each(var banner:XML in banners.children()) {
        bannersArr.push(banner);
    }
    
    //Beginnen bij index 0 van de array en elke 2 seconden naar de volgende gaan
    currentBanner = 0;
    timer = new Timer(2000);
    timer.addEventListener(TimerEvent.TIMER, rotate);
    timer.start();
    
    rotate();
}

//Volgende waarde uit de array in het tekstvak zetten
function rotate(e:TimerEvent = null):void {
    //als we op het einde zitten moeten we terug bij index 0 beginnen.
    if(currentBanner == bannersArr.length) currentBanner = 0;
    txtBanners.text = bannersArr[currentBanner];
    currentBanner++;
}
banners.xml:

Code:
<banners>
    <banner>banner 1</banner>
    <banner>banner 2</banner>
    <banner>banner 3</banner>
</banners>

Skizzy

Legacy Member
Mijn excuses, wist niet meteen waar ik deze thread nu net moest plaatsen.

@ Zero Grav: Ik heb dit geprobeerd maar ik krijg een error bij volgende regel:

txtBanners.text = bannersArr[currentBanner];

==> Scene 1, Layer 'Layer 1', Frame 1, Line 49 1120: Access of undefined property txtBanners.

Alvast bedankt voor de hulp zover, ben zelf een complete newbie in AS.

Zero Grav

Legacy Member
Ge moet het tekstfield nog aanmaken waarin die tekst gaat komen. Dus op uw stage zet ge een textfield, classic en dynamic in de dropdowns en geeft ge een instance name "txtBanners" mee (zonder aanhalingstekens natuurlijk).

Een dynamic textfield is een textfield dat on runtime nog aangesproken en geüpdatet kan worden. Een inputfield doet wat de naam zegt en een static textfield kan niet worden geüpdatet.

Skizzy

Legacy Member
Haha, sorry voor de domme fout :).

Flash gaf nog een melding dat ik mijn font moest embedden.
Ondertussen heb ik dit aangepast, maar nu zit ik nog met twee problemen:

- De berichten die ik in het xml bestand zet worden niet weergegeven, in plaats daarvan wordt er zoiets dergelijk weergegeven:
<w:body xlmns ...
<wx:sect...

- Ook word de tekst niet verschaald naargelang mijn tekstvak. In feite zou deze moeten worden afgebroken en eventueel ook verschaald worden naargelang de lengte van het bericht. Ik weet natuurlijk niet in hoeverre dit mogelijk is...

Misschien ook nog even opmerken dat ik met een mac werk en dus ook textedit gebruik. Standaard zet deze mijn tekstbestand in rich text format, maar ik kan ook als 'plain text' opslagen. Ik heb het flash bestand zoals jij het hebt uitgelegd ook eens geprobeerd met een txt bestand ipv het xml-bestand en hierbij werden mijn boodschappen wel gelezen, maar kon ik niet real-time updaten en boodschappen toevoegen.

Ik wou dat ik er meer van kende... :)

Zero Grav

Legacy Member
Het punt van die xml is dat die in een bepaald formaat is opgesteld die de parser ook begrijpt. Dus op dit moment 'weet' hij dat het banners > banner > text is. De code die gij terugkrijgt is omdat ge een andere structuur aan't gebruiken zijt.

Dat verschalen en dergelijke is allemaal wel mogelijk. Ge kunt de lengte van uw string opvragen en afkappen of de puntgrootte naargelang aanpassen. Of een AutoSize op uw textfield toepassen ed.

Skizzy

Legacy Member
Ok, ik heb het aan de praat gekregen ondertussen. De "banners" weergeven is geen enkel probleem. Enkel het "live" updaten lukt niet.

Ik doe het volgende:
- de swf afspelen met Flash Player
- xml bestand staat geopend (in Dreamweaver)

Maar wanneer ik een banner toevoeg in het xml bestand en vervolgens het bestand bewaar wordt deze niet toegevoed in de swf? :confused:

Zero Grav

Legacy Member
Live updaten werkt niet met deze code omdat het banners.xml bestand bij het opstarten van de applicatie wordt ingeladen en dan in het geheugen wordt gestoken. Maar om nieuwe tekst te hebben zou het opnieuw ingeladen moeten worden. Ge kunt dat op een bepaald interval doen bijvoorbeeld.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan