Bugs aufgrund der CPU leistung?

genesys

Gesperrt
Hiho!
Ich bastel gerade an nem kleinen Shoot'em Up. Dabei mach ich es so, dass jeder Gegner der erscheint, einen eindeutigen namen erhält (gegner1, gegner2 etc) Beim erscheinen auf den screen, schreibt der movieclip des gegners seinen namen in einen Array der sich im root befindet. Sobald ein gegner vom screen verschwindet oder abgeschossen wird, ruft er eine funktion auf, die den array nach dem eigenen namen durchsucht und diesen rauslöscht. Somit stehen im Array immer nur gerade diese gegner namen, die getroffen werden können.

Auf jedem meiner schüsse liegt nun ein enterFrame event, welches eine forschleife enthält, die array.length mal ausgeführt wird und jedesmal überprüft, ob sich der schuss in der nähe von array[ i ] befindet und dieses objekt gegebenenfalls zerstört.

Nun bekomm ich aber beim Testen bugs - und zwar passiert es manchmal (eigentlich immer), dass es am anfang ganz gut geht, aber auf einmal wird wenn ich einen gegner treffe nicht dieser gegner zerstört, sondern der jeweils vorhergehende (also derjenige, der zuvor auf dem bildschirm erschienen ist).

Wenn ich das allerdings von meinen Kollegen testen lasse haben sie diesen Bug nie (ich jedesmal). Sie haben aber auch wesentlich leistungsfähigere Rechner...

Könnte dieser Bug von der CPU leistung her kommen, weil in meinem Game sehr viele unabhängige Dummyclips vorhanden sind, die gleichzeitig arbeiten

Ich kann leider keinen source code posten, weil ich nicht weiss, in welchem dummyclip der fehler entsteht :/
 
Hi,

schade, ein source währe hier sehr hilfreich.

Kannst Du zumindest die SWFs mal online stellen (zu Testzwecken)?

Ansonsten: Ich weiß nicht, was Deine Dummyclips genau machen, aber ich tippe auf einen Fehler an der Stelle, wenn die Namen in das Array geschrieben werden... Kannst Du die entsprechende Stelle nicht mal anhängen?

Gruß

P.S.: Vielleicht wird der Speicher auch im Laufe der Zeit durch einen Bug immer mehr gefüllt (z.B. das Array wird immer erweitert, statt die Werte zu überschreiben).... Ist aber, wie gesagt jetzt schwer zu sagen.
 
Also gut . . . jedes objekt schreibt sich selbst in den Array das sieht so aus:
Code:
onClipEvent(load){
if(_parent.enemy==true){
	_parent.enemynr=_root.enemies.push("objekt"+_parent.nummer);
	
}}

Sobald der Movieclip vom bildschirm verschwindet oder zerstört wird, wird folgende funktion aufgerufen:
Code:
_global.durchsuchen= function (element0){
	for (i = 0; i<_root.enemies.length; i++) {
        if (_root.enemies[i] == element0) {
			a=i;
            _root.enemies.splice(a,1);}
	}
}

Damit wird der Array nach dem Namen durchsucht und dieser wird wieder rausgelöscht.

Sollte so doch eigentlich gehen


hmmm . . . ja wäre vielleicht ganz interessant, wenn ihr das mal testen könntet.
Wenn ihr es tut, könnt ihr euch achten, ob folgende Bugs auftreten:
1. Bildschirm bleibt manchmal rot
2. Gegner hören nicht auf zu explodieren
3. Ein anderer Gegner, als den, den man gerade beschiesst, nimmt Schaden

dass die Energie anzeige ins bodenlose geht is schon ok so . . .

Wenn ihr euer ergebnis hier hin schreibt, sagt mir bitte noch gleich, was für ne cpu ihr habt... ich hab irgendwie den verdacht, dass es damit im zusammenhang steht...

Unten wird übrigens gerade noch der Inhalt des Arrays angezeigt...

Das ganze soll starfox like werden . . .

Danke für die hilfe!

game: http://neo.cycovery.com/engine3.html
 
Cooles Ding ....

nur kann ich den Fehler mit meiner Maschine (1,2 Ghz, 1GB RAM, W2K) nicht reproduzieren - das einzige, was negativ auffällt ist, das das Zielen nicht immer einfach ist, und man trotz Objekt im Fadenkreuz darüber hinweg schiesst - 3D Objektkolision ist halt nicht einfach....

Flash ist sehr gefrässig, und nimmt sich zu Playerstart einfach alles, was da ist, das kannst du mit dem Systemmonitor verfolgen - mag sein, das sich bei kleinen Rechnern da irgendwas verschiebt, wenn der Speicher volläuft.

Teste auch mal deinen Player, und die Verion, für die du publizierst, das sollte passen, teste ausserdem einmal mit System.capabilities.isDebugger in einer Textfeldanzeige, ob dein Player im Browser als Debugger fungiert, das ist mit einigen neueren so, und führt zu seltsaaaamen Effekten - dann einfach updaten ...

Grüsse, und weiter so
B
 
Hi, bei mir (512 MB Ram) sehe ich auf Anhieb zwei Fehler:

1. ich kann garnichts treffen :(

2. die Energieanzeige geht tatsächlich ins "Bodenlose" (dies aber durchgehend, also nicht nur manchmal).

An dem Script kann ich bislang keinen Fehler erkennen. Es mag an den Gründen liegen, die auch Baslieus erwähnte.

Gruß
 
Wenn der fehler am Script liegt, kanns glaub ich nur an der Abfrage der schüsse liegen....
aber ich seh's einfach nicht . . .
jeder schuss führt folgende überprüfung durch:

Code:
for(i=0;i<_root.enemies.length;i++){
if(Math.abs(_parent.z-_root.objektebene[_root.enemies[i]].z)<60){
				if(Math.abs(_parent.x-_root.objektebene[_root.enemies[i]].x)<50 and Math.abs(_parent.y-_root.objektebene[_root.enemies[i]].y)<50  and _root.objektebene[_root.enemies[i]].scharf==true){
					
removeMovieClip(_parent);
					_root.objektebene[_root.enemies[i]].energie-=_root.weapon;
					_root.objektebene[_root.enemies[i]][_root.objektebene[_root.enemies[i]].typ].gotoAndPlay(101);
					
				}
			}
		}


Dabei ist die äussere If abfrage verschachtelt, damit er den ganzen rest nicht überprüft, wenn sowieso kein objekt sich auf der gleichen z achse befindet...

ach ja - lacht nicht über meine variabeln benennung - ich werd mit der zeit unkreativ *g*

jedenfalls ist dieses gotoAndPlay die kleine Animation mit dem elektro zeugs wenn man nen gegner trifft

und da sowohl die abfrage als auch das ereignis auf das objekt _root.objektebene[_root.enemies[ i ]] angewendet wird, verstehe ich nicht, wie es sein kann, dass ich zwar den einen Gegner abschiesse (und auch an der Stelle die Schüsse verschwinden) aber ein anderer aufzuckt.
des ja gar nicht möglich . . . ausser es ändert sich noch während die forschlaufe durchlaufen wird irgendetwas am Index des Arrays, aber das kann ja nicht sein, oder? ich nehm mal an die verschiedenen clips werden nacheinander durchgegangen oder tickt die CPU da irgendwie hinundher, falls im gleichen frame ein anderer Movieclip irgendetwas in den Array schreibt oder etwas rauslöscht?
 
Zuletzt bearbeitet:
Hi,

Wie gesagt, das sieht ordentlich aus - ich kann deinen Fehler nicht reproduzieren, sorry ...

Grüsse
B
 

Neue Beiträge

Zurück