Zurück   Flashforum > Flash > ActionScript > Softwarearchitektur und Entwurfsmuster

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 28-11-2005, 11:18   #1 (permalink)
Neuer User
 
Registriert seit: Jul 2001
Beiträge: 222
Methoden Aufruf Problem

ich hab schon wieder oop-mäßig ein knoten im hirn ... oder im script ... oder beides ... :-\



wenn ich 2 externe klassen habe klasse1.as und klasse2.as

klasse2 enthält eine methode die ein "hallo" ausgibt. zB. sayHallo()


der verlauf is allerdings so, dass in szene1 zuerst ein objekt aus klasse1 erzeugt wird (zB. meineKlasse1), diese instanziert im konstruktor klasse2 (meineKlasse2).

so ... wenn ich nun die methode sayHallo von der szene aus aufrufen will funzt es nicht.

ruf ich sayHello allerding von meineKlasse1 aus auf, dann funktioniert es ...


wo is da die logik ... ?



gruß
ralph
Mediautilus24 ist offline   Mit Zitat antworten
Alt 28-11-2005, 12:58   #2 (permalink)
-
 
Registriert seit: Jul 2003
Beiträge: 714
Zitat:
Zitat von Mediautilus24
so ... wenn ich nun die methode sayHallo von der szene aus aufrufen will funzt es nicht.
Also bisher sieht es wohl so aus:

Klasse 1:

PHP-Code:
import klasse2.as;
class 
klasse1
{
    var 
k2;
    function 
klasse1()
    {
        
k2 = new klasse2();
    }
    

Klasse 2:
PHP-Code:
class klasse2 
{

    function 
klasse2()
    {
        
    }
    public function 
sayHello() {
        
trace("Hello");
    }
    

fla:

PHP-Code:
var k1 = new klasse1();
k1.sayHello(); 
Das kann doch garnicht gehen.
Klasse 1 hat nirgendwo ein Methode sayHello(); definiert.
Und das Klasse 1 auch keine Oberklasse(n) hat wird die Methode sayHello() nirgendwo gefunden.

Zitat:
Zitat von Mediautilus24
ruf ich sayHello allerding von meineKlasse1 aus auf, dann funktioniert es ...
Wenn du es so machst ist es klar

Klasse 1:

PHP-Code:
import klasse2.as;
class 
klasse1
{
    var 
k2;
    function 
klasse1()
    {
        
k2 = new klasse2();
        
k2.sayHello();
    }
    

Du rufst über die Instanz von Klasse 2 (k2) die Methode von Klasse 2 auf.
Und Klasse 2 hat ja die Methode sayHello().

Hier mal 2 einfach Lösungen:

1.)

PHP-Code:
import klasse2.as;
class 
klasse1 extends klasse2
{
    function 
klasse1()
    {
    
    }
    

Klasse 1 erweitert einfach Klasse 2 und hat somit jetzt auch eine Methode namens sayHello()

2.)
PHP-Code:
import klasse2.as;
class 
klasse1
{
    var 
k2;
    function 
klasse1()
    {
        
k2 = new klasse2();
    }
    function 
sayHello() {
        
k2.sayHello();
    }

Du rufst über die Instanz von Klasse 2 die Methode sayHello() von Klasse 2 auf.

In der *.fla ändert sich nichts:

PHP-Code:
var k1 = new klasse1();
k1.sayHello(); 
Aber ich weiß ja nicht was du machen willst.

Sollte ich irgendetwas falsch verstanden haben, ist es deine Schuld, weil du es nicht gut genug erklärt hast.

cu messingfeld
messingfeld ist offline   Mit Zitat antworten
Alt 28-11-2005, 13:08   #3 (permalink)
Neuer User
 
Benutzerbild von the binary
 
Registriert seit: Jul 2001
Ort: Berlin | Friedrichshain
Beiträge: 3.561
eine weitere variante wäre die vererbung..

PHP-Code:
import klasse2;

class 
klasse1
  
extends klasse2
{

    function 
klasse1()
    {
    }

    
// 'überladen' der super-methode
    
public function sayHello()
    {
        
trace("'deutsch: Tach!");
    }
    


PHP-Code:
// super-classe
class klasse2
{

    function 
klasse2()
    {
        
    }
    public function 
sayHello()
    {
        
trace("english: Hello!");
    }
    

PHP-Code:
var k1:klasse1 = new klasse1();
k1.sayHello(); 
gruss
__________________
8bm | join ff@BOINC
formpackage.org | audiohunter.de | problematica.de | 8ball-media.de/blog | taikonauten.cn
the binary ist offline   Mit Zitat antworten
Alt 28-11-2005, 13:10   #4 (permalink)
-
 
Registriert seit: Jul 2003
Beiträge: 714
messingfeld ist offline   Mit Zitat antworten
Alt 29-11-2005, 23:01   #5 (permalink)
Neuer User
 
Registriert seit: Jul 2001
Beiträge: 222
ähm ... also erst mal thx für die ausführliche antwort ...

stimmt fast was messingfeld verstanden hatte ... außer die frage nach dam aufruf ...
lag aber 100% an meiner schlechten erklärung :-D ...


also ... was ich getan hatte, war genau was messingfeld beschreibt bis auf eines ... und zwar habe ich den aufruf anders versucht .. und zwar


fla:

var k1 = new klasse1();
k2.sayHello();


wobei der - k2.sayHello(); -aufruf nicht direkt geschieht sondern auf einem button liegt ... also kanns auch nicht an nem "timing"- problem liegen ...

warum geht das nicht ?


denkfehler ?

Geändert von Mediautilus24 (30-11-2005 um 08:03 Uhr)
Mediautilus24 ist offline   Mit Zitat antworten
Alt 30-11-2005, 09:27   #6 (permalink)
Neuer User
 
Benutzerbild von the binary
 
Registriert seit: Jul 2001
Ort: Berlin | Friedrichshain
Beiträge: 3.561
weil k2 in dem fall nicht existiert, sondern k1 die methoden von k2 'erbt'...
__________________
8bm | join ff@BOINC
formpackage.org | audiohunter.de | problematica.de | 8ball-media.de/blog | taikonauten.cn
the binary ist offline   Mit Zitat antworten
Alt 30-11-2005, 11:11   #7 (permalink)
Neuer User
 
Registriert seit: Jul 2001
Beiträge: 222
okok ... sorry ... will nicht nerven ...

bin eben oop neueinsteiger ... ich glaub ch hab da noch hier und da ne lücke zu schließen ;-) ... (buchtips werden nebenbei auch gerne entgegengenommen) ...


aaaalso nochmal die frage ... wenn die erste klasse die zweiter erzeugt existiert die zweite nicht ? ähm .. ?
ich glaube ich denk zu sehr in dieser movieClip hirarchie welt ...
aber wie mach ich das dann wen ich unterschiedliche objekte möchte ? diese aber nicht in der zeitleiste erzeugen will.
oder wenn ich zB. mehrer Instanzen von einer Klasse benötige ..


um das bsp mal zu konkretisieren ...

ich versuche grad den editor für einen mah jong klon zu basteln ...
also ...

dacht ich erzeug unterschiedliche objekte:

- eine art cursor Modul der mir die position gibt, wo ein stein hingesetzt werden soll
- einen anzeiger/schalter Modul für die ebenen auf die der stein abgelegt werden soll
- einen anzeiger/schalter Modul für den stein-typ, der abgelegt werden soll


das ganze wird von dem objekt "GAME" erzeugt ...

bei klick, will ich von den 3 modulen einen parameter entnehmen, eine instanz der Klasse "Spielstein" erzeugen und diese parameter mit übergeben (ebene, Xpos, Ypos, SteinTyp etc.) ...
klingt doch ganz sinnvol, oder nicht ?

also wie mach ich das mit den getrennten modulen , bzw wie kann ich sie denn ansprechen ... ?


gruß
ralph

Geändert von Mediautilus24 (30-11-2005 um 13:37 Uhr)
Mediautilus24 ist offline   Mit Zitat antworten
Alt 30-11-2005, 14:49   #8 (permalink)
Neuer User
 
Registriert seit: Jul 2001
Beiträge: 222
aaaargh ...

hab grad nen fehler entdeckt ...
ich hatte die "var K2" nicht definiert ...
somit wurde wohl das objekt automatisch als private erzeugt ...

asche auf mein haupt ...

wenn mans public erzeugt kann man natürlich auch auf die methode zugreifen ... (ähm .. also ohne vererbung) ...



trotzdem dickes merci ... und immer noch die frage nach dem buch ;-) ... hat jemand n tip? ... weiß jemand wie dieses as2.0 buch von rainer ruppert so ist ? ... das gibts zwar nicht mehr , aber vieleicht kann man das noch irgendwo besorgen so es sich lohnt ...


gruß & merci again ...

ralph
Mediautilus24 ist offline   Mit Zitat antworten
Alt 30-11-2005, 15:18   #9 (permalink)
Neuer User
 
Benutzerbild von the binary
 
Registriert seit: Jul 2001
Ort: Berlin | Friedrichshain
Beiträge: 3.561
dann ist es natürlich klar ..
nein, so ist es keine vererbung, denn k2 ist nun eine eigenschaft (property) von k1.

gruss
__________________
8bm | join ff@BOINC
formpackage.org | audiohunter.de | problematica.de | 8ball-media.de/blog | taikonauten.cn
the binary 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



Alle Zeitangaben in WEZ +1. Es ist jetzt 15:33 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele