[Flash] Wer findet DEN Fehler - kleine Wette ;)

SpecialsGuy

Losetrommel-Magier
ID: 236275
L
7 Mai 2006
433
45
Ich hab jetzt über eine Stunde an einem Problem gesessen ... ich will mal sehen, wer von euch so gut ist, diesen Fehler zu finden ;)

Das witzige ist, der Code funktioniert einwandfrei, solange man auf die Grafiken (BetChips) klickt und vorher die Maus bewegt. Klickt man zwei mal hintereinander, ohne vor dem 2. Klick die Maus bewegt zu haben, ist der Kontostand NaN ... kommt ihr dahinter, wieso?

Ich habe mal nur das relevante aus dem Code reinkopiert ... mit dem ganzen Code war die Fehlersuche noch komplizierter. Ich wette mit euch um 500K Lose, daß ihr den Fehler nicht finden werdet :D
Die Wette gilt natürlich nur für den ersten der erfolgreich ist.

Code:
var vKontostand = 5000;
var BetChipNames:Array = Array("x1", "x2", "x3", "x4", "x5");
var BetChips:Array = new Array(BetChipNames.length);
for (i = 0; i < BetChipAmounts.length; i++) {
	BetChips[i] = _root.attachMovie("BetChip", "Bet" + BetChipNames[i] + "_mc", 91+i);
	BetChips[i].betamount = i*100;
	BetChips[i].onRelease = function() {
		animNewChip(BetChips[i], 100, 100);
		modifyKontostand(BetChips[i].betamount);
	}
}

_root.attachMovie("tooltip", "tooltip_mc", 32000);
var mouseListener:Object = new Object;
mouseListener.onMouseMove = function () {
	for (i = 0; i < BetChips.length; i++) {
		if ((BetChips[i]._visible) && BetChips[i].hitTest(_xmouse, _ymouse)) {
			vToolTip = "Kontostand:" + vKontostand;
			break;
		}
	}
	tooltip_mc._x = _xmouse;
	tooltip_mc._y = _ymouse - 40;
	updateAfterEvent();
};
Mouse.addListener(mouseListener);

function modifyKontostand(num) {
	vKontostand = vKontostand + num;
	for (i = 0; i < BetChips.length; i++) {
		BetChips[i]._visible = Boolean(vKontostand >= BetChips[i].betamount);
	}
	vToolTip = "Kontostand:" + vKontostand;
	updateAfterEvent();
}
 
Das witzige ist, der Code funktioniert einwandfrei, solange man auf die Grafiken (BetChips) klickt und vorher die Maus bewegt. Klickt man zwei mal hintereinander, ohne vor dem 2. Klick die Maus bewegt zu haben, ist der Kontostand NaN ... kommt ihr dahinter, wieso?

mousemove wird nur dann ausgeführt, wenn du die maus auch tatsächlich bewegst. das ist ein teil des problems ...

der zweite ist, dass du onRelease modifyKontostand(BetChips.betamount) aufrufst. das i ist aber bei dir eine globale variable (du hast nicht for(var i...) verwendet) und ändert sich je nachdem, ob du irgendwo drüberfährst. nach einem gesamten durchlauf einer i-schleife (also z.b. bei onMouseMove), hat i dann den wert BetChips.length ... und damit gibt es BetChips.betamount nicht mehr und deine zeile vKontostand = vKontostand+num ergibt ein NaN ...


lose bitte an 141403... ;)

[edit]achso, wolltest du auch noch ne lösung?
PHP:
BetChips[i].onRelease = function() {
  animNewChip(this, 100, 100);
  modifyKontostand(this.betamount);
};
[/edit]
 
Zuletzt bearbeitet:
Jo, stimmt :)

Die Lösung hatte ich schon gefunden.

Da steht bei mir soviel anderer Code noch zwischen, die mit vKontostand arbeitet usw. da war es garnicht so einfach, erstmal diese Stelle zu lokalisieren. Aber gratuliere, du hast den ja schnell gefunden.

Hab Flash schon oft verflucht, weil man da ja so einfach zu "nicht-mächtig coolen" Code verleitet. Aber im Gegensatz zu anderen Sprachen bin ich relativ gesehen auch noch kein Flash-Profi *g*
Aber lasst das bitte niemanden lesen :D
 
Hab Flash schon oft verflucht, weil man da ja so einfach zu "nicht-mächtig coolen" Code verleitet. Aber im Gegensatz zu anderen Sprachen bin ich relativ gesehen auch noch kein Flash-Profi *g*
Aber lasst das bitte niemanden lesen :D

zu spät :LOL:

ich sage dazu nur:


ich habe Flash auch schon oft verdammt, und das am meisten tief in der Nacht, wenn man ins Bett will, aber noch vorher nen verdammten Fehler finden will :biggrin: