Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : Space Wars Beta



Phönix Tear
29.10.2006, 13:30
Joa, entschuldigt bitte die übertriebene Nutzung der Spoiler-Funktion, aber ich finde dieses neue Spoiler-Design einfach sehr schick und vor allem sehr praktisch (vor allem im Apple-Look ^^) was die Übersichtlichkeit angeht. So muss man nur das lesen was man wirklich wissen will :)

Hallo Community,
mir wurde in den letzten beiden Wochen ein bisschen langweilig. Nachdem ich auch schon etwas länger nicht mehr an Turning Plates gearbeitet hatte (irgendwann werd ich das Menü schon noch fertig bekommen ^^) aber trotzdem wieder Lust darauf hatte ein bisschen zu Makern wollte ich mein altes "Defender"-Minispiel ein bisschen verbessern. Damals war das alles noch recht einfach gestaltet. Man bewegte sich am unteren Rand via Pfeiltasten nach rechts und links und konnte den 5 von oben kommenden Gegnern mit 11 verschiedenen Schussarten einheizen. Dabei waren allerdings 3 davon jeweils doppelt vertreten (einmal stark, einmal schwach). Dabei konnten außerdem immer 3 Schuss maximal auf dem Bildschim sein und die Gegner machten auch nichts anderes als langsam nach unten zu wandern und dann zu verschwinden. Wenn man dann keine Zielsuchtorpedos mehr hatte kam man nicht mehr weiter, da die Gegner anders nicht mehr erreichbar waren und es auch keine Abfrage gab die die Gegner automatisch aus dem Spiel nahm sobald sie nicht mehr erreichbar waren. Aber auch egal, darum geht es ja eigentlich gar nicht ^^. Trotzdem füge ich mal kurz zum Vergleich ein kleines Picture ein (allerdings nur als Spoiler):
http://www.directupload.net/images/061029/temp/hR4c8Li4.png (http://www.directupload.net/file/d/865/hR4c8Li4_png.htm)
Tjö, jetzt habe ich mich noch mal drangesetzt und was ganz anderes ausprobiert. Der Großteil ist anders als in meinem ersten Versuch. Damit es aber übersichtlicher wird, liste ich die „Features“ einfach mal auf (selbst wenn man einiges nicht als Feature ansehen kann…):

Grundlegendes
- 1 Held
- 5 Gegner
- 5 Schüsse vom Helden
- 5 Schüsse der Gegner (jeder Gegner hat einen)
- Steuerung mit der Maus
- Gegner könnten bis zu 7 Wegpunkte haben (werden in der Beta aber nicht benutzt…)
- Gegner sind rammbar
- Schüsse wie Ziele haben ihre eigene Größe (-> Streifschüsse gehen auch)
- Held wie Gegner können ein Schild haben
- Es gibt Waffen die Schilde durchbrechen
- Durch Call-Durchlauf trifft jeder (!) Schuss, außer sie überschreiten eine Geschdindigkeit die größer ist als der Gegner lang -_-
Was noch erweitert wird
- 3 Schussarten (1 Laser, 1 Rakete, 1 Plasmageschoss)
- 3 Gegnerarten (Kleines / Mittleres / Großes Trümmerstück)
- 1 Heldenschiff
Die Beta betreffend
Es ist einstellbar
- ob die Gegner schießen oder nicht
- wie hoch die „Refreshrate“ ist (1x / 2x / 4x 0,0 Sekunden)
- welchen Schuss der Held benutzt
- ob der „Radarstrich“ angezeigt wird (siehe folgende Screenshots)
So, gerade zu „Die Beta betreffend“ ist noch zu sagen, das bei mir das Spiel auf maximalen Einstellungen (Refreshrate 0,0 Sekunden) extrem ruckelt (3 Gigahertz, 1 Gigabyte Ram).
Weshalb ich nun also wie in Turning Plates erstmal eine „Beta“ rausbringe ist hier nicht die Frage danach ob das Spiel ankommt oder nicht (war nur ne kleine Spielerei), sondern eher der Test ob es überhaupt einigermaßen vernünftig auf den verschiedenen Rechnern läuft. Daher ist meine Bitte an euch das Spiel runterzuladen und auszuprobieren. Dabei sollt ihr die verschiedenen Einstellungen ausprobieren und mir bitte hier oder per PN sagen ob, und wenn mit welcher Konfiguration es mehr oder weniger ruckelfrei funktioniert hat (Angaben über die Stärke des PCs müssen dabei nicht sein, weil ich eigentlich selbst damit nix anfangen kann ^^°).
Und damit zur Steuerung:

- Flugsteuerung: X + Y-Achse der Maus
- Schießen: Linke Maustaste
- Menü: Rechte Maustaste
Im Menü lassen sich dann alle unter „Die Beta betreffend“ aufgelisteten Einstellungen vornehmen.
Hierbei will ich ganz ehrlich sein. So wirklich viele Gedanken hab ich mir da noch nicht drüber gemacht. Ich wollte erstmal sehen ob es überhaupt funktioniert. (Bugs bitte auch melden ;) .) Was ich aber schon weiß ist, dass das Spiel auf einer Raumstation startet, welche zerstört wird. Gut nicht sonderlich originell, aber ein alltägliches Geschehen in einem Universum welches von Krieg geplagt ist. Was ich mir sonst noch gedacht habe ist, dass vielleicht ein „Zeitschiff“ eine wichtige Rolle spielt. Keins mit dem man tatsächlich in der Zeit reisen kann, sondern eins mit dem man nahezu unendlich schnell fliegen kann und zwar nicht durch hohe Geschwindigkeit selbst (max 100% der Lichtgeschwindigkeit), sondern durch Manipulation der Zeit, sodass das Schiff auf einer Art „temporalen Welle“ gleitet. Aber dazu später ^^. Generell möchte ich mich, soweit das bei einem Weltraumshooter vernünftig ist, an die Regeln der Physik halten. (Nicht akribisch, aber im Großen und Ganzen sollte das eine Richtlinie sein…) Somit ist es (außer mit dem Zeitschiff) nicht möglich schneller als die Lichtgeschwindigkeit zu fliegen. Natürlich werde ich hier und da ein paar Kleinigkeiten dazudichten (wie die Schildtechnologie), aber nichts ausgefallenes…
Ach ja, worauf ich eigentlich hinauswollte war die Gegnerwahl in der Beta. Es sind schließlich alles nur Trümmerstücke. Nach dieser kleinen Einführung dürfte klar sein warum. Der Held war auf der Station und konnte sich mit einer Rettungskapsel retten. Nun muss er aus dem Trümmerfeld entkommen. Das dabei die Trümmerstücke auf ihn schießen liegt alleine daran, dass ich noch keine weiteren Gegner hatte und trotzdem die Schussfunktion testen wollte ;).
Gegner 1:
Name: Kleines Trümmerstück
Schild: 0
Energie: 6
Geschwindigkeit: 3
Aussehen:
http://www.directupload.net/images/061029/temp/EIm5D9FK.png (http://www.directupload.net/file/d/865/EIm5D9FK_png.htm)

Gegner 2:
Name: Mittleres Trümmerstück
Schild: 0
Energie: 10
Geschwindigkeit: 2
Aussehen:
http://www.directupload.net/images/061029/temp/c5xEa4qJ.png (http://www.directupload.net/file/d/865/c5xEa4qJ_png.htm)

Gegner 3:
Name: Großes Trümmerstück
Schild: 30
Energie: 15
Geschwindigkeit: 1
Aussehen:
http://www.directupload.net/images/061029/temp/UxSy8mHs.png (http://www.directupload.net/file/d/865/UxSy8mHs_png.htm)

Jaja, der Gegner 3 hat ne Menge Schild. Das liegt einfach daran, dass das Trümmerstück eine Schildbatterie ist ^^. Die Raumstation hatte viele solche Aggregate, welche nun alle nur noch sich selbst schützen…
Nun, das ist recht einfach zu erläutern:
http://www.directupload.net/images/061029/temp/ecogZkiG.png (http://www.directupload.net/file/d/865/ecogZkiG_png.htm)
Linkes seht ihr die Zustandsanzeige des Schiffes, in der Mitte das Radar und rechts wieder das gleiche wie links (ich wusste nicht was ich da hinpacken sollte, also habe ich einfach die linke Seite wiederholt ;) ). Dabei wird im gelben Kästchen der aktuelle Schuss angezeigt, die grüne Leiste verkörpert die Schild- die rote leiste die Hüllenstärke. Das winzige Lila Ungeheuer am unteren Rand ist die Fortschrittsanzeige im Level. Ist sie voll habt ihr die Tortur hinter euch ;).
Tja, das Radar erfüllt leider nicht was es sollte. Ich hatte es bereits fertig als mir einfiel das ich ja gar keine Pictures mehr übrig hatte um daraus ein Radar zu basteln. Gut, zugegeben, es hätte eh nicht viel gebracht, maximal gut ausgesehen. Daher hab ich es jetzt einfach weggelassen. Dort werden dann nur in recht schlecht gemachten Paint-Pixelhaufen nützliche Dinge angezeigt wie z.B. ein Grabstein für: „Du bist tot“ XD. Na ja, mal schauen wie ich das noch verbessern kann…
Tja, damit dann noch zu 3 Screenshots direkt aus dem Spiel:
http://www.directupload.net/images/061029/temp/88yfoHOi.png (http://www.directupload.net/file/d/865/88yfoHOi_png.htm) http://www.directupload.net/images/061029/temp/QqiCiC8I.png (http://www.directupload.net/file/d/865/QqiCiC8I_png.htm) http://www.directupload.net/images/061029/temp/fZ8U9krt.png (http://www.directupload.net/file/d/865/fZ8U9krt_png.htm)
Joa, das Spiel ist logischerweise von mir ^^°. Dank geht aber (wie immer :rolleyes: ) an Lachsen, da ich mir erlaubt habe 3 Explosions-BAs und die dazugehörigen 5 Sounds wie 2 Battle-Sets zu importieren.
Nun nur noch zum Download-Link (457 KB):
*klick mich* (http://rapidshare.com/files/1146798/Space_Wars.rar.html)

Also, bitte schreibt, auf welchen Einstellungen es gut bei euch läuft. Und wer Bugs findet sollte diese bitte ausreichend frankiert einschicken ;)

mfg
Phönix Tear

Marian
29.10.2006, 14:20
könnte man auch eine version für leute, die den kepatch nicht haben, machen?
wäre cool. ist für mich leider nicht spielbar, weil ich das ding halt nicht habe. :/

.Kerby
29.10.2006, 14:26
also die vorstellung gefällt mir.
und so erinnert mich das spiel stark an space Invaders.

ich lade es gerade und spiele es mal an werde meine meinung
zum spiele selbst dann noch reinschreiben.

mfg .kerby

CapSeb
29.10.2006, 14:32
Das Spiel läuft bei mir auf halber Rate (4x 0,0) flüssig. Bei den anderen beiden Einstellungen geht die Framezahl auf 15 fps runter oder es gibt sogar zwei Sekunden Standbild. Bei einem zwei Monate alten Rechner dürfte das nicht passieren (wenn dann doch grobe Werte gefragt werden: 1GB Ram, D-Prozessor, Geforce 7600GS). Müsste man die nötigen Waits überprüfen.

Dank der Mausuntertützung gefällt mir das Spiel echt gut. Allerdings muss mMn das Grundkonzept noch stark erweitert werden, damit der Spaßfaktor weiterhin steigt. Daher würde ich vorschlagen, dass du vor dem Weiterarbeiten erstmal ein paar Grundansätze durchdenkst, wenn das noch nicht getan wurde.
So würde ich zum Beispiel um einiges mehr grafische Informationen einbauen. Da diese unter Umständen pictureabhängig sind, ist ein frühzeitiges Strukturieren nötig.
Bin gespannt, wie es weitergeht. Uns immer schön auf dem Laufenden halten. :A


Durch Call-Durchlauf trifft jeder (!) Schuss, außer sie überschreiten eine Geschwindigkeit, die größer ist als der Gegner lang.
Das ist sehr wichtig zu überarbeiten.
Vielleicht hilft eine Abfrage weiter, die nicht den momentanen Punkt des Raumschiffes überprüft, sondern den Bereich, der durchflogen wird. Also mit größer-kleiner arbeiten.

Phönix Tear
29.10.2006, 17:15
Was genau meinst du mit Grundlegenden Sachen? Ich hatte übrigends alle Pictures verplant. Picture 1 könnte ich noch freimachen (ist der Strich auf dem Radar) und Picture 12 sollte eigentlich noch ein Bonusobjekt werden. Außerdem ist noch Picture 18 frei. Hatte da evtl an was gedacht was dem Helden folgen könnte...


Radar-Strich:
Picture 1

5 Gegnerschüsse:
Pictures 2-6

5 Gegner:
Pictures 7-11

1 Bonus:
Picture 12

5 Heldenschüsse:
Pictures 13-17

1 Heldenbegleiter (?):
Picture 18

1 Held:
Picture 19

1 Schildanimation:
Picture 20
Bleibt nicht viel über...
Und die Waits sind überprüft. Ich kann hier gerne mal genauer den Durchlauf aufzählen. Letztendlich gibt es 4 Parallel-Process Events.
PP-Event 1: Heldensteuerung
Dieses Event beinhaltet die Mausabfrage und die Anzeige des Helden. Je nach Einstellung Waits von 1x / 2x und 4x 0,0 Sekunden. Hierbei darf das Wait nicht zu hoch werden, da sonst das Heldenschiff nur durch die Gegend ruckelt. Dabei hast du mich allerdings auf ne Idee gebracht. Ich glaube ich gliedere das auch nochmal aus und lasse das Heldenpicture wirklich nur neu anzeigen wenn sich dieser auch bewegt hat... Weiß zwar nicht wie viel das bringt, aber mal schaun ;)

PP-Event 2: Aktionsabfrage
In diesem Event wird wieder über den Key-Patch abgefragt ob eine Maustaste gedrückt wurde. Wenn ja passiert die entsprechende Handlung. Wenn die linke Maustaste gedrückt wurde wird zuerst das CE Schussregister gecallt, damit der entsprechende Schuss seine Werte erhält (Größe, Startposition, Schaden, Geschwindigkeit, etc.) und ein Call des CEs Soundregister angeschlossen. Damit hat der Schuss seine Werte erhalten.
Nur ein Wait von 0,0, da man sonst nicht richtig einzeln schießen könnte (ist jetzt schon schwer genug). Zu seltene Abfrage würde nur noch Dauerfeuer ermöglichen. Nach einem Schuss wird allerdings 0,1 Sekunde + die 0,0 Sekunden gewartet.

PP-Event 3: Levelmanager:
Dieser erschafft der Reihe nach die Gegner und gibt diesen über entsprechende CEs ihre Werte. Das sind immer nur wenige Codezeilen, danach ein Wait bis zum nächsten Gegner (Durchschnittlich 1 Sekunde). Sind alle Gegner gespawnt wird abgefragt ob diese entweder den Bildschirm verlassen haben oder zerstört wurden. Wenn dies bei allen der Fall ist beginnt die nächste Angriffswelle. Zwischen jeder Abfrage ein Wait von einer Sekunde.

PP-Event 4: Gegner 1
Der Gegner 1 hat genau wie die Heldbewegung, je nach Einstellung ein, zwei oder vier 0,0 Wait. Dabei ist dieses Event jenes, welches die Call-Reihe in Gang setzt. Jene ist wie folgt:

Gegner 1 - Gegner 1 Schussabfrage - Gegner 1 Schussbewegung - Gegner 2 - Gegner 2 Schussabfrage - Gegner 2 Schussbewegung - Gegner 3 - ... - Gegner 5 Schussbewegung - Held Schussbewegung - Kollisionsabfrage Gegner - Kollisionsabfrage Held
Das größte Problem wo ich wahrscheinlich auch nochmal neu skripten muss sind die Kollisionsabfragen. Dort muss ich 3 Dinge berechnen:
1) Befindet sich die Helden-Hitbox innerhalb der eines der 5 Gegner?
2) Befindet sich eine der 5 Heldenschuss-Hitboxen innerhalb eines der 5 Gegner?
3) Befindet sich eine der 5 Gegnerschuss-Hitboxen innerhalb des Helden?
Gerade bei Punkt 2 wird es Problematisch. Da jeder Schuss und jeder Gegner eigene Größen und Schaden wie Energie haben muss ich das einzeln durchgehen, also:
- Schuss 1 auf Gegner 1?
- Schuss 2 auf Gegner 1?
- Schuss 3 auf Gegner 1?
- Schuss 4 auf Gegner 1?
- Schuss 5 auf Gegner 1?
- Schuss 1 auf Gegner 2?
- ...
Sprich: 25 Abfragen allein für die Schüsse. Dabei geht damit einher das jeweils der Schaden berechnet wird. Die größe der Abfrage kommt aber erst dadurch zustande das 4 Schussarten die Schilde durchdringen, die restlichen nicht, wobei wieder eine den Schaden an den Urheber des Schusses überträgt (also Energie überträgt). Auch das muss für jeden Schuss überprüft werden...
Damit kommt man recht schnell auf hohe Rechenansprüche...
Was ich aber, wie beim Helden, noch ändern kann ist die Anzeige der Gegner. Momentan mache ich es noch so das das entsprechende Gegnerpicture mit jedem Durchlauf neu angezeigt und danach bewegt wird. Das könnte ich noch ändern. Selbstverständlich ist natürlich, dass die Gegnerabfragen nur dann durchlaufen werden wenn auch ein Gegner da ist, bzw. die "Schussbewegung" nur durchgeführt wird wenn der entsprechende Schuss unterwegs ist...
Neben den PPs natürlich noch eine Reihe von CEs welche als Register für die Gegnerwerte sowie Schusswerte und auch Energieberechnung und Anzeigenbewegung dienen. Diese werden nur gecallt wenns auch unbedingt nötig ist.



Durch Call-Durchlauf trifft jeder (!) Schuss, außer sie überschreiten eine Geschwindigkeit, die größer ist als der Gegner lang.
Das ist sehr wichtig zu überarbeiten.
Vielleicht hilft eine Abfrage weiter, die nicht den momentanen Punkt des Raumschiffes überprüft, sondern den Bereich, der durchflogen wird. Also mit größer-kleiner arbeiten.
Dafür müsste ich eine Art "Vorher - Nachher" Variablenschar einbaun. D.h. bei jedem Zug am Anfang eine "Position X Neu" und "Position Y Neu" für die Schüsse vergeben und dann vergleichen ob der Schuss in der Zeit den Gegner durchwandert hat. Hätte ich am Anfang darauf gebaut die Gegner nur horizontal zu bewegen wäre das kein Problem gewesen. Dann müsste ich nur einen Y-Bereich festlegen und den Schaden berechnen sobald "Schuss Start X" < "Gegner X" < "Schuss Aktuell X" und "Gegner Minimum Y" < "Schuss Y" < "Gegner Maximum Y". Dem war aber nicht so. An sich sollten sich die Gegner auch vertikal bewegen können. Bei langsamen Schüssen kann es dadurch zu fehlern kommen (der Schuss ist am Gegner bereits vorbei wenn dieser sich auf seine Bahn lenkt und wird trotzdem getroffen).
An sich rechne ich schon mit Bereichen, das macht es auch so kompliziert, da immer 8 Möglichkeiten abgefragt werden Müssen.
http://www.directupload.net/images/061029/temp/eE3UUiXj.png (http://www.directupload.net/file/d/865/eE3UUiXj_png.htm)
Damit der Schuss den Gegner trifft müssen diese 8 Werte wie folgt zueinander stehen (wenn jemand ne leichtere Variante weiß, dann nur her damit!):

Für X:
[Schuss Minimum X < Gegner Minimum X] und [Schuss Maximum X > Gegner Minimum X]
oder
[Schuss Minimum X < Gegner Maximum X] und [Schuss Maximum X > Gegner Maximum X]
oder
[Gegner Minimum X < Schuss Minimum X] und [Gegner Maximum X > Schuss Minimum X]
oder
[Gegner Minimum X < Schuss Maximum X] und [Gegner Maximum X > Schuss Maximum X]

Für Y:
[Schuss Minimum Y < Gegner Minimum Y] und [Schuss Maximum Y > Gegner Minimum Y]
oder
[Schuss Minimum Y < Gegner Maximum Y] und [Schuss Maximum Y > Gegner Maximum Y]
oder
[Gegner Minimum Y < Schuss Minimum Y] und [Gegner Maximum Y > Schuss Minimum Y]
oder
[Gegner Minimum Y < Schuss Maximum Y] und [Gegner Maximum Y> Schuss Maximum Y]
Wenn jeweils eine der 4 Bedingungen für X wie für Y zutrifft wird der Gegner getroffen. Diese Abfrage muss nun für jeden Schuss und für jeden Gegner wie auch den Helden gemacht werden (10 Schuss, 6 Ziele).
Hmm, jetzt hab ich den Faden verloren...

@Marian:
Wenn mir jemand sagt wie man das macht, sicher ^^°

Was ich noch fast vergessen hätte:
Sollte das Spiel erstmal etwas flüssiger laufen werde ich mich natürlich nach einem guten Pixler umsehen um das Spiel in Grafischer hinsicht um einiges aufzuwerte (bzw. aufwerten zu lassen ;)) ^^

Edit:
So, nachdem der Held wie die Gegner jetzt nur noch ganz am Anfang angezeigt werden und die Pictures danach nur noch bewegt werden, läuft es zumindest ein bisschen flüssiger. Es geht bei mir jetzt fast ohne ruckeln mit normale (2x 0,0 Wait) Refreshrate...

Edit 2:
Ich hab noch einen Fehler in der Kollisionsabfrage der Gegner gefunden. Dort wurde dummerweise immer für alle Schuss des Heldens gerechnet, selbst wenn diese nicht unterwegs waren. Der Fehler ist nun behoben, dadurch läuft es, wenn ich die Schüsse der Gegner abstelle, selbst mit doppelter Refreshrate fast völlig ruckelfrei.
Ich hab bei der Gelegenheit auch noch einen Fehler mit dem kleinen Trümmerstück behoben. Dessen Picture war nicht ganz richtig ausgerichtet, sodass es im Vergleich zu seiner Hitbox 2 Pixel zu tief war. Durch eine ungerade Größe kann ich es nicht ganz beheben, aber wenigstens minimieren ^^

CapSeb
30.10.2006, 11:43
Damit der Schuss den Gegner trifft müssen diese 8 Werte wie folgt zueinander stehen (wenn jemand ne leichtere Variante weiß, dann nur her damit!)

Dein Möglichkeiten grafisch dargestellt:
http://www.directupload.net/images/061030/temp/387imuee.png (http://www.directupload.net/file/d/866/387imuee_png.htm)
Bei den Bedingungen sind meiner Ansicht nach nur die jeweils beiden letzten nötig (X3, X4, Y3, Y4). Es muss nur abgefragt werden, ob das Minimum oder das Maximum des Schusses zwischen dem Minimum und Maximum des Gegners ist ("minimumGegner < minimumSchuss < maximumGegner" oder das gleiche mit Maximum des Schusses). Korriger mich bitte, wenn ich dabei was übersehen hab.


Der Gegner 1 hat genau wie die Heldbewegung, je nach Einstellung ein, zwei oder vier 0,0 Wait. Dabei ist dieses Event jenes, welches die Call-Reihe in Gang setzt. Jene ist wie folgt:

Gegner 1 - Gegner 1 Schussabfrage - Gegner 1 Schussbewegung - Gegner 2 - Gegner 2 Schussabfrage - Gegner 2 Schussbewegung - Gegner 3 - ... - Gegner 5 Schussbewegung - Held Schussbewegung - Kollisionsabfrage Gegner - Kollisionsabfrage Held
Wieso setzt du auf Call-Management, oder wie man das nennen kann? Dadurch ist der Abstand zwischen zwei Überprüfungen eines Schusses/Gegners sehr lange. Ich habe bei meinen Spiel "Battle Versus 2" Parallel Process benutzt, damit alles gleichzeitig abläuft. Und das läuft mit entsprechenden Waits ruckelfrei (bei mir). Oder bedeutet deine Kette garnicht, dass es hintereinander abläuft?


Was genau meinst du mit Grundlegenden Sachen? Ich hatte übrigens alle Pictures verplant.
Genau darin sehe ich Gefahren. Durch die begrenzte Schussanzahl von maximal fünf Schuss gleichzeitig, besteht eine Einschränkung im Spielfluss, die nachträglich nicht mehr so leicht verändert werden kann. Daher muss man sich schon frühzeitig überlegen, inwiefern man die fünf Schuss ausnutzt - sie also mit passenden Idee absichtlich wirken lässt - oder die Anzahl erhöht. Mit absichtlich mein ich, dass mehr Schüsse bei einer bestimmten Idee Nachteile hätten. Etwas umständlich erklärt...

Phönix Tear
30.10.2006, 13:55
Hmm, mit der Abfrage hast du gewissermaßen recht. Dadurch wird allerdings der Bereich kleiner in dem geprüft wird, wodurch es leichter vorkommen kann, dass ein Schuss nicht trifft (wenn man extreme Werte verwendet (besonders kleine oder schnelle Gegner / Schüsse)).
Dazu ein Beispiel:

Der Schuss hat die Koordinaten (10|120) und den Speed 20. Außerdem die X-Größe 4.
Der Gegner hat die Koordinaten (30|120) und den Speed 8. Außerdem die X-Größe 5.

Nun ist die Ausgangsposition:
Schuss: (10|120) Minimum: (7|120) Maximum: (13|120)
Gegner: (30|120) Minimum: (25|120) Maximum: (35|120)

Die Abfragen ermitteln also, dass der Gegner nicht getroffen wird.

Jetzt gehen wir einen Schritt weiter, d.h. die jeweilige Geschindigkeit (ich nenn sie immer "Speed", weils einfach schneller geht ^^) wird addiert, bzw. subtrahiert.

Schuss: (10|120) + (20|0) = (30|120)
Gegner: (30|120) - (8|0) = (22|120)

Die Positioin ist nun also:
Schuss: (30|120) Minimum: (27|120) Maximum: (33|120)
Gegner: (27|120) Minimum: (22|120) Maximum: (32|120)

Die Vereinfachte Abfrage von nur X3 + X4 und Y3 + Y4 würde ergeben, das der Gegner nicht getroffen wird, da keiner im anderen liegt. Nimmt man X1 + X2 und Y1+Y2 hinzu, wäre dies jedoch schon der Fall. Gerade bei sehr kleinen Gegnern ist dies also ein großes Problemfeld...
Daher denke ich muss ich diese Abfrage leider so lassen. Denn sollten Schuss und Gegner zufälligerweise gleich groß sein und sie der Gegnerspeed und Schussspeed auf die Gegner- bzw. Schussgröße addieren, wird es, je größer der dadurch erhaltene Wert ist, unwahrscheinlicher das ein Schuss beim vorbeifliegen trifft...

@Zum Call-Management:

Dadurch ist der Abstand zwischen zwei Überprüfungen eines Schusses/Gegners sehr lange.
Das stimmt so eben nicht. Darum geht es ja gerade beim Call-Management ;). Dadurch das die Schussbewegung in der gleichen "Call-Reihe" wie die Kollisionsabfrage steht, wird für jede Position die der Schuss hat einmal überprüft ob er trifft. Es geht also ganz nach dem Verfahren:

Schuss X + Schussspeed
Gegner X - Gegnerspeed
Kontrolle ob getroffen wurde
Schuss X + Schussspeed
Gegner X - Gegnerspeed
Kontrolle ob getroffen wurde
...
Dadurch hat man (außer bei den genannten Extremwerten) eine 100% Trefferquote.

Marian
30.10.2006, 14:57
ich weiß nicht genau, wie das geht... ich glaube, man muss irgendwie halt diese oldharmony.dll oder harmony.dll oder sowas mit in den spiel-ordner packen. frag mal bitte irgendwen, der sich auskennt, ich will das auch spielen. D:

...//edit:

mah, hat sich erledigt, ich habs selbst gebacken bekommen. jetzt mal ne bewertung.

junge, junge. das schafft mein rechner nicht gut. ich hab glaube ich sonen amd athlon 1,8 ghz-prozessor, 512mb arbeitsspeicher und ne gforce 6800 als grafikkarte. frag mich nichts näheres, ich habe keine ahnung von hardware.
nunja. da scheinen nen menge parallele prozesse am laufen zu sein, so schlimm ist das ja noch nichtmal mit meinem möchtegern-3d-shooter gewesen. Oo
ansonsten ganz nett, du könntest grafisch noch was machen, aber das spielen geht klar so, solang es nicht ruckelt (was bei mir allerdings fast permanent der fall ist. :S ).

wtf? nur 4 parallele prozesse lese ich da? wieviele schleifen und sonstiges zeug hast du benutzt? oder liegt das am keypatch?
ich hab von sowas ja eh keine ahnung. :/

.Kerby
30.10.2006, 16:08
also ruckelfrei lief es bei (4x 0,0) bei denn anderen ruckelte es leicht.

und so gefirhl mir das spiel ganz gut maus unterstützung funzte perfekt.
nur gefallen mir die grafiken der raumschiffe nicht bzw. des Weltraum schrott.


also von meiner seite aus dickes lob ein sehr schönes spiel( Beta,Demo was auch immer ^^ )


mfg .Kerby

Phönix Tear
30.10.2006, 16:19
Nya, Schleifen hab ich ein paar. Die allerdings nur bei der Kollisionsabfrage, da dort immer fast gleicher Code durchlaufen wird. Die wollte ich sowieso nochmal überarbeiten. Die Überarbeitung wird allerdings nichts an der Performance verbessern, alles lediglich übersichtlicher gestalten (via Variablen Nummern).

@.Kerby:
Wie gesagt, ich wollte danach noch einen Graphiker suchen. Für die Beta hätte ich da auch einfach bunte Klötze hinsetzen können (hab ich auch, wenn ihr einfach mal die "Held Schiff ID" oder die "Gegner ID" (nachdem dieser gespawnt ist) auf 0 setzt ;)

Also -> Graphik wird verbessert

CapSeb
30.10.2006, 18:55
Ich glaub es ist 100% möglich ohne Fehler mit der Hälfte der Positionsabfragen. Gewagte These...
Erstmal grundlegende Fragen, von denen ich ausgehe:
- Kann sich ein Schuss nur waagerecht bewegen?
- Hat das eigene Raumschiffe Move-Picture-Strecken (Startkoordinate-Endkoordinate) ohne zwischenzeitliche Koordinaten (schnellere Bewegung --> längere Strecken)?
- Kann sich ein Raumschiff nur auf Move-Picture-Strecken bewegen?


Wenn wir davon ausgehen, würde ich Folgendes vorschlagen:

http://www.directupload.net/images/061030/temp/sMeTlVTA.png (http://www.directupload.net/file/d/866/sMeTlVTA_png.htm)

Der erste Teil des Bildes zeigt das Projektil von links kommend, dass mit dem in einer Kurve nach oben fliegenden Gegner kollidiert. Hierbei ist aber die Geschwindigkeit so groß, dass sie sich bei der Berechnung nicht berühren würden. Daher muss man gucken, wo der Gegner war (y-Achse) als er die x-Achse des Schusses durchquerte. Die Berechnung dazu steht im zweiten Teil des Bildes.
Wenn der y-Abstand zwischen Gegner und Schuss größer als die y-Geschwindigkeit des Gegners ist, können sie sich nicht gekreuzt haben (größer im Sinne von weiter von Null entfernt und beide positiv oder beide negativ).

Hat man einen möglichen x-Wert des Gegners gefunden, muss man gucken ob dieser zwischen den beiden Schuss-x-Werten liegt (letzte und vorletzte Position). Damit steht dann fest, ob er die Bahn gekreuzt hat oder nicht.

Man muss noch beachten, dass bei [y-Speed = 0] nicht gerechnet werden kann (siehe Abbildung). Hier muss man nur den x-Wert überprüfen.

Da der Gegner kein Punkt ist, muss es für die maximal und minimal Werte berechnet werden. Hier sind dann nur die Bedingungen X3, X4, Y3 und Y4 nötig.
Jetzt bin ich mal gespannt, ob mir jemand ein Beispiel liefern kann bei dem das nicht funktioniert...

Phönix Tear
30.10.2006, 19:40
Hmm, ich muss zugeben das ich die Rechnung nicht ganz verstanden habe... Warum ist (XSpeed * h) / YSpeed = b?
Aber auch egal. Ich denke da es wichtiger ist einen schnellen Spielfluss zu gewärleisten, werde ich den Gegnern einfach die Möglichkeit nehmen sich in Y-Richtung zu bewegen und dadurch erreichen das ich lediglich noch abfragen muss, wann ein Schuss Hinter dem X-Minimum des Gegners ist und dabei zwischen Y-Mini- und Maximum liegt... Für Y bräuchte ich dann wirklich nur Y3 und Y4, egal wie man es sieht, da es nicht soo wichtig ist das jeder Streifschuss funktioniert. Dann werde ich einfach die Y-Schussgröße auf 1 setzen, wodurch die wahrscheinlichkeit sehr hoch ist das man trifft...
Werde mal versuchen wie sich das auf die Performance auswirkt...

Phönix Tear
05.11.2006, 13:31
Ich hab mir mal nen Doppelpost erlaubt um das ganze wieder aktuell zu machen ^^°
So, ich hab jetzt noch ein paar Änderungen gemacht, die Kollisionsabfrage ein kleines bisschen angepasst (jetzt zwar ungenauer aber weniger Ressourcen fressend), die Gegnerschussabfrage überarbeitet, etc. Jetzt läuft es mit einigen kurzen Rucklern selbst auf Doppelter Geschwindigkeit. Mit doppelter Helden- und normaler Gegneranzeigerate läuft es sogar absolut ruckelfrei.
Für die Statistiker unter euch kommt am Ende jetzt auch noch eine kleine Nachricht wie viel ihr geschossen habt, wie viel ihr getroffen habt, etc...

Also, bitte nochmal testen und posten wie es nun funktioniert (Standardeinstellung ist nun doppelte Helden- und normale Gegneranzeige).

Hier der Download-Link:
*klick mich* (http://rapidshare.com/files/2086555/Space_Wars.rar.html) (468 KB)

CapSeb
05.11.2006, 20:42
Läuft bei mir wunderbar auf 1x0,0 bei beidem mit 55 Frames. Das heißt zwar, dass von der 60-Frames-Makergrenze fünf fehlen, aber es läuft...

Bin ich bekloppt, oder wurde das Festhalten der Feuertaste neu eingebaut? Jetzt kann man ja Dauerfeuer raushauen! Find ich echt spaßig. Nach zweimal spielen natürlich langweilig... Die Vollversion wird doch sicherlich mit sehr, sehr , SEHR viel Abwechslung, Ideen und Action auftrumpfen!?
Dann wird das nämlich ein Screenfun-Anwärter.
Dran bleiben!

EDIT: Ganz vergessen was zu der Kollision zu sagen.
Leider besteht das Problem immer noch durch Gegner und Schüsse mit einer schnellen Bewegung durchfliegen zu können. Das muss auf jeden Fall behoben werden.

Phönix Tear
06.11.2006, 14:08
Gut, das mit den Gegnern ließe sich machen. Allerdings habe ich in letzter Zeit mehr Wert darauf gelegt die Performance zu verbessern, daher von weiteren Abfragen abgesehen. Und jetzt mal ehrlich: Wer ist denn böse wenn er unfairer weise nicht stirbt? ^^ Aber gut, wenn du meinst das das wichtig ist, muss ich da nochmal schauen. (Wird allerdings nicht ganz so einfach, da man es durchaus schaffen kann in einem Rechendurchgang vom oberen linken Bildschirmrand zum unteren rechten zu springen. Daher werde ich wohl eher versuchen müssen, den Bereich ein bisschen zu erweitern...)

Das man jetzt Dauerfeuer machen kann liegt an der Schussgeschwindigkeit. Die hab ich etwa verdoppelt. Da nun die Gegnerabfrage stark vereinfacht wurde (also nur noch überprüft wird ob ein Schuss hinter dem Gegner ist) war das recht einfach zu machen...

Zum Thema Abwechslung:
Ideen bitte T__T

CapSeb
06.11.2006, 21:28
Ideen...
hm. http://www.multimediaxis.de/images/smilies/old/1/gruebel.gif
Was brauchtest du nochmal? Ach ja, Ideen!

Auf jeden Fall sehr viel verschiedene Gegner, jeder ein klein wenig anders. Zur Maximierung kannst du ja 5 Merkmale machen, die in verschiedenen Kombinationen auftreten. Oder so ähnlich.
Außerdem müsste jedes Level eine besondere Regel/Situation haben, damit jedes Level wie ein neues Spiel ist. Weil dreimal das gleich ist echt sau öde.
Dann für jedes Level ein Geheimnis. Sozusagen ein "Geheimgang" oder ein anderes Ende. In "Lylat Wars" (Starfox) ist das so umgesetzt. Dann überlegt man sich nämlich an jedem Levelende, wo denn da jetzt verflixt nochmal das Geheimnis versteckt war, sodass man die Level (plural... :D ) erneut spielt.
Ein unterschiedliche Umgebung - bei jedem Level - wäre auch was ganz Sinnvolles.

...ein paar schnell überlegte Idee des ersten Eindrucks.