Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 01-01-2005, 21:19   #1 (permalink)
Neuer User
 
Registriert seit: Mar 2003
Beiträge: 46
dynamischer Klassenname ??

Guten Abend zusammen,

habe folgendes Problem:

Habe 2 Buttons auf der Bühne. Bei Klick sollen Objekte der Klasse erstellt werden die ich via Übergabeparameter definiere.

Also
PHP-Code:
on press()
{
init(Klassenname)
//also z.B. init("Player"), init("Enemy") etc.

die Funktion init() sieht so aus;
PHP-Code:
function init(myclass)
{
for (
k=0k<=9k++) {

    
this["mymc"+k] = new myclass();
// also z.B. new Player() , new Enemy() etc.



Das Problem:
"myclass" ist ja hier eine Variable, Flash sucht aber nun die Klasse mit dem Namen "myclass" und das ist falsch. Es sollen ja Objekte der Klasse erstellt werden die via Übergabeparameter definiert wurde.

Hat jemand eine Ahnung wie das geht??

Danke und "frohs´ Neus´"

|ElectroCunt|
_______________________
ElectroCunt ist offline   Mit Zitat antworten
Alt 02-01-2005, 14:30   #2 (permalink)
querdenker
 
Benutzerbild von kelor
 
Registriert seit: Jun 2001
Ort: formel1-stadt hockenheim
Beiträge: 4.731
ActionScript:
  1. //bsp klasse 'myClass'
  2. function myClass(){
  3.             trace('huhu');
  4. }
  5.  
  6. // funktion zum zusammensetzen des klassennamens
  7. function setClassName (tar, class_nm){
  8.             for(var i=0; i<=9; i++){
  9.                  this['mymc'+i] = new tar[class_nm]();
  10.              }
  11. }
  12.  
  13. //button bzw. movieclip, der iirgendwo sitzt ( script hier auf _root)
  14.  
  15. this.mc1.onPress = function(){
  16.        _root.setClassName(_root, 'myClass');
  17. }





greetz

kelor
kelor ist offline   Mit Zitat antworten
Alt 09-01-2005, 18:17   #3 (permalink)
Neuer User
 
Registriert seit: Mar 2003
Beiträge: 46
Okay, danke erstmal. Funktioniert jetzt:

Jetzt ist es aber so, das die Klassennamen in einem XML-File liegen.
Du übergibst ja den String 'myClass'. Wenn ich aber den Klassenname in einer Variablen habe geht es nicht mehr.

Also so:
PHP-Code:
myClass=variable_aus_XML // z.B. myClass=Player

this.mc1.onPress = function(){ 
       
_root.setClassName(_rootmyClass); 

Jetzt werden in der setClassName () keine Objekte mehr erzeugt

PHP-Code:
function setClassName (tarclass_nm){ 
            for(var 
i=0i<=9i++){ 
                 
this['mymc'+i] = new tar[class_nm](); 
                 
trace(this['mymc'+i]) // -> Ausgabe: undefined 
             


Achso: Wichtig in dem Fall, ich importiere meine Klasse via: (also Klassendefinition mit AS 2.0)
PHP-Code:
import myClass
Hat hier jemand eine Idee??

Lieben Dank

ElectroCunt

Geändert von ElectroCunt (09-01-2005 um 18:52 Uhr)
ElectroCunt ist offline   Mit Zitat antworten
Alt 09-01-2005, 23:50   #4 (permalink)
querdenker
 
Benutzerbild von kelor
 
Registriert seit: Jun 2001
Ort: formel1-stadt hockenheim
Beiträge: 4.731
trace mal die variable auf
  1. Inhalt
  2. typeof(variablenname);


kommt da´n string bei rum?



greetz

kelor
kelor ist offline   Mit Zitat antworten
Alt 10-01-2005, 18:10   #5 (permalink)
Neuer User
 
Registriert seit: Mar 2003
Beiträge: 46
Servus,
ja, typeof ist ein String und Inhalt ist der Name der Klasse, also alles bestens, aber es funktioniert nicht!!!

Hab da gestern noch ewig rumprobiert. Komischerweise geht folgendes:

PHP-Code:
import Array; // also die Klasse die mir Flash bereits zur verfügung stellt
// Muss ich hier nicht schreiben, nur der Logig halber.
var c:String "Array"

function init(class_nm)
{
var 
mymc= new [class_nm];
mymc.push("Ruuudi")
trace(mymc); //-> Ausgabe: Ruuudi
}
init(c
sobald ich aber meine eigene Klasse importiere geht es halt nicht mehr

PHP-Code:
import myClass;
var 
c:String "myClass"

// var mymc= new myClass() komischerweise funktioniert das wenn ich erst 
// ein Object der Klasse myClass erstelle und das Object in der init() dann 
// überschreibe nur dann muss ich ja wieder myClass hinschreiben 

function init(class_nm)
{
var 
mymc= new [class_nm];

trace(mymc.myname); //-> Ausgabe: undinfined
}
init(c
Die Klasse myClass sieht so aus:
PHP-Code:
class myClass

{
private var 
myname:String="Ruuuudi";    
    

Hat hier jemand eine Ahnung, denn im XML-File stehen ca. 60 Klassennamen
und ich will eine lange "case" Abfrage vermeiden und die ganze dynamik ist dahin.


Besten Dank

----------------------------
ElectroCunt
----------------------------

Geändert von ElectroCunt (10-01-2005 um 18:11 Uhr)
ElectroCunt ist offline   Mit Zitat antworten
Alt 10-01-2005, 18:39   #6 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Du musst die Klasse mindestens einmal referenzieren, damit Flash sie in das SWF einbindet. Ich benutze dafür haeufig eine Dummy-Funktion, die ich gar nicht aufrufe:

ActionScript:
  1. function forceImport(){
  2.      var x1: de.bokelberg.Class1;
  3.      var x2: de.bokelberg.Class2;
  4.      var x3: de.bokelberg.Class3;
  5. }

mfg r.
bokel ist offline   Mit Zitat antworten
Alt 10-01-2005, 19:40   #7 (permalink)
Neuer User
 
Registriert seit: Mar 2003
Beiträge: 46
Ah, okay. Sehr geil. Danke für den Tip. Geht jetzt Bestens. So kann ich mir wenigstens die case Abfrage sparen und den Code etwas kürzen.

Kann man das einmalige referenzieren aber nicht doch irgendwie umgehen?

----------------------------
ElectroCunt
----------------------------
ElectroCunt ist offline   Mit Zitat antworten
Alt 10-01-2005, 21:14   #8 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Wenn du voll dynamisch arbeiten willst, kannst du auch deine Klassen einzeln in swfs stecken, die du dann nur bei Bedarf lädst. So kannst du das System beliebig durch neue Klassen erweitern, indem du neue swfs mit der entsprechendend Klasse hinzufügst.

mfg r.
bokel ist offline   Mit Zitat antworten
Alt 10-01-2005, 22:15   #9 (permalink)
querdenker
 
Benutzerbild von kelor
 
Registriert seit: Jun 2001
Ort: formel1-stadt hockenheim
Beiträge: 4.731
Zitat:
Zitat von ralf
ActionScript:
  1. function forceImport(){
  2.      var x1: de.bokelberg.Class1;
  3.      var x2: de.bokelberg.Class2;
  4.      var x3: de.bokelberg.Class3;
  5. }
sehr nette idee, gleich ne ganze funktion dafür bereit zu stellen...*gefällt mir*



greetz

kelor
kelor ist offline   Mit Zitat antworten
Alt 24-03-2005, 18:11   #10 (permalink)
Flash Junge
 
Benutzerbild von Jocki
 
Registriert seit: Jun 2003
Ort: Hamburg - Altona
Beiträge: 87
ich habe ein verwandtes Problem:

Auch ich erhalte ebenfalls einen Klassennamen aus xml, den ich aber als komplett gültigen Klassennamen (nicht als String sondern Function) einer anderen Funktion übergeben will.

PHP-Code:
import jocki.packageName;

class 
classTwo extends classOne{
    public function 
passClassName(className:String){
        var 
validName:Function = jocki.packageName[className];
        
receiveClassName(validName);
    }

classOne ist fester Bestandteil meines Frameworks und die Funktion receiveKlassName braucht nun mal eine korrekt indentifizierbare Klasse.

PHP-Code:
class classOne{
    public function 
receiveClassName(validName:Function){
        
//braucht validen Kalssenname
        
...
    }

So funktioniert es leider nicht. In einem früheren Projekt habe ich die Klassennamen über eine sehr lange switch/case schleife bestimmt, hier rechne ich mit noch mehr unterschiedlichen Klassen, für die ich keine Einzelabfragen schreiben möchte. Auch wenn classTwo die froceImport von Bokel enthält klappt es leider nicht.

Wer hat eine Idee?
__________________
http://www.emjot.de

Geändert von Jocki (24-03-2005 um 18:36 Uhr)
Jocki ist offline   Mit Zitat antworten
Alt 24-03-2005, 18:51   #11 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Was steht denn in className und wie kommen die Klassen in jocki.packageName?

mfg.r
bokel ist offline   Mit Zitat antworten
Alt 24-03-2005, 19:12   #12 (permalink)
Flash Junge
 
Benutzerbild von Jocki
 
Registriert seit: Jun 2003
Ort: Hamburg - Altona
Beiträge: 87
classNamme könnte zB "ThumbNavi" heissen

entsprechend gäbe es eine Klasse "jocki.packageName.ThumbNavi"

Die ich dort fürsorglich wie ich bin angelegt habe.

In meiner Anwendung werden die Inhate der einzelnen Unterseiten aus dem XML ausgelesen. Je nach Typ des Inhaltselement einer Seite werden dann andere Klassen instantiiert.
__________________
http://www.emjot.de
Jocki ist offline   Mit Zitat antworten
Alt 24-03-2005, 20:30   #13 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Versuch mal _global.jocki.packageName[className]

mfg r.
bokel 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 05:32 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele