Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 10-04-2004, 17:54   #1 (permalink)
Neuer User
 
Benutzerbild von T.A.
 
Registriert seit: Sep 2003
Ort: ...verdammt, also musste ich doch die 2. Straße abbiegen... mist, so komm' ich nie nachhause.
Beiträge: 128
Thumbs down Mehr Gegner-> alles langsamer

Howdy!
Also....
Ich will ja, wie keiner weis, ein Spiel machen. Das soll jetzt Action sein,aber was red' ich solange:

Im Spiel sollen mehrere Gegner, und natürlich der SPieler sein. Jeder Gegner hat da seine eigenen Eigenschaften , zum Beispiel wird da die Verteidigung in 'ne Variable gespeichert.

Um dann alles mögliche abzufragen, benutz' ich dann For-Schleifen. Jeder Gegner hat 'ne Nummer, und so würde dann zum Beispiel bei 'ner For Schleife, bei der der Wert auf die Variable I fällt, das so aussehen:

_root["vert"+i] = 5

Da wird die Verteidigung auf 5 gesetzt.

Nur wird das dann immer schlimmer mit der Spielgeschwindigkeit, wenn ich immer mehr Gegner hab', und die (zum Beispiel wenn jemand Schaden nimmt, und der Schaden mit der Verteidigung berechnet wird) dann alle nach Verteidigung mit 'ner ewig lagenm For-Schleife durchgegangen werd'n.
Bei meinem Rechner, neuerdings 700 Megaherz (die Spiele sollt'n ja auch auf normalen Rechnern laufen, heutzutage hat ja nich' jeder solche großen Rechen-Power-Rechner), kommen dann immer größere Abstände zum nächsten Frame, wenn die Forschleifen über große zahlen (360 und so weiter)kommen.

Gibt's irgendwie 'ne andere Möglichkeit, diese Forschleifen zu umgehen und somit das Spiel flüssiger zu gestalten?
__________________
Ich habe keeeeine Ahnung!
T.A. ist offline   Mit Zitat antworten
Alt 10-04-2004, 21:17   #2 (permalink)
stb
Neuer User
 
Registriert seit: Sep 2003
Beiträge: 385
Versuchs mal mit Objekten - sprich Referenzen
schau dir das mal etwas genauer an:
ActionScript:
  1. a = new Object();
  2. a.x = 10;
  3. b = a;
  4. c = b;
  5. a.x = 20;
  6. trace (b.x);
  7. trace (c.x);
  8. delete b;
  9. c.x = 30;
  10. trace (a.x);
__________________
Das Schwerste ist das Einfachste
www.rentstock.de
stb ist offline   Mit Zitat antworten
Alt 12-04-2004, 13:34   #3 (permalink)
Neuer User
 
Benutzerbild von T.A.
 
Registriert seit: Sep 2003
Ort: ...verdammt, also musste ich doch die 2. Straße abbiegen... mist, so komm' ich nie nachhause.
Beiträge: 128
Uff.... na das versteh' ich nich', ich werd' aber mal in den Flash Hilfen von Flash MX nachgucken, das hilft immer wieder'ma!
__________________
Ich habe keeeeine Ahnung!
T.A. ist offline   Mit Zitat antworten
Alt 12-04-2004, 18:41   #4 (permalink)
Farbe ist Luxus
 
Benutzerbild von ludabruda
 
Registriert seit: May 2003
Ort: Köln
Beiträge: 2.405
HI,

Objekte zu verwenden ist sicherlich die beste Möglichkeit in diesem Zusammenhang, das solltest du dir auf jeden Fall mal ansehen.

MovieClips sind z.B. auch Objekte. Ein Objekt hat Methoden (Funktionen) und Eigenschaften (Werte). meinMC._x ist eine Eigenschaft eines MC. meinMC.gotoAndStop(1); ist eine Methode des Objekts.
Du kannst eigene Objekte definieren und eigene Methoden und Eigenschaften festlegen.

Aber eine andere Frage: warum durchläufst du denn alle Gegner in einer Schleife? Wenn nur einer angegriffen wird, benötigst du doch nur den einen?

Grüße
Sascha
__________________
12:15, press return
ludabruda ist offline   Mit Zitat antworten
Alt 12-04-2004, 19:33   #5 (permalink)
stb
Neuer User
 
Registriert seit: Sep 2003
Beiträge: 385
@T.A.
Das ist gar nicht so schwer, nur schwer zu visualisieren.
ActionScript:
  1. zahl= 1;
  2. txt= "hallo";
  3. WahrFalsch = true;
  4.  
  5. Obj = {z:zahl, t:txt, WF:WahrFalsch};
a ist vom DatenTyp Number
txt vom DatenTyp String
WahrFalsch vom DatenTyp Boolen

wenn man z.B.
ActionScript:
  1. zahl2 = zahl
schreibt, ist zahl2 eine !Kopie! von zahl.
'zahl2' ist von 'zahl' völlig Abgetrennt und Unabhängig von 'zahl'.
Das selbe gilt für 'txt' und 'WahrFalsch'.

Aber bei Objekten
ActionScript:
  1. // beispiel:
  2. o = new Object();
  3. // oder
  4. o = {}
ist das anders.

ActionScript:
  1. Obj2 = Obj
'Obj2' ist !keine Kopie! von Obj.
'Obj2' ist eine Referenz, sprich ein Verweis auf 'Obj'.

Eine Referenz ist wie ein Fenster, wo man hindurch schaut, und das Original sieht.

Wenn man Werte einer Referenz ändert,
ändern sich auch die Werte Original - und Umgekehrt.

--Das ist ja das geniale bei Objekten.--

Wenn man das Original löscht, wird die Referenz zum Original.

Also eigendlich ganz einfach.

MovieClip ist übrigends auch vom DatenTyp Object.

Wenn du z.B. ein MovieClip namens meinMC auf der Bühne hast,
mach doch mal folgendes:

ActionScript:
  1. ref = meinMC;
  2. ref._visible = false;
Das funktioniert natürlich auch bei eine Referenz von einer Referenz:
ActionScript:
  1. ref = meinMC;
  2. ref2 = ref;
  3. ref3 = ref2;
  4. ref4 = ref3;
  5. ref5 = ref4;
  6. ref5._visible = false;

Have (AS)Fun
__________________
Das Schwerste ist das Einfachste
www.rentstock.de

Geändert von stb (12-04-2004 um 19:36 Uhr)
stb ist offline   Mit Zitat antworten
Alt 13-04-2004, 13:35   #6 (permalink)
*<):o)
 
Registriert seit: Mar 2003
Beiträge: 83
@ludabruda

ein objekt hat nur Eigenschaften.

eine klasse hat eigenschaften und/oder methode(functionen).

gruss
__________________
looser@www:~> su -l
Password:
root:~ #
root:~ # chmod 777 WorldWideWeb
root:~ # logout
looser@www:~>

Optimismus ist ein Mangel an Information!
m1cha ist offline   Mit Zitat antworten
Alt 13-04-2004, 17:28   #7 (permalink)
Neuer User
 
Benutzerbild von T.A.
 
Registriert seit: Sep 2003
Ort: ...verdammt, also musste ich doch die 2. Straße abbiegen... mist, so komm' ich nie nachhause.
Beiträge: 128
Hm....
Naja, aber wenn dann die Objekte alle dieselben Eigenschaften ham', dann hat das doch keinen Sinn. Oder hab' ich das jetzt falsch verstanden? Ich nehm' ma' an ja....

Da smit dem ._x und so kannte ich schon, hab' ich alles schonbenutz.


Also das mit der Abfragung soll ja so sein, das, wenn eine Kugel einen Gegner trifft, der Gegner dann irgend 'ne spezielle eigenschaft, also'n bestimmter wert für'n Gegner, verändert wird.
Wenn da aber meinentwegen 10 Gegner sinn', und man mit 30 Kugeln feuert, dann beträgt die For schleife insgesamt 300 Durchgänge. Das bringt die ganze Kiste zum lahmlegen. Also die FPS sinken stark in die Knie.


Ach, ach,meinst du das so, das das wie beim rumeditieren von irgendwelchen Flash Grafiken is'? Wenn man ein Symbol dann dorte mehrmals hat, und man das original ändert, verändern sich dann alle Symbole auf der Fläche nach dem original. Is' das so?
__________________
Ich habe keeeeine Ahnung!
T.A. ist offline   Mit Zitat antworten
Alt 13-04-2004, 17:44   #8 (permalink)
Farbe ist Luxus
 
Benutzerbild von ludabruda
 
Registriert seit: May 2003
Ort: Köln
Beiträge: 2.405
@m1cha:
ja, hast recht, ein Objekt ist eine Instanz einer Klasse...

@T.A:

die haben alle dieselben Eigenschaften, also x- und y-Koordinaten, Verteidungspunkte, etc. Aber darin sind nicht die gleichen Werte gespeichert. MovieClips haben auch alle die Eigenschaft _x, aber _x hat natürlich nicht immer den gleichen Wert.

Ein Beispiel:
ActionScript:
  1. Mann = function(strength,defense,health) {
  2.     this.strength= strength;
  3.     this.defense= defense;   
  4.     this.health = health;
  5.  
  6.     this.hit = function(power) {
  7.         this.health -= power-this.defense;
  8.         this.checkDeath();
  9.    };
  10.  
  11.    this.checkDeath = function() {
  12.       if(this.health <= 0) {
  13.              this.dead = true;
  14.       }
  15.    };
  16.  
  17.    this.attack = function(gegner) {
  18.        gegner.hit(this.strength);
  19.    };
  20. };

Das ist eine Klasse "Mann". Alle deine Figuren können ein Objekt dieser Klasse darstellen. Natürlich ist diese Klasse noch sehr rudimentär

ActionScript:
  1. Mann1 = new Mann(5,3,100); // erzeugt einen neuen Mann mit Strength 5, Defense 3 und Health 100
  2. Mann2 = new Mann(10,5,40); // erzeugt einen neuen Mann mit Strength 10, Defense 5 und Health 40
  3.  

Jetzt hast du 2 Männer, die sich kloppen können

ActionScript:
  1. Mann1.attack(Mann2); // Mann1 attackiert Mann2
  2. // attack ist eine Methode der Klasse Mann. Als Parameter erwartet sie die Instanz des Gegners
  3. // Bei Mann2 wird also hit() ausgeführt, mit der Stärke von Mann1 (Parameter power)
  4. // von dieser Power wird die eigene Defense abgezogen
  5. // (das ist natürlich so schlecht, weil ein Mann je nach Defense an Health gewinnen kann.
  6. //Besser ist es, defense als Koeffizienten einzusetzen, muss man halt austüfteln (->Gameplay)
  7.  

Mann 2 prüft, nachdem er getroffen wurde, ob er tot ist.

Das ganze kannst du mit beliebig vielen Leuten machen. Du musst dann nur wissen, wer wen trifft...

Grüße
Sascha

Oops. Hatte zuvor eine Eigenscaft attack und eine Methode attack
__________________
12:15, press return

Geändert von ludabruda (13-04-2004 um 17:46 Uhr)
ludabruda ist offline   Mit Zitat antworten
Alt 14-04-2004, 11:36   #9 (permalink)
Neuer User
 
Benutzerbild von T.A.
 
Registriert seit: Sep 2003
Ort: ...verdammt, also musste ich doch die 2. Straße abbiegen... mist, so komm' ich nie nachhause.
Beiträge: 128
Cool, so sieht's also aus!
Mit den Funktions Dingitsen hab' ich's auchmal versucht, so dürfte's aber besser klappen.


Herzlichen Dnak an euch alle, jetzt steht meinem Kurzspiel aus einer Mischung aus Metal Slug und Madness Combat nicht's im Weg!


EDIT:

Und wie mach' ichd as dann mit mehreren Treffern auf verschiedene? Nehmen wir ma' an, es gibt 10 weitere Männer, und der eine Mann trifft alle 10 auf einmal, dann muss ich doch 'ne 10 mal lange For schleife machen wo dann immer das Mann1.attack(["Mann"+i) darstehen (oder so).
__________________
Ich habe keeeeine Ahnung!

Geändert von T.A. (14-04-2004 um 11:57 Uhr)
T.A. ist offline   Mit Zitat antworten
Alt 16-04-2004, 11:25   #10 (permalink)
Neuer User
 
Benutzerbild von T.A.
 
Registriert seit: Sep 2003
Ort: ...verdammt, also musste ich doch die 2. Straße abbiegen... mist, so komm' ich nie nachhause.
Beiträge: 128
Irgendwie kann die Sache doch nich' funktionieren.
Man brauch doch noch immer'ne For schleife, um die ganzen Männder durchzugehen!
__________________
Ich habe keeeeine Ahnung!
T.A. ist offline   Mit Zitat antworten
Alt 16-04-2004, 11:36   #11 (permalink)
Farbe ist Luxus
 
Benutzerbild von ludabruda
 
Registriert seit: May 2003
Ort: Köln
Beiträge: 2.405
ja, das ist schon richtig. Aber du willst doch nicht 300 Leute mit einer Attacke treffen, oder?!

Bei so vielen Kollegen ist das so oder so problematisch...

Grüße
Sascha
__________________
12:15, press return
ludabruda ist offline   Mit Zitat antworten
Alt 17-04-2004, 19:39   #12 (permalink)
Neuer User
 
Benutzerbild von T.A.
 
Registriert seit: Sep 2003
Ort: ...verdammt, also musste ich doch die 2. Straße abbiegen... mist, so komm' ich nie nachhause.
Beiträge: 128
So'n Mist aber auch...
Aber das heißt ja dann wohl, das man umfassende Spiele wie Prügel Fun Spiele oder richtig vollbesetze Shooter, bei den man halt gegenseitig die Eigenschaften abfragen muss.
Tja, und schon wieder muss'ich mir was andres suchen... irgend'n Editor gibt's da schon. Und wenn nich'... muss ich Programmier'n lernen. uff, naja da mach' ich lieber noch'n paar Filme.
__________________
Ich habe keeeeine Ahnung!
T.A. 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 22:41 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele