Total War 2D

Kommentare anzeigen Worklog abonnieren

Worklogs Total War 2D

VIDEO!

Donnerstag, 11. November 2010 von CrowSmith
Hallo Community^^

Es ist nicht viel, aber ich will euch mal einen kleinen Einblick gewähren.
Darum habe ich mal rudimentär ein Video zusammengeschreddert, welches euch die verschiedenen Testphasen zeigt.

Das Menü habt ihr ja nun schon gesehen, und das mit dem DrawLevel ebenfalls, daher kommt in diesem kleinen Video wirklich nur der ganze Kram zum Panzer vor.

Ich hoffe es gefällt^^

Hier der Link zum Video: Video in meinem Youtube-Profil

Test_01.bb = Rudimentäre Bewegung der Panzergrafik (Links/Rechts/Oben/Unten)
Test_02.bb = Einbau Winkelfunktion
Test_03.bb = Einbau Bilddrehung Rumpf
Test_04.bb = Aufsetzen des Turms ohne Drehung
Test_05.bb = Turmdrehung eingebaut
Test_06.bb = Testgrafik für Cursor/Fadenkreuz

Was folgt:

Test_07.bb = Schießen (Kanone/MG)
Test_08.bb = Kollisionstest Wand/Spieler
Test_09.bb = Kollisionstest Wand/Schüsse
Test_10.bb = kollisionstest Spieler/Schüsse
Test_11.bb = Einbau eines Radars (Norden, Osten, Süden, Westen, mit Gradanzeige der aktuellen Richtung)
Test_12.bb = VERSUCH!!! Minimap
Test_13.bb = HUD
Test_14.bb = Speichern/Laden
Test_15.bb = Gewinnen/Verlieren
Test_16.bb = Upgrades (Objekte einsammeln, also wieder Kollision und dessen Folgen)
Test_17.bb = Konstruktion Kampange (Hier fehlen nich Gegner usw!)
Test_18.bb = Erste VERSUCHE!!! Multyplayer (Erste Gehversuche mit SimpleUDP, usw)

Weiter weiss ich noch nicht...

Ich hoffe ich kriege das Alles hin^^

MfG, der Fleisch

Turmdrehung erledigt!

Montag, 8. November 2010 von CrowSmith
Hallo.

Also das Problem mit dem Herausfinden des Winkels, um den ich den Panzerturm drehe, ist gelöst!

Mit tatkräftiger unterstützung von hectic, Xeres und ein paar Anderen habe ich es hinbekommen, den Turm ordentlich zu drehen.

Hier der Code:
Code: [AUSKLAPPEN]

 ;Bewegung des Spielers (Turm)
 Turmwinkel=(ATan2(MouseX3D-PositionX,MouseY3D-PositionY))-90


Meine offensichtlichen Fehler waren:
1.) Ich habe total vergessen dass Draw3D2 ein völlig anderes Koordinatensystem verwendet, was die seltsamen fehlerhaften Winkel erklärt, die ich mit MouseX()/MouseY() herausbekommen habe!
2.) Ich habe es über den ArcusCosinus versucht anstatt (einfacher) über den Atan2!

Naja das Problem ist gelöst also auf zum nächsten wir wollen ja nicht müde werden^^

Danke an alle Hilfeleister, mfG, der Fleisch

Ein paar Bildchen...

Samstag, 6. November 2010 von CrowSmith
Und nochmals Hallo!

Neuer Eintrag weil BILDER Very Happy

Damit ihr auch mal seht was ich da fabreziere Razz

Bild 1: Hauptmenü
Bild 2: Singleplayermenü
Bild 3: Multiplayermenü
Bild 4: Hilfemneü
Bild 5: Level (laden+zeichnen)

In den Menüs: Bei einem Mouseover erscheint im jeweiligen Button ein Panzer am linken Ende!

Hier die Bilder:

user posted image
user posted image
user posted image
user posted image
user posted image

Ok das sind erstmal alle Bilder, die Bilder vom Panzer und den verschiedenen teststufen einzustellen wäre nicht logisch, weil sich die Bilder kaum unterscheiden.

Aber hier sind kruz und knackig die Entwicklungsstufen der Panzerbewegung:

Test_01.bb = Rudimentäre Bewegung der Grafik nach oben unten links und rechts
Test_02.bb = Einbau der Winkelfunktion
Test_03.bb = Einbau der Bildrotation (Via Draw3D2)
Test_04.bb = Turm wird auf Rumpf gesetzt, MaskImage3D wird benutzt
Test_05.bb = NOCH IN ARBEIT!!! Turmdrehung wird eingebaut

So das wars schon^^ mfG, der Fleisch

Wieder ein kleiner Stein auf meinem Weg

Samstag, 6. November 2010 von CrowSmith
Hallo Community!

Ich habe jetzt Draw3D benutzt, um eine korrekte Echtzeitdrehung des Rumpfes zu erzeugen, die dann auch wunderbar funktioniert^^

Ich habe den Turm auf den Panzer gesetzt und die Koordinaten so manipuliert, dass er genau dort sitzt, wo er sitzen soll, und sich auch korrekt dreht!

Bei der Drehung des Turms habe ich allerdings ein Problem!

Hier ist der Code zur Berechnung des Winkels, um den sich der Turm drehen soll:

Code: [AUSKLAPPEN]

 If PositionX>=MouseX() ;Bewegung des Spielers (Turm)
  a=PositionX-MouseX()
 Else
  a=MouseX()-PositionX
 EndIf
 
 If PositionY>=MouseY()
  b=PositionY-MouseY()
 Else
  b=MouseY()-PositionY
 EndIf

 c=Sqr((a^2)+(b^2))

 alpha=ACos(-((a^2)-(b^2)-(c^2)/(2*(b*c))))

 Turmwinkel=alpha ; Für eine direkte/schnelle Turmdrehung


Aus irgendeinem Grund bekomme ich für alpha immer einen Wert von -21xxxxx oder sowas raus, was ich nicht verstehe :S

Ich habe die Berechnung anhand der Acos-Funktion zusammengebastelt. Diese dient dazu, den Winkel Alpha in einem Dreieck zu berechnen, wenn die Seiten a und b gegeben sind.

a und b werden einfach abgefragt, c wird dann aus a und b berechnet, und dann kommt die Acos-Formel, in die ich a, b und c einsetze.

Aus irgendeinem Grund funktioniert das ganze allerdings noch nicht und ich versuche gerade den Fehler zu finden...

Wenn irgendwer eine Idee haben sollte, das Problem zu lösen, wäre ich nicht abgeneigt diesen Vorschlag dankend anzunehmen^^

Ausserdem möchte ich an der Stelle hectic für seine Geduld mit mir danken! Very Happy Er hat mir einige Fragen zu Draw3D beantwortet und mir geholfen.

Ausserdem an dieser Stelle ein fettes Dankeschön an Kernel, den alten Harlunken Wink
Immer für ne kleine Hilfe zu haben und immer nen Witz auf den Lippen xD

Naja ich werde dann mal weitermachen und versuchen, den Turm korrekt zu bewegen!

Danach steht das Erstellen der Schüsse an und die korrekte Berechnung der Flugbahn, dann folgen Kollision Schuss/Wand und Kollision Spieler/Wand.

Dann sollte das grundlegende Spielgerüst fertig sein, und ich kombiniere die LoadLevel,DrawLevel und DrawPlayer Funktion, um zu prüfen, ob alles einwandfrei funktioniert.

Sollte das der Fall sein kann es weitergehen^^

Na gut, bis denne, mfG der Fleisch

Rumpfbewegung vollständig!

Donnerstag, 4. November 2010 von CrowSmith
Hallo Blitzler^^

Aktueller Stand des Projekts Total War 2D:


Done:
Arrow Level erstellen (.txt Datei)
Arrow Level einlesen
Arrow Level zeichnen
Arrow Rumpf des Panzers bewegen (Bewegung mit Winkeln und Bilddrehung)
Arrow Hauptmenü mit Mouseover-Effekt bei den Buttons

To Do:
Arrow Weitere Menüs (Singleplayer, Multiplayer, usw)
Arrow Turm auf den Panzer zeichnen
Arrow Turm steuern
Arrow Schießen mit den drei Waffen
Arrow Kollisionssystem

(Noch) in weiter Ferne:
Arrow Multiplayer (Lan und Internet, via SimpleUDP2)

So das wars erstmal wieder, ich programmiere fleissig weiter und mache bald meinen nächsten Logeintrag^^ Bis dann, der Fleisch

Drehung und Bewegung des Panzers (Ansätze)

Sonntag, 31. Oktober 2010 von CrowSmith
Hallo Community,

ich habe hier ein paar Dinge aus meinen Mitschriften zusammengekramt, die ich gern als Worlklog-Eintrag präsentieren würde:

Initialisiert wird der Startwinkel des Spielers im SP-Modus mit 90°.

Im MP-Modus ist es vom Team abhängig, daher verwende ich eine select-Anweisung.

Das Team wird vorher in der MP-Lobby festgelegt.

Jenachdem, welchem Team man angehört, ändern sich Rumpf- und Turmwinkel.

Team 1: Unterer Bildschrimrand, Winkel = 90°
Team 2: Oberer Bildschrimrand, Winkel = 270°
Team 3: Rechter Bildschrimrand, Winkel = 180°
Team 4: Linker Bildschrimrand, Winkel = 0° bzw 360°

Bewegung des Rumpfes:

Code: [AUSKLAPPEN]

If KeyDown(200) Or KeyDown(17) ;Vorwärts
    PositionX=PositionX+Cos(Rumpfwinkel)*GeschwRumpfVorw
    PositionY=PositionY-Sin(Rumpfwinkel)*GeschwRumpfVorw
EndIf

If KeyDown(205) Or KeyDown(32) ;Rechts drehen
    Rumpfwinkel=Rumpfwinkel+GeschwDrehenRumpf
EndIf

If KeyDown(203) Or KeyDown(30) ;Links drehen
    Rumpfwinkel=Rumpfwinkel-GeschwDrehenRumpf
EndIf

If KeyDown(208) Or KeyDown(31) ;Rückwärts
    PositionX=PositionX+Cos(Rumpfwinkel)*GeschwRumpfRueck
    PositionY=PositionY-Sin(Rumpfwinkel)*GeschwRUmpfRueck
EndIf


Ausserdem:

Code: [AUSKLAPPEN]

If Rumpfwinkel>=360
    Rumpfwinkel=0
ElseIf Rumpfwinkel<=0
    Rumpfwinkel=360
EndIf


Turmbewegung:

Code: [AUSKLAPPEN]

If PositionX>=MouseX() ;Bewegung des Spielers (Turm)
    a=PositionX-MouseX()
Else
    a=MouseX()-PositionX
EndIf
 
If PositionY>=MouseY()
    b=PositionY-MouseY()
Else
    b=MouseY()-PositionY
EndIf

c=Sqr((a^2)+(b^2))

alpha=ACos(-((a^2)-(b^2)-(c^2)/(2bc))

Turmwinkel=alpha ; Für eine direkte/schnelle Turmdrehung


Für eine realistische/langsame Turmdrehung:

Code: [AUSKLAPPEN]

.
.
.
If Turmwinkel<=alpha
    Turmwinkel=Turmwinkel+GeschwTurmDrehung
ElseIf Turmwinkel>=alpha
    Turmwinkel=Turmwinkel-GeschwTurmDrehung
EndIf


Hier auch wieder:

Code: [AUSKLAPPEN]

If Turmwinkel>=360
    Turmwinkel=0
ElseIf Turmwinkel<=0
    Turmwinkel=360
EndIf





Das Schießen:

Beim Berechnen der Position des Schusses habe ich noch ein Problem (Vielleicht auch nur ein Flüchtigkeitsfehler :S) denn rein vom Denken her berechne ich die Position des Schusses genauso, wie die Bewegung des Rumpfes... Das Problem dabei ist, dass ich mich ja auch bewegen kann, während ich schieße, und dann wird die Flugbahn des Schusses durch meine Bewegung verfälscht.

Dieses Problem löse ich aber einfach mit einem Feld als Zwischenspeicher!

Soweit sogut, jetz kann sich mein Panzer also bewegen und den Turm drehen, bald auchnoch schießen, ohne Flugbahnverfälschung.

Außerdem funktioniert der Level-Loader und der Lever-Drawer, somit sitzt mein bewegungsfähiger Panzer also in einem fertigen Level.

Arrow Als Nächstes:

Kollisionssystem (Wand-Spieler/Schuss-Feind/Schuss-Spieler/Feind-Wand/usw usw usw)
und
Upgradesystem (Einsammelbare Objekte, Punkte und Stufen der Panzer)
und
(DAUERT NOCH, da ich mich damit erst noch beschäftigen muss!) Multyplayer.

Ich hoffe dass ich bald ein wenig mehr vorran komme...

Bis dahin, das wars für heute mit dem Worklog

Startschuss für meinen 2D Panzershooter

Samstag, 30. Oktober 2010 von CrowSmith
Hallo Leute,

war lange nicht aktiv im Forum, aber habe fleissig weitergeproggt und ich wollte mal wieder was machen hier, also erstelle ich hiermit den Worklog für mein Spiel "Total War 2D".

Bei diesem Spiel geht es darum, einen Panzer erfolgreich durch ein Level zu manövrieren, und dabei Gegner (oder im Mehrspielermodus Gegenspieler) zu bekämpfen. Im Einzelspielermodus bewegt sich das Level nach unten, und man muss kontinuierlich in Bewegung bleiben.

Das Spiel ist grafisch ungefähr so konzipiert wie das berühmte Spiel "N" oder "N+", also ein weißer Hintergrund und Hindernisse in verschiedenen Graustufen oder in schwarz.

Feinde und Objekte/Upgrades/usw für den Einzelspielermodus muss ich noch entwerfen.

Die Panzer für den Spieler und die anderen Spieler im Mehrspielermodus habe ich bereits fertig entworfen und als Grafik realisiert.

Es gibt eine Art Stufensystem für den Einzel- und Mehrspielermodus.

Jede Partie wird mit der Stufe 1 begonnen. um aufzusteigen, muss man Ziele erfüllen, Objekte einsammeln und Gegner vernichten. Beim Aufstieg erhält der Spieler entweder einen erweiterten Rumpf oder einen erweiterten TUrm, mit neuen Waffen.

Waffen des Spielers sind:

-Kanone (Primärwaffe)
-Maschinengewehr (Sekundärwaffe)
-Rakete (Sekundärwaffe 2)

So wird mit einem Levelaufstieg zum Beispiel aus der Kanone eine duale Kanone oder aus dem MG eine Gatling, aus den Raketen werden Lenkraketen und irgendwann intelligente Lenkraketen die Hindernissen ausweichen können.

Die Schüsse sämtlicher Waffen muss ich noch grafisch erstellen, ich überlege aber diese einfach als Punkt (MG), Ellipse (Kanone) und Strich (Rakete) zu zeichnen (Mit Plot usw).

Die Steuerung des Spiels:

Arrow Rumpf vorwärs bewegen : W, Pfeil aufwärts
Arrow Rumpf rückwärts bewegen : S, Pfeil abwärts
Arrow Rumpf mit dem Uhrzeigersinn drehen : D, Pfeil rechts
Arrow Rumpf gegen dem Uhrzeigersinn drehen : A, Pfeil links

Arrow Schießen Primärwaffe (Kanone) : Linke Maustaste (Halten erzeugt Dauerfeuer)
Arrow Schießen Sekundärwaffe (Maschinengewehr) : Rechte Maustaste (Halten erzeugt Dauerfeuer)
Arrow Schießen Sekundärwaffe 2 (Raketenwerfer) : Mittlere Maustaste (Mausrad) (Hier ist kein Dauerfeuer möglich

Arrow Der Turm wird mittels Maus gesteuert, es gibt einen Cursor, der eine Art Fadenkreuz dastellt. Der Turm wird immer in Richtung dieses Cursors ausgerichtet.

Ich überlege ob es auch eine Art Standalone-Turm geben sollte, den der Spieler beispielsweise nach dem einsammeln eines Objekts platzieren kann, und der dann auf Feinde schießt.

Ausserdem überlege ich ob es Mienen geben sollte.

Falls diese beiden Dinge noch eingeführt werden, wird es sehr wahrscheinlich so sein, dass ich sie auch beide auf die mittlere Maustaste lege, wobei man dann mit dem Mausrad die Minen, den Turm oder die Raketen auswählen kann. Wenn man keine Munition für die Raketen oder keinen Turm verfügbar hat, werden diese beim durchscrollen der Waffen die auf der mittleren Maustaste liegen nicht aufgeführt.

Das GUI des Spiels ist wie folgt gestaltet:

Arrow Minimap (Freund/Feind Erkennung, Echtzeitbewegung, Grad- und Richtungsanzeige)
Arrow Statusanzeige (Gesundheit)
Arrow Geschwindigkeitsanzeige (Eventuell lasse ich diese auch weg)
Arrow Munition (Prim./Sek./Sek2)

Für den Mehrspielermodus sehe ich eine Art Team-Display vor, ähnlich wie bei Battlefield oder anderen ähnlichen Spielen. In dieser Übersicht erkennt man jeden einzelnen Spieler eines Teams und dessen Tode/Abschüsse/Punkte/Ping/Joinzeitpunkt/Name/Zeit auf dem Server/Client oder Host und man erkennt die Punkte des Teams.

Das Menü des Spiels wird mit einem Video im Hintergrund und einer einfachen Buttonleiste in der Mitte des Bildschirmes ausgestattet. Das Video wird eine Spielszene zeigen.

Das Spiel werde ich im Fenstermodus mit 800x600y programmieren.

Ich hoffe ich konnte euch schonmal einen Einblick in das Spiel geben, ich arbeite momentan fieberhaft an vielen Dingen, aber ich gebe mir Mühe mich auf Total War 2D zu konzentrieren.

In einem der nächsten Logeinträge werde ich dann einige Grafiken vorstellen und euch nach eurer Meinung fragen.

Wer Interesse an diesem Projekt hat, und mitarbeiten / mithelfen möchte, kann sich gerne jeder Zeit bei mir melden.