Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 16-03-2005, 13:45   #1 (permalink)
Neuer User
 
Registriert seit: Feb 2002
Beiträge: 14
For-Schleife schreibt nicht in richtig ins Array

Hallo Gemeinde,

kann mir vielleicht jemand einen Tipp geben, wo hier mein Fehler liegt?

Ich möchte per Schleife abfragen, ob der Eintrag im Array schon vorhanden ist und wenn ja, nur zwei dazugehörende Elemente ändern.

Der gesuchte Begriff wird auch gefunden, aber meine Änderungen werden immer in den letzten Eintrag des Arrays geschrieben.

Da hab ich sicher noch einen Denkfehler. Aber wo?

ActionScript:
  1. for (p=1; p<=_root.posit.length; p++)
  2.         {
  3.             if (_root.posit[p-1].bez == _root.Bauk1[_root.Bezeich]._name)
  4.             {
  5.                 _root.posit[p-1].apos = _root.Bauk1[_root.Bezeich]._x;
  6.                 _root.posit[p-1].epos = _root.Bauk1[_root.Bezeich]._x + 17.4;
  7.             }
  8.         }
__________________
Reehna
Reehna ist offline   Mit Zitat antworten
Alt 16-03-2005, 14:18   #2 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
in diesem code-schnippsel ist kein fehler zu sehen.

benütz doch bitte mal den debugger von flash. da kannst du dein programm schrittweisse abarbeiten und in jede variable reingucken!
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 16-03-2005, 14:36   #3 (permalink)
Neuer User
 
Registriert seit: Feb 2002
Beiträge: 14
Danke für dein Interesse.

Ich hab den Code schon durch den Debugger gejagt, komme aber mit dem schrittweise Abarbeiten nicht so zurecht.

Per trace hab ich mir den Wert von p-1 anzeigen lassen.
Auch der gesuchte Begriff wird richtig gefunden.

Das Schreiben ins Array funktioniert auch - nur ins falsche Element.

Vielelicht trägt ja der Aufbau des Arrays zur Klärung bei:

0 -
bez = name
apos = Zahl
epos = Zahl
1 -
bez = name
apos = Zahl
epos = Zahl
.
.
.
usw.

Ist teilweise assoziativ. Kann das vielleicht die Ursache sein?

Wie gesagt: es wird auch was ins Array geschrieben. So ganz falsch kann es also nicht sein.

Leider kann ich auch nicht die ganze Fla hochstellen, da das Teil mittlerweile ziemlich umfangreich ist.
__________________
Reehna
Reehna ist offline   Mit Zitat antworten
Alt 16-03-2005, 14:39   #4 (permalink)
poke
 
Registriert seit: Dec 2002
Ort: Iserlohn [NRW]
Beiträge: 2.304
abgesehen davon, dass da kein fehler ist!?

warum machst du das nicht anstat:

ActionScript:
  1. for (p=1; p<=_root.posit.length; p++)
  2. {
  3.     if (_root.posit[p-1].bez == _root.Bauk1[_root.Bezeich]._name)
  4.     // ...
  5. }

einfach so:

ActionScript:
  1. for (p=0; p < _root.posit.length; p++)
  2. {
  3.     if (_root.posit[p].bez == _root.Bauk1[_root.Bezeich]._name)
  4.     // ...
  5. }

dann sparst du dir das p-1..
pokepika ist offline   Mit Zitat antworten
Alt 16-03-2005, 14:43   #5 (permalink)
Neuer User
 
Benutzerbild von Utopian
 
Registriert seit: May 2003
Beiträge: 1.031
Zeig mal wie du das Array definiert hast!

meinArr = Array;

geht z.B. nicht, verursacht auch keinen Fehler.

meinArr = Array();

wäre korrekt.

Gruß Christian
Utopian ist offline   Mit Zitat antworten
Alt 16-03-2005, 14:53   #6 (permalink)
Neuer User
 
Registriert seit: Feb 2002
Beiträge: 14
Ich hab noch eine weitere Information:

Wenn p-1 = 0 ist, wird der veränderte Wert in
0 und in 2 geschrieben.

Wenn p-1 = 1 ist, wird der veränderte Wert in
1 und in 2 geschrieben.

Also immer das geforderte Element und der letzte Eintrag des Arrays.
__________________
Reehna
Reehna ist offline   Mit Zitat antworten
Alt 16-03-2005, 14:57   #7 (permalink)
Neuer User
 
Registriert seit: Feb 2002
Beiträge: 14
p=0 hab ich auch schon ausprobiert. Und dann natürlich nur p gesetzt, also ohne -1. Dummerweise bekomme ich genau das gleiche Ergebnis.


Das Array ist auf der root definiert:

ActionScript:
  1. _root.posit = new Array();
__________________
Reehna
Reehna ist offline   Mit Zitat antworten
Alt 16-03-2005, 15:02   #8 (permalink)
Neuer User
 
Registriert seit: Feb 2002
Beiträge: 14
Ich seh schon, ihr braucht mehr Input:

Das ist der ganze Code von diesem Button. Natürlich nicht der ganze Code vom Film. das wäre wirklich zu umfangreich.

Aber das Array _root.posit wird nur in diesem Teil angesprochen.
Definiert sind alle Variablen, die ein _root vorstehen haben, auch auf der root.

ActionScript:
  1. on(rollOver)
  2. {
  3.     this.createTextField(tooltip, 1, _xmouse, _ymouse, 50, 40);   
  4.     this[tooltip].border = true;
  5.     this[tooltip].background = true;
  6.     this[tooltip].html = true;
  7.     this[tooltip].backgroundColor = 0xFFFFCC;
  8.     this[tooltip].selectable = false;
  9.     this[tooltip].autoSize = true;
  10.     this[tooltip].multiline = true;
  11.     this[tooltip].wordWrap = false;
  12.     this[tooltip].htmlText = _root.S190Bezeichnung;
  13.    
  14.     fontEigenschaften = new TextFormat();
  15.     fontEigenschaften.bold = false;
  16.     fontEigenschaften.size = 12;
  17.     fontEigenschaften.font = "Arial";
  18.     fontEigenschaften.align = "center";
  19.     this[tooltip].setTextFormat(fontEigenschaften);
  20. }
  21. on(rollOut)
  22. {
  23.     this[tooltip].removeTextField();
  24. }
  25.  
  26. on (press)
  27. {
  28.     var Teil={};
  29.     Teil.onRollOver=function()
  30.     {
  31.          _root.Bezeich = this._name;
  32.     }
  33.     Teil.onPress=function()
  34.     {
  35.         startDrag(this,false,36,84,507,84);
  36.     }
  37.     Teil.onRelease=function()
  38.     {
  39.         stopDrag();
  40.         for (p=1; p<=_root.posit.length; p++)
  41.         {
  42.             if (_root.posit[p-1].bez == _root.Bauk1[_root.Bezeich]._name)
  43.             {
  44.                 trace(p-1 + _root.posit[p-1].bez + _root.Bauk1[_root.Bezeich]._name);            
  45.                 _root.posit[p-1].apos = _root.Bauk1[_root.Bezeich]._x;
  46.                 _root.posit[p-1].epos = _root.Bauk1[_root.Bezeich]._x + 17.4;
  47.                 trace(_root.posit[p-1].apos);            
  48.             }
  49.         }
  50.        
  51.         _root.posit[_root.nr - 1] = {bez:_root.Bauk1[_root.Bezeich]._name, apos:_root.Bauk1[_root.Bezeich]._x, epos:_root.Bauk1[_root.Bezeich]._x + 17.4};
  52.         _root.poslista = _root.posit.sortOn("apos", 16 | 8);
  53.         _root.posliste = _root.posit.sortOn("apos", 18 | 8);
  54.         _root.anfpos = _root.posit[_root.poslista[0]].apos;
  55.         _root.endpos = _root.posit[_root.posliste[0]].epos;
  56.         _root.breit = Math.round((_root.endpos - _root.anfpos) / 1.43);
  57.        
  58.     }
  59.     var menu_cm = new ContextMenu();
  60.     menu_cm.hideBuiltInItems();
  61.     menu_cm.customItems.push(new ContextMenuItem("Loeschen", loeschen));
  62.     function loeschen(menu, obj)
  63.     {
  64.         _root.Bauk1[_root.Bezeich].removeMovieClip();
  65.         _root.preis = Number(_root.preis) - Number(_root.S190preis);
  66.         _root.S190Z = _root.S190Z - 1;
  67.         _root.posit.splice(_root.Bauk1[_root.Bezeich]);  
  68.     }
  69.     i = i + 1;
  70.     _root.S190Z = _root.S190Z + 1;
  71.     _root.preis = Number(_root.preis) + Number(_root.S190preis);
  72.     if (_root.preis < _root.RabattStufe1)
  73.     {
  74.         _root.rabBetr = _root.RabattStufe1 - _root.preis;
  75.         _root.rabProz = _root.RabattProz1;
  76.     }
  77.     if (_root.preis > _root.RabattStufe1)
  78.     {
  79.         _root.ProzBetr = (_root.preis * _root.RabattProz1)/100;
  80.         _root.Nettopreis = _root.preis - _root.ProzBetr;
  81.         _root.rabBetr = _root.RabattStufe2 - _root.preis;
  82.         _root.rabProz = _root.RabattProz2;
  83.     }
  84.     if (_root.preis > _root.RabattStufe2)
  85.     {
  86.         _root.ProzBetr = (_root.preis * _root.RabattProz2)/100;
  87.         _root.Nettopreis = _root.preis - _root.ProzBetr;       
  88.         _root.rabBetr = 0;
  89.         _root.rabProz = _root.RabattProz2;
  90.     }   
  91.     _root.Bauk1.attachMovie("St_190","St190"+i,i,Teil);
  92.     (_root.Bauk1["St190"+i]).menu = menu_cm;
  93.     _root.nr = _root.nr +1
  94.     startDrag(_root.Bauk1["St190"+i],true,537,84,537,84);
  95. }
  96. on (release, releaseOutside)
  97. {
  98.     stopDrag();
  99. }
__________________
Reehna

Geändert von Reehna (16-03-2005 um 15:46 Uhr)
Reehna ist offline   Mit Zitat antworten
Alt 16-03-2005, 16:36   #9 (permalink)
Neuer User
 
Registriert seit: Feb 2002
Beiträge: 14
Hat noch irgendjemand einen Tipp für mich?
Das Problem ist nach wie vor aktuell.

*verschämtnachobenschubs*
__________________
Reehna
Reehna ist offline   Mit Zitat antworten
Alt 16-03-2005, 17:00   #10 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
ja, ich hab noch einen tipp:
mach bitte ein funktionierendes beispiel und lad das hoch. danke.

müssen WIR erst eine fla aus deinem programm bauen, damit wir DEINE fragen beantworten können?

------------------
var Teil={};
Teil.onRollOver=function()
{ ...

teil ist "garnichts." also kann das auch kein onRoll.. haben
und wo steht, wie du "posit" zu einem array machst?
und die da _root.posit[p-1] müssen ja auch irgendwann einmal zu einem array gemacht worden sein?

----------------
"..komme aber mit dem schrittweise Abarbeiten nicht so zurecht.."
- an der zu prüfenden stelle vor den code klicken (z.b. den skript in deinem button) - es entsteht ein roter punkt
- menüpunkt debuggen aufrufen
- einmal auf den weiter button klicken
- jetzt auf deinen button im swf klicken
- der code erscheint und hält am roten punkt.
- mit den pfeilen kannst du schrittweise weiter klicken.
- links im debugger das gewünschte objekt anklicken, variable anklicken ..
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (16-03-2005 um 17:09 Uhr)
hgseib 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 04:14 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele