Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 24-08-2009, 01:38   #1 (permalink)
Neuer User
 
Registriert seit: Apr 2003
Beiträge: 230
"variierender" funktionsname.

Hallo an alle.
Ich schreibe an einer Aufbausimulation, und bin gerade an den gebäudebau funktionen. aber für alle gebäude gleichzeitig.

diese schaut so aus, der compiler gibt jedoch den fehler "Funktionsname erwartet" zurück, da der funktionsname nicht "fest" ist. Habe die Vorgänge noch ein bisschen kommentiert. ich denke, der inhalt der Arrays sollte vom Sinn her klar sein.
Meine frage ist, wie bekomme ich die Fehlermeldung weg ohne einen "festen" funktionsnamen zu wählen? das "alleGebäudeImSpielArray" hat eine Länge von über 30, was mir bei festen funktionsnamen über 30 gleichaussehende funktionen bescheren würde.
Ein funktionsaufruf, der an bestimmter stelle aufgerufen wird, heißt z.b.
BT_baue_marktplatz_funktion();
und wird aufgerufen wenn der MC "BT_baue_marktplatz" "onRelease'd" wird
PHP-Code:
for (i=0;i<alleGebaeudeImSpielArray.length;i++){
    
_root[alleGebaeudeImSpielArray[i]].ID i;
    function [
"BT_baue_"+alleGebaeudeImSpielArray[i]+"_funktion"]() { //funktionsname erwartet
        
for(j=0;j<baustoffeArray.length;j++){ // pruefen: sind genuegend rohstoffe vorhanden
            
if((_root["anz_"+baustoffeArray[j]]) >= (_root["rohstoffnoetig_"+baustoffeArray[j]+"_"+alleGebaeudeImSpielArray[this.ID]])){
                
_root.baustoffeVorhanden++;
            }
        }
        if(
_root.baustoffeVorhanden == _root.baustoffeArray.length) { //gebaeude kann bezahlt werden
            
for(j=0;j<baustoffeArray.length;j++){ //rohstoffe werden abgezogen
                
_root["anz_"+baustoffeArray[j]] = _root["anz_"+baustoffeArray[j]] - _root["rohstoffnoetig_"+baustoffeArray[j]+"_"+alleGebaeudeImSpielArray[this.ID]];
            }
            
//gebaeude wird gebaut
            
_root["gebaeudestufe_"+alleGebaeudeImSpielArray[this.ID]]++;
        }
    }

mir ist klar, dass ich der funktion einen festen namen geben könnte und ihr einen parameter übergeben könnte, ABER um das zu realisieren, bräuchte es pro gebäude 3 weitere code-zeilen, was bei über 30 gebäude (bisher) nicht sinn der sache ist. Es muss doch in der 'kurzform' gehen, die ich hier versuche zu realisieren.

Gruß
real2k

Geändert von Real2k (24-08-2009 um 01:44 Uhr)
Real2k ist offline   Mit Zitat antworten
Alt 24-08-2009, 13:19   #2 (permalink)
Nix Wisser
 
Benutzerbild von nullidee
 
Registriert seit: May 2003
Ort: Würzburg, Kleinstadt
Beiträge: 3.510
das was du vorhast macht wenig Sinn, besser wäre eine Function alla
PHP-Code:
function bauen(werwas){
    
//....tuwas

__________________
nullidee

Abakus GT 10² Kugeln - 80"Leinwand - CARAN D´ACHE SUPRACOLOR®
nullidee ist offline   Mit Zitat antworten
Alt 24-08-2009, 14:53   #3 (permalink)
Neuer User
 
Registriert seit: Apr 2003
Beiträge: 230
ja, das ist mir bewusst. problem ist, alle buttons im spiel (und das sind einige) werden per funktion animiert, und beim onRelease wird neben einer animation auch eine weitere funktion aufgerufen in der form von
PHP-Code:
_root[AnimierteGUIButtonsImSpielArray[this.ID]+"_funktion"](); 
dies mache ich, um den code besser lesbar (hier die animationen, dort die baumenüfunktionen, usw) und gleichzeitig wesentlich kürzer zu halten.
ich könnte dies natürlich auch so gestalten:
z.b.
PHP-Code:
function BT_baue_baecker_funktion () {
gebaeudebauen(baecker);
}
//[...]
function BT_baue_muehle_funktion () {
gebaeudebauen(muehle);
}
//[...] usw. 
für jedes gebäude bräuchte ich dann diese 3 zeilen, was dann eine ganza menge 'gleicher' zeilen ausmacht.
Den code aus meinem anfangspost müsste ich entsprechend umstellen, das wär alles kein thema. aber ich möchte diese ganzen zeilen ersparen.
was ich aufgrund der animation nicht machen kann, ohne die lesbarkeit beizubehalten, wäre eben, die animationsfunktion aufzusplitten in "baumenü buttons werden animiert", "menü buttons werden animiert", "usw usf".

wenn ich also in meinem eingangspost diese eine zeile, die einen fehler ausgibt, so als eine zeile die funktioniert beibehalten kann, dann würde ich zum jetzigen zeitpunkt über 100 zeilen code einsparen und für jedes weitere gebäud das noch kommt nochmal 3 zeilen...
es muss doch eine möglichkeit geben, oder?
Real2k ist offline   Mit Zitat antworten
Alt 24-08-2009, 16:32   #4 (permalink)
Nix Wisser
 
Benutzerbild von nullidee
 
Registriert seit: May 2003
Ort: Würzburg, Kleinstadt
Beiträge: 3.510
ich verstehs immer noch nicht, wo ist da das Problem zu schreiben
PHP-Code:
function baue (wen) {
    
gebaeudebauen(wen);

__________________
nullidee

Abakus GT 10² Kugeln - 80"Leinwand - CARAN D´ACHE SUPRACOLOR®
nullidee ist offline   Mit Zitat antworten
Alt 24-08-2009, 16:47   #5 (permalink)
Neuer User
 
Registriert seit: Apr 2003
Beiträge: 230
problem ist, die funktion MUSS diesen namen tragen:
function BT_baue_baecker_funktion () {
für den baecker
und für jedes andere gebäude eben auch mit dem namen des egbäudes drin udn genau dieser schreibweise.
aber ich habs nun gelöst mit 100 zeilen mehraufwand, das schaut nun so aus:
PHP-Code:
function BT_baue_holzfaeller_funktion () {
gebaeudebauen("holzfaeller");

function 
BT_baue_saegewerk_funktion () {
gebaeudebauen("saegewerk");

function 
BT_baue_wasserwerk_funktion () {
gebaeudebauen("wasserwerk");

function 
BT_baue_wiese_funktion () {
gebaeudebauen("wiese");

...
...
...
... 
Real2k ist offline   Mit Zitat antworten
Alt 24-08-2009, 17:23   #6 (permalink)
Nix Wisser
 
Benutzerbild von nullidee
 
Registriert seit: May 2003
Ort: Würzburg, Kleinstadt
Beiträge: 3.510
das sollte klappen
PHP-Code:
var alleGebaeudeImSpielArray = ["holzfaeller","saegewerk","baecker","wasserwerk","wiese"];
var 
wer;
for (
i=0;i<alleGebaeudeImSpielArray.length;i++){
    
_root[alleGebaeudeImSpielArray[i]].ID i;
    
wer "BT_baue_" alleGebaeudeImSpielArray[i] + "_funktion";
    
tf.text += wer "\n";//icke machs lieber über ein Textfeld
    
trace(wer);
    function 
wer() { //
        
for(j=0;j<baustoffeArray.length;j++){ // pruefen: sind genuegend rohstoffe vorhanden
            
if((_root["anz_"+baustoffeArray[j]]) >= (_root["rohstoffnoetig_"+baustoffeArray[j]+"_"+alleGebaeudeImSpielArray[this.ID]])){
                
_root.baustoffeVorhanden++;
            }
        }
        if(
_root.baustoffeVorhanden == _root.baustoffeArray.length) { //gebaeude kann bezahlt werden
            
for(j=0;j<baustoffeArray.length;j++){ //rohstoffe werden abgezogen
                
_root["anz_"+baustoffeArray[j]] = _root["anz_"+baustoffeArray[j]] - _root["rohstoffnoetig_"+baustoffeArray[j]+"_"+alleGebaeudeImSpielArray[this.ID]];
            }
            
//gebaeude wird gebaut
            
_root["gebaeudestufe_"+alleGebaeudeImSpielArray[this.ID]]++;
        }
    }

__________________
nullidee

Abakus GT 10² Kugeln - 80"Leinwand - CARAN D´ACHE SUPRACOLOR®
nullidee 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 11:00 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele