Mouseover bei CreateEmptyMovieClip

MatMagic

Erfahrenes Mitglied
Hallo Flasher!
Ich habe gerade erst angefangen mich mit Action Script zu beschäftigen und bin nun auch nach stundenlangem gegoogl`e nicht weiter gekommen.

Ich habe eine Textarea und eine Window Komponente.
In der Window Komponente nutze ich diesen Code.....

Code:
onClipEvent (load) {
var bilder = new Array("TestPic1.jpg", "TestPic2.jpg", "TestPic3.jpg", "TestPic4.jpg");
var c = int(Math.random(bilder.length));
var container = this.createEmptyMovieClip("container", 1000);
container._x = 50; // Positionieren
container._y = 30;
container.loadMovie(bilder[ c]);
container._xscale = 1250;
container._yscale = 1250;
---hier habe ich den unteren code eingefügt---
}

.....um ein Bild (zur Zeit nur das erste, später je nach Var Wertigkeit noch die anderen) einzuladen und anzuzeigen. Das klappt auch einwandfrei. Ich hätte jetzt nur gerne über das geladene Bild einen Mouseover der mir dann etwas in die Textarea schreibt (aus einer Textdatei).

Das habe ich unter anderem so versucht:

Code:
///Mouseover Container
container.onMouseMove = function()
{
dyntext = new LoadVars(); 
	dyntext.onLoad = function()
	{ 
	 _root.TextAreaStart.text = dyntext.content; 
	} 
dyntext.load("info.txt");

^ innerhalb des OnClipEvents
Leider bisher ohne Erfolg. Das Anzeigen (also einladen) des Textes aus der Textdatei funktioniert - das habe ich mit einem Button getestet.

Kann mir einer von euch den Fehler um die Ohren hauen bitte? :
 
Hi,

wenn Du auf Deinem Container eine loadMovie-Aktion ausführst:
Code:
container.loadMovie(bilder[ c]);
und direkt danach (oder auch davor) einen Maushandler auf dem selben Clip definierst:
Code:
container.onMouseMove = function()
, passiert folgendes:
  1. Das Laden des Bildes beginnt ...

  2. der Maushandler (onRollOver) wird definiert ...

  3. das Bild ist komplett geladen und überschreibt den MC "container". Damit wird auch Dein Maushandler gelöscht

Du musst also entweder darauf warten, bis das Bild komplett geladen ist, und erst dann den Maushandler definieren, oder in Deinem Container einen weiteren Container erstellen, in den Du das Bild lädst. Auf den äusseren Container kannst Du dann Dein Mausereignis legen, ohne dass das Laden externer Inhalte diesen MC überschreibt.

Weitere Anmerkungen: onMouseMove ist ein Listener, der dem Mausobjekt per addListener-Methode hinzugefügt wird; direkt auf MovieClips kannst Du ihn nicht definieren. Verwende für ein MouseOver-Ereignis den Handler onRollOver.

Zudem wunderst es mich ein wenig, dass Du direkt in einer Componente, einen Clip per createEmptyMovieClip erstellen kannst, ohne die Depth-Manger-Klasse zu verwenden.

Gruß
.
 
Ich habe das jetzt mal mit einem 2. Container probiert.....

Code:
onClipEvent (load) {
var bilder = new Array("TestPic1.jpg", "TestPic2.jpg", "TestPic3.jpg", "TestPic4.jpg");
var c = int(2(bilder.length));
var bild = this.createEmptyMovieClip("container", 1000);
var maus = this.createEmptyMovieClip("container", 1000);
bild._x = 50; // Positionieren
bild._y = 30;
maus._x = 50; // Positionieren
maus._y = 30;
///Mouseover Container
maus.onRollOver = function()
{
dyntext = new LoadVars(); 
	dyntext.onLoad = function()
	{ 
	 _root.mainText.text = dyntext.content; 
	} 
dyntext.load("info.txt"); 
}
bild.loadMovie(bilder[ c]);
bild._xscale = 1250;
bild._yscale = 1250;
maus._xscale = 1250;
maus._yscale = 1250;
}

......falls du das so gemeint hast (container in container?) funktioniert es leider nicht. Also keine Änderung. Könntest du mir dann sagen wie ich es realisiere das erst das Bild zuende geladen wird.....oder mir genauer beschreiben was du mit Container in Container meinst?

Vorschau: http://www.matmagic.de/_tutorials/mouseover/1.swf
^ über dem blauen Viereck soll der RollOver verfügbar sein
Fla-Datei: http://www.matmagic.de/_tutorials/mouseover/mausover.rar
 
Zuletzt bearbeitet:
Code:
var bild = this.createEmptyMovieClip("container", 1000);
var maus = this.createEmptyMovieClip("container", 1000);
Nein, damit erstellst Du zweimal den selben MovieClip (maus überschreibt hier sogar bild).

Korrekt wäre:
Code:
var maus = this.createEmptyMovieClip("maus", 1000);
var bild = maus.createEmptyMovieClip("bild", 1);

Gruß
.
 
Ich hoffe ich fange nicht langsam an zu nerven......

Wenn ich den Code so verwende......
Code:
var maus = this.createEmptyMovieClip("maus", 1000);
var bild = maus.createEmptyMovieClip("bild", 1);
.....ist mein blaues Viereck nicht mehr sichtbar und ich habe auch keinen RollOver.

Wenn ich es umdrehe......
Code:
var bild = this.createEmptyMovieClip("bild", 1000);
var maus = bild.createEmptyMovieClip("maus", 1);
.....ist mein blaues Viereck wieder sichtbar aber leider immer noch ohne RollOver. :(

Kannst du das nochmal überprüfen....*hoff* :(
 
Hi,

ich habe den Code mal entsprechend bereinigt:
Code:
onClipEvent (load) {
	var bilder = new Array("TestPic1.jpg", "TestPic2.jpg", "TestPic3.jpg", "TestPic4.jpg");
	var c = int(2(bilder.length));
	var container = this.createEmptyMovieClip("container", 1000);
	var img = container.createEmptyMovieClip("img", 1);
	container._x = 50; // Positionieren
	container._y = 30;
	// Mouseover Container
	container.onRollOver = function()
	{
	dyntext = new LoadVars(); 
		dyntext.onLoad = function()
		{ 
		 _root.mainText.text = dyntext.content; 
		} 
	dyntext.load("info.txt"); 
	}
	img.loadMovie(bilder[ c]);
	img._xscale = 1250;
	img._yscale = 1250;
}
Wenn Du einen Container innerhalb eines Containers erstellst, darfst Du natürlich nicht beide Container positionieren und skalieren - sonst ist das Ding plötzlich doppelt so groß und verschoben. ;)

Warum packst Du den gesamten Code eigentlich in eine onClipEvent-Prozedur auf einer Komponente? Übersichtlicher wäre es, wenn Du die nötigen Funktionen auf einer Zeitleiste notierst und nicht schachtelst.

Der Window-Komponente wird ein Inhalt über ihre contentPath-Eigenschaft zugewiesen, und nicht über z.B. createEmptyMovieClip. So etwas kann vielmehr zu Problemen führen, da die Komponenten über eine eigene Tiefenverwaltung verfügen.

Probiers mal so:
  • Gib Deiner Window-Komponente einen Instanznamen, z.B. "mainWindow"

  • Erstelle in der Bibliothek einen leeren MovieClip namens "container" und gib ihn zum Export für AS frei.

  • Entferne den Code auf der Window-Komponente, erstelle auf der Hauptzeitleiste eine neue Ebene und füge dort folgenden Code ein:
Code:
var bilder = new Array("TestPic1.jpg", "TestPic2.jpg", "TestPic3.jpg", "TestPic4.jpg");
var c = int(2(bilder.length))

var dyntext = new LoadVars(); 
dyntext.onLoad = function() {
	_root.mainText.text = this.content; 
} 

mainWindow.contentPath = "container";

var l = new Object();
l.complete = function(eo) {
	init();
}

mainWindow.addEventListener("complete", l);

function init() {
	var img = mainWindow.content.createEmptyMovieClip("img", 1);
	img.loadMovie(bilder[ c]);
	img._xscale = 1250;
	img._yscale = 1250;
	img._x = 50;
	img._y = 30;
	mainWindow.content.onRollOver = function() {
		dyntext.load("info.txt"); 
	}
}

Gruß
.
 
:) Super vielen lieben Dank!
Ich glaube es ist an der Zeit das ich mir ein leicht verständliches Buch zulege - villeicht "Flash for Dummies" oder so.

Nochmal vielen Dank und einen guten Rutsch!
 
Zurück