Antworten auf deine Fragen:
Neues Thema erstellen

Screensaver mit RSS-Reader AS3

Angus_MacGyver

Noch nicht viel geschrieben

Hallo!

Ich muss bei der Arbeit einen Screensaver in ActionScript 3 erstellen, der eine RSS-Reader-Funktion hat. Ich bin absoluter Flash-Anfänger, daher bin ich damit ziemlich überfordert.

Anhand eines Tutorials habe ich es zumindest geschafft, einen RSS-Reader in Flash zu bauen, bei dem die Headlines der Beiträge untereinander in eine Liste geladen werden. Wenn ich einen der Einträge anklicke wird der zugehörige Beitragstext in ein Textfeld geladen.

Hier ist das Script:

Code:
//Schriftstil-Optionen:

import fl.managers.StyleManager;

var schriftstil:TextFormat = new TextFormat();
schriftstil.font = "Helvetica Neue";
schriftstil.size = 12;
//schriftstil.bold = true;

StyleManager.setStyle("textFormat", schriftstil);



//RSS-Reader:

var rssLoader:URLLoader = new URLLoader();
var rssURL:URLRequest = new URLRequest("http://theflashblog.com/?feed=rss2");
rssLoader.addEventListener(Event.COMPLETE, rssLoaded);
rssLoader.load(rssURL);

var rssXML:XML = new XML();
rssXML.ignoreWhitespace = true;

function rssLoaded(evt:Event):void {
    rssXML = XML (rssLoader.data);
    //trace(rssXML);
    
    for(var item:String in rssXML.channel.item) {
        liste.addItem( {label:rssXML.channel.item[item].title} );
    }
}
    

function eintragswahl(evt:Event):void {
    textfeld.text = rssXML.channel.item[ evt.target.selectedIndex ].description;
}
liste.addEventListener(Event.CHANGE, eintragswahl);

Mit InstantStorm habe ich daraus einen Screensaver erstellt - es funktioniert einwandfrei. Mein Problem ist aber, dass ich es in dieser Form nicht wirklich brauchen kann. Was ich möchte sollte ungefähr so aussehen:

Ich möchte keinen interaktiven Screensaver, bei dem der User die Beiträge anklicken muss, sondern einen "selbstlaufenden", bei dem die Beiträge (jeweils Headline und Contet) aus der RSS-Quelle automatisch nacheinander angezeigt werden. Wenn alle durch sind, sollte alles von vorne beginnen, also loopen. Das Ganze soll am Ende animiert werden, damit es auch nett aussieht. Vorerst geht es mir aber um das automatische Nacheinander-Anzeigen der einzelnen Beiträge.

Ich kämpfe schon relativ lange herum, aber tue mir sehr schwer. Konnte auch nicht wirklich was hilfreiches im Netz finden. Wenn mir jemand weiterhelfen könnte, wäre ich sehr dankbar! :)
 

Angus_MacGyver

Noch nicht viel geschrieben

AW: Screensaver mit RSS-Reader AS3

Hat niemand eine Idee, wie man so einen Bildschirmschoner in Flash mit AS3 umsetzen kann? Ich komme einfach nicht weiter und verzweifle langsam. :(
 
A

ad86

Guest

AW: Screensaver mit RSS-Reader AS3

Hi,

probier es mal damit:

Code:
//import der Tween-Klassen fürs Bewegen
import fl.transitions.Tween;
import fl.transitions.TweenEvent;
import fl.transitions.easing.None;

var rssLoader:URLLoader = new URLLoader();
var rssURL:URLRequest = new URLRequest("http://theflashblog.com/?feed=rss2");
var list:Array=new Array();
var rssXML:XML = new XML();
var timer:Timer=new Timer(10000);//Wie lange Dein Feed angezeigt werden soll, inklusive des Tween-Vorganges
var actRSS:uint=0;
var output:String;
var tweenX:Tween;

init();

//init Methode, in der alles initialisiert wird, was noch nicht ist
function init():void{
	rssLoader.addEventListener(Event.COMPLETE, rssLoaded);
	rssLoader.load(rssURL);
	rssXML.ignoreWhitespace = true;
	timer.addEventListener(TimerEvent.TIMER,clearRSS);
	timer.start();
}

//Methode, wenn XML geladen wurde
function rssLoaded(evt:Event):void {
	rssXML = XML (rssLoader.data);
	for each (var item in rssXML.channel.item) {
        	list.push(item);
	}
	clearRSS(null);
}

//MEthode, die durch Timer aufgerufen wird und das Ausblenden des RSS-items anweist
function clearRSS(e:Event):void{
	tweenX = new Tween(rss_txt,"x", None.easeIn, rss_txt.x, 0-rss_txt.textWidth, 2,true);
	tweenX.addEventListener(TweenEvent.MOTION_FINISH,nextRSS);
}

//Methode, die nach Ausblenden aufgerufen wird

function nextRSS(e:Event):void{
        //Zusammenstellung Title und Description
	output=list[actRSS].title+"<br/><br/>"+list[actRSS].description;
	rss_txt.htmlText=output;

	tweenX = new Tween(rss_txt,"x", None.easeOut, stage.stageWidth ,stage.stageWidth/2-rss_txt.textWidth/2, 2,true);
	actRSS++;
	if (actRSS>=list.length){
		actRSS=0;
	}
}

Ich hoffe es hilft.

Mfg ad86
 

Angus_MacGyver

Noch nicht viel geschrieben

AW: Screensaver mit RSS-Reader AS3

Danke, ganz nett! :)

Bin schon von der Arbeit zuhause, aber werde mir die Sache gleich morgen Früh anschauen!
 

Angus_MacGyver

Noch nicht viel geschrieben

AW: Screensaver mit RSS-Reader AS3

Nochmals besten Dank für die Hilfe!

Konnte mit dem Script und ein paar Anpassungen alles erreichen, was ich wollte. Das Textfeld mit den Headlines und Texten fadet mit jedem Beitrag langsam ein und dreht sich die ganze Zeit über dezent um ein paar Grad. Dabei wird leicht hervor und wieder zurückgezoomt - sieht nett aus.

Jetzt geht es an die Feinheiten. Falls ich dabei noch Unterstützung brauche, weiß ich ja, wo ich Experten finde! :)
 

Angus_MacGyver

Noch nicht viel geschrieben

AW: Screensaver mit RSS-Reader AS3

Jetzt ist doch tatsächlich wieder eine Frage aufgetaucht! :hmpf:

Habe den Bildschirmschoner so weit fertig und habe ihn auf einem PC installiert. Dort ist aber der gewünschte Font nicht vorhanden, sprich die Schriftart im Bildschirmschoner ist die falsche.

Wie kann ich eine Schriftart in die SWF-Datei einbetten? Habe mich ein bisschen umgeschaut, aber so richtig schlau bin ich nicht geworden. Gibt es eine halbwegs einfache Möglichkeit, den Font per Actionscript einzubetten?
 
A

ad86

Guest

AW: Screensaver mit RSS-Reader AS3

Hi,

So weit ich es noch in Erinnerung habe:

1. In der Bibliothek ist oben rechts (zu mindestens MacOs, bei Windows vielleicht an linker Stelle) so eine kleine Schaltfläche. Dort klicken, dann erscheint ein Menü, in dem Du "neue Schriftart ..." auswählst.
2. Suchst Du Dir Deine passende Schriftart aus. Gibst Ihr einen Namen (im Beispiel Malibu).
Dann solltest Du es, glaub ich noch, für AS exportieren.
3. In Deinem As3:
Code:
var format:TextFormat=new TextFormat(new Malibu().fontName,60);
4. Musst Du DEinen Textfeldern noch folgendes sagen:
Code:
txtField_txt.embedFonts=true;

5. FERTIG

Mfg ad86
 
Zuletzt bearbeitet von einem Moderator:

Angus_MacGyver

Noch nicht viel geschrieben

AW: Screensaver mit RSS-Reader AS3

Danke - die Angaben dürften stimmen, so in der Art sollte es auch laut ein paar anderen Quellen im Internet gehen. Bei mir klappt es aber nicht.

Ich bekomme immer die Fehlermeldung "Zugriff auf eine möglicherweise nicht definierte Eigenschaft embedFonts über einen Verweis mit statischem Typ fl.controls:TextArea".

Eigenartig.
 
A

ad86

Guest

AW: Screensaver mit RSS-Reader AS3

Hi,

Danke - die Angaben dürften stimmen, so in der Art sollte es auch laut ein paar anderen Quellen im Internet gehen. Bei mir klappt es aber nicht.

Ich bekomme immer die Fehlermeldung "Zugriff auf eine möglicherweise nicht definierte Eigenschaft embedFonts über einen Verweis mit statischem Typ fl.controls:TextArea".

Eigenartig.

So eigenartig ist das gar nicht. Du benutzt ja eine TextArea und kein Textfield. Probier mal:

Code:
textAreaName.textField.embedFonts=true;

KANN auch sein das Folgendes funktioniert: (Ich hab es noch nicht ausprobiert)
Code:
textAreaName.setStyle("embedFonts", true);


Mfg ad86
 

Angus_MacGyver

Noch nicht viel geschrieben

AW: Screensaver mit RSS-Reader AS3

Der RSS-Screensaver ist seit einiger Zeit fertig, ich baue aber parallel dazu einen weiteren Bildschirmschoner, der ein paar interaktive Möglichkeiten bietet.

Es läuft alles eigentlich ganz gut, nur bin ich gerade auf einen unguten Fehler gestoßen:

Grundsätzlich sieht die Sache so aus, dass es Buttons gibt, die jeweils ein externes SWF in einen Movieclip laden und einen Button, der das aktuell geladene SWF wieder entlädt. Wenn ich den Unload-Button drücke und gerade kein SWF geladen ist, soll schlicht und einfach nichts passieren. Es wird aber im Flashplayer eine Fehlermeldung ausgespuckt (ArgumentError: Error #2025: Das angegebene DisplayObject muss ein untergeordnetes Element des Aufrufers sein. at flash.display: DisplayObjectContainer/removeChild() usw...), was ziemlich unsauber ist.

Mir ist also die Ursache für die Fehlermeldung klar (der Button soll etwas entladen, das nicht da ist), nur weiß ich nicht, wie ich das umgehen kann.

Der Code für den Unload-Button sieht so aus:

Code:
btn_unload.addEventListener(MouseEvent.CLICK, unloadFunction);

function unloadFunction(e:Event):void {
mc_load.removeChild(laden);
laden.unload();
}
Kann ich dem Button irgendwie sagen, dass er gar nichts tun soll, wenn gerade kein SWF geladen ist? Es stört mich nicht, wenn er klickbar bleibt, es soll nur die Fehlermeldung nicht erscheinen.
 
Zuletzt bearbeitet:
A

ad86

Guest

AW: Screensaver mit RSS-Reader AS3

Hi,

Probier mal:

Code:
btn_unload.addEventListener(MouseEvent.CLICK, unloadFunction);

function unloadFunction(e:Event):void {
     if (mc_load.getChildByName("laden")!=null){
          mc_load.removeChild(laden);
          laden.unload();
     }
}

Ich hab es nicht getestet. Werde ich später aber vielleicht noch tun, ob es funtioniert.

Mfg ad86
 

Angus_MacGyver

Noch nicht viel geschrieben

AW: Screensaver mit RSS-Reader AS3

Danke für die schnelle Rückmeldung!

Leider funktioniert mit diesem Code das Entladen dann gar nicht mehr, sprich der Button bleibt auch funktionslos, wenn ein SWF geladen ist.

Ich bin aber auf etwas Ähnlichs gestoßen, das funktioniert:

Code:
btn_unload.addEventListener(MouseEvent.CLICK, unloadFunction);

function unloadFunction(e:Event):void {
    if (laden.parent != null) {
        laden.parent.removeChild(laden);
        laden.unload();
    }
}

Jetzt klappt alles! :)
 
A

ad86

Guest

AW: Screensaver mit RSS-Reader AS3

Hi,

Es funktioniert schon, nur man muss eine Sache noch ändern:

An dem Punkt, wo Du laden initialisierst, muss noch folgendes stehen:
Code:
var laden:Loader=new Loader();
[COLOR="Red"]laden.name="laden"[/COLOR];

Das kann dann bleiben:

Code:
btn_unload.addEventListener(MouseEvent.CLICK, unloadFunction);

function unloadFunction(e:Event):void {
     if (mc_load.getChildByName("laden")!=null){
          mc_load.removeChild(laden);
          laden.unload();
     }
}

Aber Du hast ja schon eine Lösung gefunden.

Mfg ad86
 

Angus_MacGyver

Noch nicht viel geschrieben

AW: Screensaver mit RSS-Reader AS3

Ah, verstehe. Eigentlich eh logisch und klar. Aber leider bin ich einfach programmiertechnisch nicht so weit, dass ich da selber drauf komme. War nie meine Stärke, das logische Denken... :p:D

Danke auf alle Fälle!
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.621
Beiträge
1.538.378
Mitglieder
67.545
Neuestes Mitglied
helenkitina
Oben