| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Eierkopf Registriert seit: Jul 2008 Ort: Hagen
Beiträge: 207
| mehrere Kollisionen sparsam erstellen (Tower Defence Game) ?!?
Hallo, ich baue mir gerade ein Tower Defence Game (kurze Erläuterung: eine gewisse Anzahl von Gegnern laufen eine Route ab und dürfen das Ende der Route nicht erreichen. Man kann Waffen bauen, die eine gewisse Reichweite haben, um die Gegner zu zerstören). Nun ist es so, dass die Gegner ihren Weg laufen und ich auch die Waffen setzen kann. Ich muss nun abfragen, wann "welcher" Gegner in den Bereich von einer Waffe ist. Dazu muss ich kurz erklären, wie ich meine Waffen und meine Gegner erstelle und bezeichne. Gegner: Die Gegner werden automatisch erstellt. Insgesamt 20 Stück die nacheinander per attachMovie an das Objekt "game.clip" gehängt wird. Sie tragen dann folgende Namen. game.clip["gegner" + 1] game.clip["gegner" + 2] game.clip["gegner" + 3] ...usw Waffe: Die Waffen werden per Befehl erzeugt und werden ebenfalls an "game.clip" angehängt. Die haben dann die Namen. game.clip["waffe" + 1] game.clip["waffe" + 2] game.clip["waffe" + 3] Jetzt komm ich wieder zum eigentlichen Problem. Angenommen Gegner 4 gerät jetzt an Waffe 3, dann soll natürlich Waffe 3 auf Gegner 4 schießen. Um das zu realisieren muss ja immer abgefragt werden, welcher Gegner nun an welche Waffe gerät. Bis lang mache ich das so: HTML-Code: onEnterFrame = function()
{
for (i=0; i<anzahl_gegner; i++)
{
for (j=0; j<anzahl_waffen; j++)
{
if(game.clip["gegner" + i].hitTest(game.clip["waffen" + j]))
{
// hier kommt nun ein Script rein, welches den Schuss
// von der Waffe zum Gegner ausführt
}
}
}
} Gibt es da eine einfachere Möglichkeit? Danke und lieben Gruß M.R. |
| | |
| | #2 (permalink) |
| poke Registriert seit: Dec 2002 Ort: Iserlohn [NRW]
Beiträge: 2.304
|
Da du TDs oft so sind, dass Tower eine bestimmte radiale Reichweite haben, reicht es sicherlich einfach den Abstand des Gegners (Mittelpunkt) zum Tower (Mittelpunkt) zu berechnen. Eine solche Abstandsformel hat man ja schon in der Schule gelernt, und geht sicher viel viel schneller als ein Hittest: Code: d = SQRT( ( y2 - y1 )² + ( x2 - x1 )² ) |
| | |
| | #3 (permalink) |
| Eierkopf Registriert seit: Jul 2008 Ort: Hagen
Beiträge: 207
|
stimmt, das wäre schon eine gute möglichkeit, aber dass muss ich trotzdem in einer schleife abfragen, oder? Also ich meinte, dass ich diese formel eigentlich zwischen jedem gegner und jeder waffe IMMER gleichzeit laufen lassen muss, richtig? das sind auch wieder viele berechnungen. oder ist das wirklich so viel sparsamer als der hittest, dass das egal ist? Geändert von themerx (29-10-2008 um 10:03 Uhr) |
| | |
| | #4 (permalink) | |
| ich versuchs ja Registriert seit: Sep 2007 Ort: Kassel
Beiträge: 281
|
Moin moin... Eine Idee: Du könntest erst die Abfrage in einer schleife (oft) ausführen. Wenn dann ein Gegner in der Reichweite ist, feuerst du und wartest bis die waffe nachgeladen ist, um dann wieder (oft) nachzufragen... So könntest du zumindest etwas die Abfragen verringern.. Ob das allerdings DIE Lösung ist -> keine Gerantie :-) PS: Wenns fertig ist, schick mal den Link durch den Äther. Bin für sowas immer gern zu haben :-)
__________________ Zitat:
Udo Lindenberg und Jan Delay | |
| | |
| | #5 (permalink) | |
| Eierkopf Registriert seit: Jul 2008 Ort: Hagen
Beiträge: 207
| Zitat:
http://www.stevie-mycs.de/games/lase...serdefence.htm da laden die Waffen allerdings nicht nach, sondern laufen die ganze Zeit, sobald ein gegner in den Waffenbereich kommt. Geändert von themerx (29-10-2008 um 10:28 Uhr) | |
| | |
| | #6 (permalink) |
| Eierkopf Registriert seit: Jul 2008 Ort: Hagen
Beiträge: 207
|
also, den Code, den ich jetzt habe ist, dank eurer Hilfe schon echt sehr gut. Ich lasse das Spiel nun mit 30 FPS laufen. Die Abstände zwischen den Gegnern und den Waffen werden berechnet. Es laufen 25 Gegner und ich hab mal auch so ca 20 - 30 Waffen gebaut. Die FPS lasse ich mir anzeigen und es gibt auch keinerlei - bis sehr geringe Verluste an FPS. Ich mache es nun so, dass der erste Gegner, der in den gewollten Abstand gerät, in einer Variablen eingefangen wird und dort soll nun auf den Gegner geschossen werden. Wenn ich aber nun einen "Laser" erzeuge, der dauerhaft (also so lange, wie der eingefangene Gegner im Range ist) auf den Gegner strahlt, wird das Spiel wieder langsamer. Ich erzeuge den laser mit: _root.game.clip.attachMovie("laser_mc","laser_mc"+ i, i+1700); dann moveTo(waffe._x, waffe._y) lineStyle(...) lineTo(gegner._x, gegner._y) gibt es da auch ne bessere Alternative? Schaut mal bei dem Game. Da läuft das auch flüssig mit sogar noch viel mehr Gegnern. http://www.candystand.com/play.do?id=18047 |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |