{lang: 'de'}
Flashhilfe.de - Flash Community

Variable wird "resetet" [Flash 10]

 


AntwortenRegistrieren Seite1  

RaZzGPE#1
Benutzerbild von RaZzGPE
Beiträge: 3
Registriert: Jun 2009

19.02.2010, 14:08

Hallo Leute!

ich habe nun viel rumprobiert, aber auch gegoogelt und hier gesucht.
ich benutze cs4 und actionscript 2.
mein problem ist, dass nach framewechsel meine variablen resetet werden.
also:
ich habe in frame 2 und frame 3 eine galerie mit produkten zum anklicken, wie z.b. "tap1". in frame 4 habe ich den warenkorb.
wenn ich nun ein produkt aus frame 2 und ANSCHLIESSEND aus frame 3 anklicke, funktioniert die rechnung und variablenausgabe auf frame 4 super!
aber wenn ich von frame 3 wieder zurück in frame 2 springe, werden die variablen alle gelöscht (bzw. auf 0 gesetzt).
das heißt, die daten werden nur gespeichert, wenn ich sozusagen vorwärts navigiere. wenn ich in der galerie zurück springe, werden die variablen gelöscht.

in der rechnung werden gezählt preis und anzahl.

hier der code von einem produkt zum anklicken:
(erst, wenn man tap1 anklickt, startet die zusammenrechnung von preis und anzahl des produktes)

ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var preis1:Number=0
var anzahl1:Number=0

preis_lab1._visible = false;
anzahl_lab1._visible = false

tap1.onPress = function() {
   preis_lab1._visible = true;
   anzahl_lab1._visible = true;
   preis1 = preis1+10;
   anzeigetxt1.text = "EUR "+preis1;
   anzahl1 = anzahl1+1
   if (anzahl1 == 1) {
         anzahltxt1.text = anzahl1+" rolle";
      } if (anzahl1 > 1) {
         anzahltxt1.text = anzahl1+" rollen";
      }
};




ich hatte z.b. sowas probiert, mit der hoffung, dass outPreis1 nicht überschrieben wird.
aber so funktionierte die rechnung auch gar nicht mehr:


ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function sqr(preis:Number):Number {
    preis = preis+10;
    return preis;
}
var preis1:Number = 0;
var outPreis1:Number = sqr(preis1);

tap1.onPress = function() {
   preis_lab1._visible = true;
   //anzahl_lab1._visible = true;
   anzeigetxt1.text = "EUR "+[B]outPreis1;[/B]
   //anzahl1 = anzahl1+1
   //if (anzahl1 == 1) {
         //anzahltxt1.text = anzahl1+" rolle";
      //} if (anzahl1 > 1) {
         //anzahltxt1.text = anzahl1+" rollen";
      //}
};


ich wurde in einem anderem forum darauf aufmerksam gemacht, dass frame 2 folgenden code beinhaltet:
var preis1:Number=0
var anzahl1:Number=0

also ist das ja LOGISCH, warum das auf null springt.

kann man das zusammengerechnete ergebnis nicht einer anderen variable zuweisen?

schöne grüße

RaZz!
Geändert von RaZzGPE am 19.02.10 um 14:08 Uhr
ChaDe#2
Benutzerbild von ChaDe
Beiträge: 187
Wohnort: Berlin
Registriert: Aug 2003

20.02.2010, 16:45

ich bin mir nicht sicher, ob ich weiß, wie das szenario vollständig aussieht.
Aber anscheinend ist ja alles gelöst, wenn du nur anzahl1 und preis1 nur ein einziges mal initialisierst (auf 0 setzt), right?

Möglichkeit 1:

schreibe die Initialisierung (var preis1:Number=0; var anzahl1:Number=0) in Frame 1

Möglichkeit 2:

initialisiere in Frame 2 nur, wenn die Werte unbekannt sind:
if(preis1 == undefined) preis1 = 0;
if(anzahl1 == undefined) anzahl1 = 0;

Möglichkeit 3:

natürlich kannst du die Werte auch komplett woanders unterbringen.
Du könntest z.B. ein Objekt Warenkorb anlegen, welches alle Artikel mit Anzahl und Preis beinhaltet.
Es könnte diese beispielsweise in einem Array von Objekten speichern wobei jedes item des Arrays z.B. die Eigenschaften :
- ArtikelNameEinzel:String,
- ArtikelNameMehrzahl:String,
- Anzahl:Number,
- Preis:Number
besitzt.
Das Warenkorb-Objekt könnte dann zusätzlich eine Methode enthalten, welche den Preis Pro Artikel berechnet, eine weitere, die den gesamtpreis (aller Artikel) errechnet und wieder eine, die den Azeigetext pro Artikel erzeugt.
Bei einem klick auf einen Artikel würde dann nicht wie es derzeit ist, sofort dessen Preis, anzahl und anzeigetext erzeugt, sondern lediglich entweder ein neues Element in das Array des Warenkorbs gepackt (sofern der Artikel im Array noch nicht enthalten ist) oder aber Anzahl eines bereits vorhandenen Array-Elements aktualisiert. Dies sollte möglichst auch über eine Methode des Warenkorb-Objektes geschehen, welche sich darum kümmert, herauszufinden, ob der Artikel bereits im Warenkorb ist, oder nicht und eben den Artikel hinzufügt oder nur die Anzahl erhöht...
Im Warenkorb bildschirm würde dann das Warenkorb-Objekt das Artikel-Array durchlaufen, für jeden Artikel die Methode zum erzeugen des Anzeigetextes aufrufen, welche zwecks berechnung des anzuzeigenden Preises die MEthode zum berechnen des Artikelpreises aufruft und am schluss die Methode zum errechnen des Gesamtpreises aller Artikel aufrufen...

Aber da dein Programm ja wohl ansich funktioniert, würde ich es jetzt eher nicht komplett ummodeln.
Geändert von ChaDe am 20.02.10 um 16:51 Uhr
RaZzGPE#3
Benutzerbild von RaZzGPE
Beiträge: 3
Registriert: Jun 2009

Themenautor/in

20.02.2010, 18:49

SUPER! danke für deine mühe!
ich werde gleich alles durchgehen und werde berichten, was daraus geworden ist! vielen lieben dank!

ich meld mich!
RaZzGPE#4
Benutzerbild von RaZzGPE
Beiträge: 3
Registriert: Jun 2009

Themenautor/in

27.02.2010, 00:58

so hab ich das dank dir lösen können:

ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
if(preis1 == undefined) preis1 = 0;
if(anzahl1 == undefined) anzahl1 = 0;
if(preis1 == 0)  zurücksetzen1._visible = false;

//LABELS______________________________________//
preis_lab1._visible = true;
anzahl_lab1._visible = true;
if (preis1 < 10) {
         anzeigetxt1.text = "EUR 0,-";
      } if (preis1 == 10) {
               anzeigetxt1.text = "EUR "+preis1+",-"
            } if (preis1 > 10) {
               anzeigetxt1.text = "EUR "+preis1+",-"
            }
if (anzahl1 < 1) {
         anzahltxt1.text = "0 rollen";      
      } if (anzahl1 == 1) {
               anzahltxt1.text = anzahl1+" rolle";
            } if (anzahl1 > 1) {
               anzahltxt1.text = anzahl1+" rollen";
               }
   
//BUTTON______________________________________//
tap1.onPress = function() {   
   preis1 = preis1+10
   anzeigetxt1.text = "EUR "+preis1+",-"
   anzahl1 = anzahl1+1
   if (anzahl1 == 1) {
         anzahltxt1.text = anzahl1+" rolle";
      } if (anzahl1 > 1) {
         anzahltxt1.text = anzahl1+" rollen";
      }
   zurücksetzen1._visible = true;   
};

//ZURÜCKSETZEN BUTTON_________________________//
zurücksetzen1.onPress = function() {      
   preis1 = 0;
   anzahl1 = 0;
   anzeigetxt1.text = "EUR "+preis1+",-";
   anzahltxt1.text = "0 rollen";
   zurücksetzen1._visible = false;
}



ist etwas kompliziert, denke ich, wie ich das geschrieben hab. aber es ist mein erstes programm und abgesehen von deinem tipp hab ich alles selber durch probieren gelöst.

danke nochmal für die hilfe!!

schöne grüße

RaZz!
Geändert von RaZzGPE am 27.02.10 um 00:58 Uhr

AntwortenRegistrieren Seite1  

Schnellantwort

Du musst registriert sein, um diese Funktion nutzen zu können.

 
Ähnliche Beiträge zum Thema
Partner Webseiten: art-and-law.de  Mediengestalter.info   phpwelt.de   Scubacube.de  
Haftungsausschluss   Datenschutzerklärung   Impressum
© 1999-2024 Sebastian Wichmann - Flashhilfe.de