Flashhilfe.de - Flash Community

Textticker mit XML. Fehler. :( [Flash CS4]

 


AntwortenRegistrieren Seite1 2  

lost-in-emotions#1
Benutzerbild von lost-in-emotions
Beiträge: 45
Wohnort: Wiesbaden
Registriert: Nov 2004

12.07.2010, 09:51

Hallo, ich habe hier ein Script gefunden mit einen Textticker genau wie ich ihn brauche. Leider gibts dazu ein Problem.

• Der Ticker wird durch ein Mouse RollOver ausgeführt.

Und wenn ich runter gehe und wieder drauf, wird er schneller.
Dann gehe ich wieder runter und wieder drauf und er wird noch schneller.
Und wenn ichd as 10x mache, kannste dir vorstellen wie der Ticker abgeht!

Wo ist der Fehler?
Kann man net einfach das Script erweitern,
das er einfach die Funktion bei Mouse RollOut neustartet/löscht?

ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
var interval = 1000;

var xm = new XML();
var news = new Array();
var current = 0;
var IV = 0;

xm.ignoreWhite = true;

xm.load("news.xml");

xm.onLoad = function() {
     parse(this);
}

function parse(obj) {
     for (var i=0; i<obj.childNodes.length; i++) {
        news[i] = ct.container.attachMovie("entry" , "news.xml" +i, i);
        news[i].body = obj.childNodes[i].firstChild;
        news[i]._visible = false;
     }
     this.onEnterFrame = function() {
        init();
        delete this.onEnterFrame;
     }
}

function init() {
     for (var i=0; i<news.length; i++) {
        news[i]._y = - news[i]._height;
        news[i]._visible = true;
        news[i].onEnterFrame = function() {
           if (this.dy != undefined) {
              this._y += (this.dy - this._y) / 3;
           }
           if (this.init == undefined) {
              if (this.body != undefined) {
                 this.bd.text = this.body;
                 this.init = true;
              }
           }
        }
     }
     IV = setInterval(function() { nextOne(); }, interval);
}

function nextOne() {
     for (var i=0; i<news.length; i++) {
        if (i == current) {
           news[i]._y = ct._height + 10;
           news[i].dy = 0;
           news[i].swapDepths(ct.container.getNextHighestDepth());
        } else {
           news[i].dy = - news[i]._height;
        }
     }
     current ++;
     if (current>=news.length) {       
        current = 0;
  }   }


Danke :)
springer#2
Benutzerbild von springer
Beiträge: 4909
Wohnort: zuhaus
Registriert: Apr 2004

12.07.2010, 10:15

hi,
wo ist denn das script vom rollover/rollout? ich kann in deinem script nichts erkennen, was bei einem rollover/rollout ein problem verursachen könnte...
lieber chips essen und danach voller zweifel sein, als voller zweifel chips essen...
lost-in-emotions#3
Benutzerbild von lost-in-emotions
Beiträge: 45
Wohnort: Wiesbaden
Registriert: Nov 2004

Themenautor/in

12.07.2010, 10:27

Also auf dem Button liegt folgendes:

ActionScript:
1
2
3
4
5
6
7
8
on (rollOver) {
     gotoAndStop(70);
}
on (rollOut) {
     clearInterval (container.IV);
     unloadMovie (container);
     gotoAndStop(55);
}



Auf (70) liegt dann mein Ticker.
Wenn ich jetzt auf den Button drauf und drunter, drauf und drunter usw gehe, wird der Ticker immer schneller. Und ich habe keine Ahnung woran das liegt?!

Dachte halt das der MC nicht auf der Seite geladen wird, sondern eben per Button und er nie beendet wird, nach Out. Und er summiert sich so ins unendliche hoch?!
springer#4
Benutzerbild von springer
Beiträge: 4909
Wohnort: zuhaus
Registriert: Apr 2004

12.07.2010, 10:37

und auf welchem button liegt das?

das script oben liegt also in Frame 70?
lieber chips essen und danach voller zweifel sein, als voller zweifel chips essen...
lost-in-emotions#5
Benutzerbild von lost-in-emotions
Beiträge: 45
Wohnort: Wiesbaden
Registriert: Nov 2004

Themenautor/in

12.07.2010, 11:01

Genau. Der Button (mit Button Script) liegt Global auf Key 1 - 100.

Auf Key 70 ist dann das große Script.

Funktioniert ja quasi. Nur das irgendwas durch MouseOver zerhaut wird.
Ich uppe die Datei mal, da sieht man genau was passiert, wenn man auf den Button geht und dies wiederholt.

Archiv.zip (14.71 KB)
Geändert von lost-in-emotions am 12.07.10 um 11:02 Uhr
springer#6
Benutzerbild von springer
Beiträge: 4909
Wohnort: zuhaus
Registriert: Apr 2004

12.07.2010, 11:10

hab nur CS3. in cs4 kannst du runterspeichern...
lieber chips essen und danach voller zweifel sein, als voller zweifel chips essen...
Geändert von springer am 12.07.10 um 11:11 Uhr
lost-in-emotions#7
Benutzerbild von lost-in-emotions
Beiträge: 45
Wohnort: Wiesbaden
Registriert: Nov 2004

Themenautor/in

12.07.2010, 11:52

Datei anbei.

Angehängte Dateien:
Komprimierte Datei Archiv.zip25.21 KB
springer#8
Benutzerbild von springer
Beiträge: 4909
Wohnort: zuhaus
Registriert: Apr 2004

12.07.2010, 12:33

auf ebene code in frame 1 schreibst du das:

ActionScript:
1var intervalID:Number = 0;


auf deinem button das:

ActionScript:
1
2
3
4
5
6
7
8
on (rollOver) {
       gotoAndStop(70);
}
on (rollOut) {
       clearInterval (intervalID);
       unloadMovie (container);
       gotoAndStop(55);
}


wobei du dir diesen link mal zu gemüte führen solltest...

und in frame 70, in deiner init() änderst du folgende zeile ab:

ActionScript:
1intervalID = setInterval(function(){nextOne();}, interval);


das problem war, dass dein interval nicht gecleart wurde, weil die referenz auf container.IV falsch war... darum hattest du zwei intervalle welche die news wechselte. bei erneutem rollover dann drei intervalle, dann vier, usw... es wurde also nicht schneller, lieft nur mehrfach ;-)
lieber chips essen und danach voller zweifel sein, als voller zweifel chips essen...
Geändert von springer am 12.07.10 um 12:35 Uhr
lost-in-emotions#9
Benutzerbild von lost-in-emotions
Beiträge: 45
Wohnort: Wiesbaden
Registriert: Nov 2004

Themenautor/in

12.07.2010, 12:50

Jawoll, geilo. Es klappt. Danke!

Und jetzt noch 1 Bonus Frage :D

• Wenn ich auf den Button gehe, "lädt" er gefühlsmäßig lange den Tickerblock.
Die Absätze innerhalb, kann man ja zeitlich variieren im Script. Das ist soweit Ok.
Nur ich würde gerne das er beim ersten Mal (oder eben jedesmal beim MouseOver),
etwas schneller die Sequenz beginnt (nicht das der User aus Langeweile wieder MouseOut macht).

:)
springer#10
Benutzerbild von springer
Beiträge: 4909
Wohnort: zuhaus
Registriert: Apr 2004

12.07.2010, 12:57

jep, kannst einfach bevor du den interval startest nextOne() aufrufen....

und was ich auch noch machen würde ist, die xml nicht jedes mal zu laden. also in etwa so:

ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
var interval = 1000;

var xm = new XML();
var news = new Array();
var current = 0;
var IV = 0;

xm.ignoreWhite = true;

var loaded:Boolean = false;

if( !loaded ){
     xm.load("news.xml");   
}else{
     startIt();   
}


xm.onLoad = function() {
      loaded = true;   
      parse(this);
}

function parse(obj) {
     for (var i=0; i<obj.childNodes.length; i++) {
        news[i] = ct.container.attachMovie("entry" , "news.xml" +i, i);
        news[i].body = obj.childNodes[i].firstChild;
        news[i]._visible = false;
     }
     this.onEnterFrame = function() {
        init();
        delete this.onEnterFrame;
     }
}

function init() {
     for (var i=0; i<news.length; i++) {
        news[i]._y = - news[i]._height;
        news[i]._visible = true;
        news[i].onEnterFrame = function() {
           if (this.dy != undefined) {
              this._y += (this.dy - this._y) / 3;
           }
           if (this.init == undefined) {
              if (this.body != undefined) {
                 this.bd.text = this.body;
                 this.init = true;
              }
           }
        }
     }
     startIt();
}

function startIt(){
     nextOne();
     intervalID = setInterval(function(){nextOne();}, interval);   
}

function nextOne() {
     for (var i=0; i<news.length; i++) {
        if (i == current) {
           news[i]._y = ct._height + 10;
           news[i].dy = 0;
           news[i].swapDepths(ct.container.getNextHighestDepth());
        } else {
           news[i].dy = - news[i]._height;
        }
     }
     current ++;
     if (current>=news.length) {       
        current = 0;
  }   }
lieber chips essen und danach voller zweifel sein, als voller zweifel chips essen...
lost-in-emotions#11
Benutzerbild von lost-in-emotions
Beiträge: 45
Wohnort: Wiesbaden
Registriert: Nov 2004

Themenautor/in

12.07.2010, 13:19

PERFEKT. Super. genau das isses! DANKE :)

Aber eben sehe ich ein neues Problem:
Die Sonderzeichen in der XML werden nicht richtig (garnicht) abgezeigt?!
Also speziell diese hier: ";' sowie äöü und ß?!

Muss ich in der XML irgendwas in die erste Zeile schreiben?
Flash habe ich schon gesagt, das er die Sonderzeichen etc einbetten soll?!
springer#12
Benutzerbild von springer
Beiträge: 4909
Wohnort: zuhaus
Registriert: Apr 2004

12.07.2010, 14:17

also deine xml sollte schon etwa so aussehen:
PHP:
1
2
3
4
5
6
7
8
<?xml version="1.0" encoding="UTF-8"?>
<allnews>
<news>&auml;SONAX Xtreme Autoshampoo 2 in 1 mit &bdquo;eingebautem Trockner&ldquo;</news>
<news>&auml;Alte Wimmelb&uuml;cher von Ali Migutsch aus dem Keller holen</news>
<news>&auml;&bdquo;We&rsquo;re Germans&ldquo; von Mundstuhl</news>
<news>&auml;Zitate von George Bernhard Shaw: &bdquo;Was wir brauchen, sind ein paar verr&uuml;ckte Leute; seht euch an, wohin uns die Normalen gebracht haben.&ldquo;</news>
<allnews>


dann ändert sich die for - schleife dann noch:

ActionScript:
1
2
3
4
5
for (var i=0; i<obj.firstChild.childNodes.length; i++) {
        news[i] = ct.container.attachMovie("entry" , "news.xml" +i, i);
        news[i].body = obj.firstChild.childNodes[i].firstChild;
        news[i]._visible = false;
     }
lieber chips essen und danach voller zweifel sein, als voller zweifel chips essen...
Geändert von springer am 12.07.10 um 14:17 Uhr
lost-in-emotions#13
Benutzerbild von lost-in-emotions
Beiträge: 45
Wohnort: Wiesbaden
Registriert: Nov 2004

Themenautor/in

12.07.2010, 14:26

mhh. Ok. Aber diesmal funzt es nicht?!

Wird in der Flash 1:1 (mit &auml etc) angezeigt, wie in der XML...


EDIT: das fehlende / im <ALLNEWS> isses auch nicht.
Geändert von lost-in-emotions am 12.07.10 um 14:28 Uhr
springer#14
Benutzerbild von springer
Beiträge: 4909
Wohnort: zuhaus
Registriert: Apr 2004

12.07.2010, 14:33

uphs, da hat wohl der forum-formatter etwas umgebaut. also in der xml kannst du ganz normal umlaute verwenden. was ich aber vergessen hatte zu erwähnen ist, dass du in deinem clip entry die schrift eingebettet hast. dort hast du aber die umlaute nicht zusätzlich eingefügt. du hast nur 0-9 und a-z drin....
lieber chips essen und danach voller zweifel sein, als voller zweifel chips essen...
lost-in-emotions#15
Benutzerbild von lost-in-emotions
Beiträge: 45
Wohnort: Wiesbaden
Registriert: Nov 2004

Themenautor/in

12.07.2010, 14:53

mhh, also ich habe jetzt die XML neu geschrieben mit öäüÖÄÜ etc und mal ALLE Schriften in Flash eingebettet. Ausser das es lange zum Veröffentlichen braucht, ändert sich nichts?!

Flash macht automatisch ein &auml; etc hin.?!

EDIT: also üöä geht?! Aber keine Anführunsgzeichen und Semis.?!
Geändert von lost-in-emotions am 12.07.10 um 14:57 Uhr
springer#16
Benutzerbild von springer
Beiträge: 4909
Wohnort: zuhaus
Registriert: Apr 2004

12.07.2010, 15:44

schreib mal noch

ActionScript:
1System.useCodepage = true;


in den ersten keyframe der hauptzeitleiste...

anführungszeichen gehen nur, wenn du diese auch einbettest...
lieber chips essen und danach voller zweifel sein, als voller zweifel chips essen...

AntwortenRegistrieren Seite1 2  

Schnellantwort

Du musst registriert sein, um diese Funktion nutzen zu können.

 
Ähnliche Beiträge zum Thema
Partner Webseiten: art-and-law.de  Mediengestalter.info   phpwelt.de   Scubacube.de  
Haftungsausschluss   Datenschutzerklärung   Impressum
© 1999-2022 Sebastian Wichmann - Flashhilfe.de