Zurück   Flashforum > Flash > Flash Einsteiger

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 04-10-2010, 16:33   #1 (permalink)
Neuer User
 
Registriert seit: Oct 2006
Beiträge: 16
Instanz zu Movieclip

Hallo,

Wie kann man von einem Movieclip auf einen anderen zugreifen?

Von einem Movieclip ("test.CLICK") soll ein anderer Movieclip ("red") "visible=false" gemacht
werden. Beide liegen auf der "stage".

Das hier funktioniert nicht (in "test/CLICK.as"):
root.red.visible = false;

Testcase:
http://www.doppelbauer.name/flashtest.zip

Herzlichen Dank + Schöne Grüße
Markus
doublemax ist offline   Mit Zitat antworten
Alt 04-10-2010, 16:41   #2 (permalink)
................
 
Benutzerbild von Der Frager
 
Registriert seit: Jun 2004
Beiträge: 15.890
PHP-Code:
MovieClip(root).red.visible false
...sollte es tun.
__________________

ternärer Konditionaloperator

+++ Bitte keine Privat-Nachrichten bezüglich Flashfragen! +++
Der Frager ist offline   Mit Zitat antworten
Alt 04-10-2010, 17:02   #3 (permalink)
Neuer User
 
Registriert seit: Oct 2010
Beiträge: 13
Also das funktioniert nicht, du kannst von einem MovieClip aus nur auf andere Objekte zugreifen wenn diese in der Hirachie unter diesem liegen wenn ich nicht falsch informiert bin...

was möchtest du denn dann damit anstellen wenn das funktioniert??

ansonsten könntest du ein Event dispatchen das der MovieClip "red" erhält und dann darauf reagiert... dafür müsstest du zu diesem allerdings eine eigene Klassendatei schreiben wenn du es vermeiden möchtest in der zeitleiste zu programmieren...

wenn du willst mach ich dir dazu mal ein kleines beispiel...
damuddamc ist offline   Mit Zitat antworten
Alt 04-10-2010, 17:10   #4 (permalink)
Neuer User
 
Registriert seit: Oct 2006
Beiträge: 16
Herzlichen Dank für die Antwort!

Die Lösung mit "MovieClip(root)" funktioniert bei mir nicht:
TypeError: Error #1009: Der Zugriff auf eine Eigenschaft oder eine Methode eines null-Objektverweises ist nicht möglich.

Ich möchte - sobald die Instanz fertig ist - ein paar Elemente ein/ausblenden, z.B. den Start-Ladebalken und ein paar Optionen.

Es gibt keine Möglichkeit innerhalb eines SWFs von einem MovieClip auf andere MovieClips zuzugreifen?
Beispiel: http://www.doppelbauer.name/flashtest.zip

Herzlichen Dank + Schöne Grüße
Markus

Geändert von doublemax (04-10-2010 um 17:12 Uhr)
doublemax ist offline   Mit Zitat antworten
Alt 04-10-2010, 17:16   #5 (permalink)
Neuer User
 
Registriert seit: Oct 2010
Beiträge: 13
doch natürlich gibt es die aber du willst aus einem MovieCLip auf einen andere zugreifen der über diesem liegt und das geht nicht, würde CLICK den MovieClip red beinhalten könntest du das ohne weiteres, so aber nicht...

ich schreib deine datei mal schnell so wie ich das lösen würde...
damuddamc ist offline   Mit Zitat antworten
Alt 04-10-2010, 17:25   #6 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 7.306
Zitat:
Zitat von damuddamc Beitrag anzeigen
...aber du willst aus einem MovieCLip auf einen andere zugreifen der über diesem liegt und das geht nicht...
Natürlich geht das! Man kann von überall auf jedes Objekt zugreifen, solange es eine Referenz auf dieses gibt.

Auch sollte man in AS3 (anders als in AS2) die Objekte unabhängig von der Anzeigeliste verwalten. Konkret gibt es da verschiedene Wege (Parameterübergaben, statische Variablen, Ereignisse).

Zur Not funktioniert das aber auch über die root, sobald diese definiert ist, was hier scheinbar nicht der Fall ist. Benutz mal Event.ADDED_TO_STAGE statt Event.ADDED - wahrscheinlich reicht das schon...

Noch ein Tipp: "CLICK" wäre laut Coding Conventions die Schreibweise für eine Konstante - ein Klasse hingegen sollte "Click" heißen. Besser fänd ich jedoch einen verständlicheren Namen wie z.B. "NaviButton" und auch das Paket würde ich nicht unbedingt "test" nennen...
__________________
Viele Grüße // Martin

Martin Kraft // Interaktionsdesign

Hilfreiche Websites:
// Hilfe zur Adobe Flash Plattform
// ActionScript 2 Referenz
// ActionScript 3 Referenz
// ActionScript 3 Arbeitshandbuch
// weitere Flash Ressourcen

Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da!

Geändert von Martin Kraft (04-10-2010 um 17:38 Uhr)
Martin Kraft ist offline   Mit Zitat antworten
Alt 04-10-2010, 17:41   #7 (permalink)
Neuer User
 
Registriert seit: Oct 2010
Beiträge: 13
ich habs grad mal ausprobiert was du da gesagt hast, also über root geht das nicht....
und das man von überall direkt darauf zugreifen kann ist mit sicherheit nicht wahr, es muss mindestens in der geichen hierachie liegen..

über Events bekommst du das hin aber sonst nicht...

Geändert von damuddamc (04-10-2010 um 17:44 Uhr)
damuddamc ist offline   Mit Zitat antworten
Alt 04-10-2010, 18:00   #8 (permalink)
Neuer User
 
Registriert seit: Oct 2006
Beiträge: 16
Danke für die Antworten.
Also direkt zugreifen geht nicht? Gibt es super-globale Variablen, die man hierfür nutzen könnte?

Also:
GlobaleVariable = this; // want to hide
Später:
GlobaleVariable.visible = false;

Herzlichen Dank + Schöne Grüße
Markus
doublemax ist offline   Mit Zitat antworten
Alt 04-10-2010, 18:04   #9 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 7.306
Ich habs mir grade nochmal genau angesehen. Das Problem war, dass sowohl der Konstruktor als auch das Event.ADDED_TO_STAGE ausgeführt wurden, bevor Red überhaupt instanziiert wird. MovieClip(root).red war daher null.

Ich hab's jetzt mal so gelöst:
PHP-Code:
package test {
    
import flash.display.*;
    
import flash.events.*;
    
    public class 
Click extends Sprite {
        
        
// Initialisierung
        
public function Click():void {
            
addEventListenerEvent.ADDED_TO_STAGEstageInit );
        }
        
        private function 
stageInit(e:Event):void {
            
removeEventListener(Event.ADDED_TO_STAGEstageInit);
            
addEventListener(Event.ENTER_FRAMEdelayInit);
        }
        
        private function 
delayInit(e:Event):void {
            
removeEventListener(Event.ENTER_FRAMEdelayInit);
            
            
trace("HERE " root " / " MovieClip(root).red);
            
MovieClip(root).red.visible false;
        }
    }

Richtig sauber ist diese Lösung aber nicht. Ohne jedoch zu wissen, was Du eigentlich genau vorhast, kann man da keine seriösen Ratschläge geben.


@damuddamc:
Zitat:
Zitat von damuddamc Beitrag anzeigen
...und das man von überall direkt darauf zugreifen kann ist mit sicherheit nicht wahr, es muss mindestens in der geichen hierachie liegen..
Du kannst gerne eine Religion draus machen, wahrer wird's dadurch nicht


@doublemax:
Ja - so könnte man das z.B. mit einer static deklarierten Variablen in Click machen. Allerdings würde das auch nicht das Problem lösen, dass click bisher auf red zugreifen wollte, bevor es red überhaupt gab.
Angehängte Dateien
Dateityp: zip test.zip (7,0 KB, 1x aufgerufen)
__________________
Viele Grüße // Martin

Martin Kraft // Interaktionsdesign

Hilfreiche Websites:
// Hilfe zur Adobe Flash Plattform
// ActionScript 2 Referenz
// ActionScript 3 Referenz
// ActionScript 3 Arbeitshandbuch
// weitere Flash Ressourcen

Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da!

Geändert von Martin Kraft (04-10-2010 um 18:24 Uhr)
Martin Kraft ist offline   Mit Zitat antworten
Alt 04-10-2010, 18:15   #10 (permalink)
Neuer User
 
Registriert seit: Oct 2010
Beiträge: 13
ja ok dann lass ich das mal mit der religion

hast wohl recht gehabt mit dem root..

am saubersten wäre es dann wenn du die movieClips dynamisch über actionscript auf die bühne holst, so könnte man sich zumindest sicher sein das red schon da ist wenn CLICk erzeugt wird..
damuddamc ist offline   Mit Zitat antworten
Alt 04-10-2010, 18:19   #11 (permalink)
Neuer User
 
Registriert seit: Oct 2006
Beiträge: 16
Juhu! Danke Martin! Es funktioniert!

Danke für den Hinweis mit dem dynamischen Laden. Wie kann man
einen MoveClip von der Library laden? Hier wird nicht "Red" erkannt.

Code:
package test {
    import flash.display.*;
    import flash.events.*;
    
    public class Click extends Sprite {
        private var red:MovieClip;
        
        // Initialisierung
        public function Click():void {
            red = new Red();
            addChild(red);
            red.x = 10;
            red.y = 10;
        }
    }
}
Herzlichen Dank + Schöne Grüße
Markus

Geändert von doublemax (04-10-2010 um 18:36 Uhr)
doublemax ist offline   Mit Zitat antworten
Alt 04-10-2010, 19:02   #12 (permalink)
Neuer User
 
Registriert seit: Oct 2010
Beiträge: 13
du musst in der bibliothek bei RED in die Eigenschaften gehen und dort dann das häckchen bei Export für Actionscript machen..
dann kannst du drauf zugreifen...

Klasse nennst du da dann auch Red wenn du so drauf zugreifen willst wie in deinem Code..


allerdings würde ich den Code so schreiben:


package test {
import flash.display.*;
import flash.events.*;

public class Click extends Sprite {
private var red:MovieClip;

// Initialisierung
public function Click():void {
this.addEventListener(event.ADDED_TO_STAGE,ini);
}
private function ini(event:Event):void{
red = new Red();
addChild(red);
red.x = 10;
red.y = 10;

}
}
}


Also Red erst auf die Bühne holen wenn CLICK auch wirklich schon da ist...

Jetzt liegt Red aber in CLICK, das heisst jetzt brauchst du nichmehr über root drauf zu greifen, sondern über this.red aus Click heraus..

und das EnterFrame Event kannst du dir dann auch sparen!
damuddamc ist offline   Mit Zitat antworten
Alt 04-10-2010, 19:27   #13 (permalink)
Neuer User
 
Registriert seit: Oct 2006
Beiträge: 16
Hi damuddamc,

Herzlichen Dank für die Antwort! Irgendwie will die Klasse "Red"
nicht auf die Bühne. "Export für Actionscript" ist angekreuzt.

Habe das hier gemacht:
Code:
package test {
    import flash.display.*;
    import flash.events.*;
    
    public class Click extends Sprite {
        private var red:MovieClip;
        
        // Initialisierung
        public function Click():void {
            addEventListener( Event.ADDED_TO_STAGE, ini );
        }

        private function ini(event:Event):void{
            red = new Red();
            addChild(red);
            red.x = 10;
            red.y = 10;
        }
    }
}
Fehlermeldung:
1180: Aufruf einer möglicherweise undefinierten Methode Red.


http://doppelbauer.name/flashtest2.zip

Herzlichen Dank + Schöne Grüße
Markus
doublemax ist offline   Mit Zitat antworten
Alt 04-10-2010, 19:31   #14 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 7.306
Du müsstest noch "Export in Bild 1" anhaken!

Außerdem weiß ich nicht ob red tatsächlich in click liegen sollte. Wenn click z.B. ein Button wäre würde red dann auch zur aktiven Fläche gehören. Besser wäre es, wenn Du das über eine DokumentKlasse Main löst, die sowohl click als auch red instanziiert und als Eigenschaften verwaltet.
__________________
Viele Grüße // Martin

Martin Kraft // Interaktionsdesign

Hilfreiche Websites:
// Hilfe zur Adobe Flash Plattform
// ActionScript 2 Referenz
// ActionScript 3 Referenz
// ActionScript 3 Arbeitshandbuch
// weitere Flash Ressourcen

Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da!

Geändert von Martin Kraft (04-10-2010 um 19:34 Uhr)
Martin Kraft ist offline   Mit Zitat antworten
Alt 04-10-2010, 19:43   #15 (permalink)
Neuer User
 
Registriert seit: Oct 2010
Beiträge: 13
ja Bild 1 muss auch angeklickt sein, ist es aber normalerweise direkt wenn du den ersten hacken setzt..

hast du Red auch richtig geschrieben? nicht RED oder so? auch nicht test.Red, sonder nur Red..

Ja klar am besten wäre ne lösung über eine Main klasse..

Grad eine neue as datei anlegen:

package test{

import flash.events.Event;
import flash.display.MovieClip;

public class Main extends MovieClip{

public function Main():void{


this.addEventListener(Event.ADDED_TO_STAGE,ini);
}

private function ini(event:Event):void{
var red:Red = new Red();
this.addChild(red);
red.x = 10;
red.y = 10;


var klick:Click = new Click();
this.addChild(klick);

}


}



}

Die datei dann in deinen test ordner und in der fla in den Eigenschften bei Klasse test.Main eintragen..
damuddamc ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Movieclip Instanz entfernen swfgames ActionScript 3 2 11-03-2010 17:07
Eigenschaft an Instanz von MovieClip tomtitom Flash CS3 Professional 12 29-04-2008 13:10
MovieClip-Instanz attachen? pink! ActionScript 2 7 31-07-2007 10:22
MovieClip in andere MovieClip-Instanz kopieren edosoft ActionScript 1 14 18-05-2004 10:08
MovieClip-Instanz DasX Softwarearchitektur und Entwurfsmuster 1 02-04-2003 13:29


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:32 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2014 Marc Thiele