Zurück   Flashforum > Flash > Flash Fortgeschritten > Flash 8

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 31-05-2011, 11:12   #1 (permalink)
Neuer User
 
Registriert seit: Jan 2002
Ort: LüdenscheiD
Beiträge: 148
array Inhalt mit setInterval abarbeiten

Hi,
ich hänge grade beim Ablauf von setInterval fest, setInterval soll immer nach dem Ablaufen der Zeit neu ausgeführt werden solange sich Elemente in einem Array befinden.
Hab mir jetzt schon alles mögliche tracen lassen aber irgendwo hängt es noch, der fehler macht sich erst bemerkbar wenn ich um die 10 elemente in dem array habe (movieclips ruckeln).


Hier mal der Schnipsel der das Chaos verursacht.
PHP-Code:
btn.onPress = function() {
            
this.anz++;
            
nextArray.push(this.typ);
            
timeArray.push(this.dauer);
            
startTimer();
        };
    }
}
//------------------------------------------------- buildTimer ------------------------------------------------//
var ax:Number 0;
var 
iid:Number;
function 
buildTimer() {
    
ax--;
    
trace(ax);
    if (
ax == 0) {
        
trace(interArray);
        
clearInterval(interArray[0]);
        
createUnitr(nextArray[0]);
        
nextArray.shift();
        
timeArray.shift();
        
interArray.shift();
        
trace(interArray[0]);
        if (
timeArray[0] == undefined) {
            
trace("abbruch");
        } else {
            
startTimer();
        }
    }
}
function 
startTimer() {
    if (
timeArray.length>&& ax != 0) {
        
trace("wait");
    } else {
        
trace(timeArray);
        
ax timeArray[0];
        
iid setInterval(buildTimer"startu"timeArray[0]);
        
interArray.push(iid);
    }

Ich denke daß clearInterval nicht richtig aufgerufen wird oder daß >
PHP-Code:
interArray.push(iid); 
nicht funktioniert.

Hier mal der gesamte Quellcode, copy/paste > anschauen > verstehen > kopfschütteln
@60 fps
PHP-Code:
Stage.scaleMode "noScale";
Stage.align "TL";
Stage.showMenu false;
_quality "BEST";
this.createEmptyMovieClip("main"0);
this.createEmptyMovieClip("menue"1);
this.createEmptyMovieClip("list"2);
this.createEmptyMovieClip("game"3);
game.createEmptyMovieClip("map"0);
game.createEmptyMovieClip("nodes"1);
game.createEmptyMovieClip("army"2);
var 
mouse:Object = new Object();
Mouse.addListener(mouse);
//------------------------------------------------- Textformatierung ------------------------------------------------//
var format:TextFormat = new TextFormat();
with (format) {
    
font "Verdana";
    
color 0x202020;
    
size 12;
    
leftMargin 5;
    
rightMargin 5;
}
//------------------------------------------------- Movieclipfunktion ------------------------------------------------//
function createClip(clip:MovieCliptitel:Stringx:Numbery:Numberw:Numberh:Numberd:Numberc:Number) {
    
clip.createEmptyMovieClip(titeld);
    
with (clip[titel]) {
        
beginFill(c);
        
lineTo(0h);
        
lineTo(wh);
        
lineTo(w0);
        
endFill();
        
_x x;
        
_y y;
    }
}
//------------------------------------------------- Textfieldfunktion ------------------------------------------------//
function createText(clip:MovieCliptitel:Stringx:Numbery:Numberw:Numberh:Numberd:Numbert:Stringtxt) {
    
clip.createTextField(titeldxywh);
    if (
== "dynamic") {
        
clip[titel].selectable false;
    } else {
        
clip[titel].selectable true;
        
clip[titel].onKillFocus = function() {
            if (
clip[titel].text == "") {
                
clip[titel].text txt;
            }
        };
        
clip[titel].onSetFocus = function() {
            if (
clip[titel].text == txt) {
                
clip[titel].text "";
            }
        };
    }
    
with (clip[titel]) {
        
type t;
        
multiline true;
        
wordWrap true;
        
condenseWhite true;
        
html true;
        
maxChars 30;
        
border false;
        
background false;
        
backgroundColor 0xE5E5E5;
        
setNewTextFormat(format);
        
text txt;
    }
}
//------------------------------------------------- Arrays ------------------------------------------------//
var houseArray:Array = ["Base""Baracks""Garage""Airport"];
var 
namesArray:Array = ["Soldier""Hummer""Tank""Plane"];
var 
unitsArray:Array = ["soldier""hummer""tank""plane"];
var 
troopArray:Array = [["soldier".420000], ["hummer".830000], ["tank".640000], ["plane"150000]];
var 
nextArray:Array = [];
var 
timeArray:Array = [];
var 
interArray:Array = [];
var 
colorArray:Array = ["0x00CCFF""0x0099FF""0x0066FF""0x0033FF"];
//------------------------------------------------- createMenue ------------------------------------------------//
function createMenue() {
    for (var 
i:Number 0i<namesArray.lengthi++) {
        
createClip(menue"btn_"+i0i*2512020i0xCCCCCC);
        
createText(menue["btn_"+i], "total"0030200"dynamic"0);
        
createText(menue["btn_"+i], "txt"30060201"dynamic"namesArray[i]);
        
createText(menue["btn_"+i], "timer"90030202"dynamic"0);
        
unitsArray[i].dauer 0;
        
menue["btn_"+i].typ troopArray[i][0];
        
menue["btn_"+i].dauer troopArray[i][2];
        
menue["btn_"+i].anz troopArray[i][3];
        
menue["btn_"+i].onPress = function() {
            
this.anz++;
            
nextArray.push(this.typ);
            
timeArray.push(this.dauer);
            
startTimer();
        };
    }
}
//------------------------------------------------- buildUnits+Timer ------------------------------------------------//
var ax:Number 0;
var 
iid:Number;
function 
buildTimer() {
    
ax--;
    
trace(ax);
    if (
ax == 0) {
        
trace(interArray);
        
clearInterval(interArray[0]);
        
createUnit(nextArray[0]);
        
nextArray.shift();
        
timeArray.shift();
        
interArray.shift();
        
trace(interArray[0]);
        if (
timeArray[0] == undefined) {
            
trace("abbruch");
        } else {
            
startTimer();
        }
    }
}
function 
startTimer() {
    if (
timeArray.length>&& ax != 0) {
        
trace("wait");
    } else {
        
trace(timeArray);
        
ax timeArray[0];
        
iid setInterval(buildTimer"startu"timeArray[0]);
        
interArray.push(iid);
    }
}
//------------------------------------------------- createNodes+Unit ------------------------------------------------//
function faerben(objekt:Objectfarbwert:Number) {
    var 
neueFarbe:Color = new Color(objekt);
    
neueFarbe.setRGB(farbwert);
}
var 
startNodes:Array = [[60120], [180120], [250120], [320120]];
var 
active:Boolean;
var 
anz:Number 0;
function 
createUnit(unitType:String) {
    
anz++;
    
game.army.createEmptyMovieClip("unit_"+anzanz);
    
game.nodes.createEmptyMovieClip("node_"+anzanz);
    
createClip(game.nodes["node_"+anz], "gfx", -5, -5101000xCCCCCC);
    
createClip(game.army["unit_"+anz], "gfx", -10, -10202010x000000);
    
game.army["unit_"+anz].typ unitType;
    
game.army["unit_"+anz].node game.nodes["node_"+anz];
    if (
game.army["unit_"+anz].typ == troopArray[0][0]) {
        
faerben(game.army["unit_"+anz], colorArray[0]);
        
game.army["unit_"+anz].speed troopArray[0][1];
        
game.army["unit_"+anz]._x startNodes[0][0];
        
game.army["unit_"+anz]._y startNodes[0][1];
    }
    if (
game.army["unit_"+anz].typ == troopArray[1][0]) {
        
faerben(game.army["unit_"+anz], colorArray[1]);
        
game.army["unit_"+anz].speed troopArray[1][1];
        
game.army["unit_"+anz]._x startNodes[1][0];
        
game.army["unit_"+anz]._y startNodes[1][1];
    }
    if (
game.army["unit_"+anz].typ == troopArray[2][0]) {
        
faerben(game.army["unit_"+anz], colorArray[2]);
        
game.army["unit_"+anz].speed troopArray[2][1];
        
game.army["unit_"+anz]._x startNodes[2][0];
        
game.army["unit_"+anz]._y startNodes[2][1];
    }
    if (
game.army["unit_"+anz].typ == troopArray[3][0]) {
        
faerben(game.army["unit_"+anz], colorArray[3]);
        
game.army["unit_"+anz].speed troopArray[3][1];
        
game.army["unit_"+anz]._x startNodes[3][0];
        
game.army["unit_"+anz]._y startNodes[3][1];
    }
    
activateUnit(game.army["unit_"+anz]);
}
//------------------------------------------------- MoveToPosition ------------------------------------------------//
function activateUnit(unit:MovieClip) {
    
unit.onPress = function() {
        
active true;
        if (
active) {
            
this.node._x game._xmouse;
            
this.node._y game._ymouse;
            
startDrag(this.node);
            
checkDistance();
        }
    };
    
unit.node.onPress = function() {
        if (
active) {
            
unit.mTo(unit.nodeunit.speed);
            
stopDrag();
            
active false;
        }
    };
}
//------------------------------------------------- move Funktion ------------------------------------------------//
MovieClip.prototype.mTo = function(a:MovieClipspeed:Number) {
    
this._rotation Math.atan2(_xmouse-this._xthis._y-_ymouse)*180/Math.PI;
    var 
xmove:Number speed*Math.sin((this._rotation)*Math.PI/180);
    var 
ymove:Number speed*Math.cos((this._rotation)*Math.PI/180);
    
this.onEnterFrame = function() {
        
this._x += xmove;
        
this._y -= ymove;
        if (
this.hitTest(a)) {
            
delete this.onEnterFrame;
        }
    };
};
//------------------------------------------------- start ------------------------------------------------//
createMenue(); 
Bitte den restlichen code nicht kommentieren.

Schonmal Danke im Voraus für eure Hilfe.

Geändert von Gadon (31-05-2011 um 11:15 Uhr)
Gadon ist offline   Mit Zitat antworten
Alt 31-05-2011, 21:22   #2 (permalink)
+ Zimt & Zucker
 
Registriert seit: Mar 2006
Ort: hinterm Mond gleich links
Beiträge: 2.041
Zitat:
Zitat von Gadon Beitrag anzeigen
Bitte den restlichen code nicht kommentieren.
Das hast du dir wohl auch bei dem Code gedacht, hmmm?
Die Namen deiner Arrays enthalten schön ausgeschrieben "Array", aber die nähere Bezeichnung ist unkenntlich verkürzt. Kommentare, die beschreiben was du eigentlich machen willst, fehlen völlig.

Du machst es jedem der dir helfen will und dir selbst extrem schwer.

Es erscheint mir nicht sinnvoll ein Array für interval IDs anzulegen, da, wie es scheint, immer nur ein interval läuft.

...restlichen Code kommentieren? Eher löschen und nochmal neu schreiben.
Am besten in As3, zu dem du ja auch schon eine Frage gestellt hast.

Es existiert praktisch kein Argument dafür As2 zu nutzen.

Selbst in der Hilfe wird davon abgeraten "prototype" zu verwenden, ich empfehle diese Hilfe mal zu lesen. Wobei ich bei dem prototype Codeabschnitt eher denke, das du ihn irgendwo her kopiert hast.
__________________
anbei Grüße vom milchreis: Viva la [Silb]

[Von null auf Flash in einem Klick.] <<< klick
milchreis 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


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Flash CS3] Array meets setInterval ThundaHead Flash Einsteiger 1 14-11-2008 19:45
assoziative array mit schleife abarbeiten Senhor ActionScript 1 1 24-02-2006 14:22
Array Ausgabe mit setInterval neonst4r Flash MX 2004 5 11-07-2005 21:41
Array test2 soll den Inhalt von Array test1 bekommen! Artblue ActionScript 1 11 28-02-2003 13:22
Nur Array-Inhalt löschen, nicht ganze Array! Scolex ActionScript 1 5 09-02-2003 17:25


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:23 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele