Triologys Machenschaften

Kommentare anzeigen Worklog abonnieren

Worklogs Triologys Machenschaften

GUI und erster Editor

Mittwoch, 27. Juni 2012 von Triology
Hey,

hab mich erst nicht getraut was zu schreiben, weil ich in soooooooo einer langen Zeit soooooooo wenig geschafft habe. Aber egal, die GUI ist um einiges Weiter gekommen.
Fertig bzw. funktionsfähig sind jetzt:
Buttons
TextFelder
ComboBoxen
CheckBoxen
Labels
Formen

Eine Form ist hier eine Überordnung, in der Objekte enthalten sein können. Das heißt, wenn ich ein Button der Form mit der Id 1 zuteile und diese Form unsichtbar mache, ist auch der Button unsichtbar. Man kann belieb viele Objekte in eine Form reinpacken.
Das ganze sieht nicht so super toll aus, aber man sollte erkennen können, was was ist.
user posted image
keine Ahnung, warum die schwarzen Labels und das schwarze Rechteck nicht zusehen ist. Kack Cam.

Ansonsten hier der Download für die GUI:
https://www.blitzforum.de/upload/file.php?id=11770

Wenn ihr sie benutzen woll, einfach entpacken, Inhalt in euren Ordner mit eurem Code.
Code: [AUSKLAPPEN]

Include "gui.bb"

und das wars.
In der Dokumentation sind alle Befehle gelistet und soweit ich weiß, funktionieren sie auch alle.

Als nächstes plane ich, für Buttons die Types TPic und TAnimation, die ich für Objekte auf Maps und andere Spielelemente zu verwenden plane einzubinden, um halt BilderButtons und animierte Buttons möglich zu machen.
Was mir ansonsten nch nicht so gefällt, ist, dass Textfelder keine Grenze haben, das heißt man kann über ihren Rand hinweg schreiben.
Außerdem habe ich mir Gedanken über TextAreas gemacht, muss aber leider sagen, dass ich da gedanklich und von der programmierung her etwas... eingeschüchtert bin.

Der MapEditor funktioniert auch schon super. Außer das er beim Abspeichern der Daten in .map und .mobj Dateien mit einer "Stream does not exist"-Meldung kommt, aber das bekomme ich bestimmt auch noch hin.
Und noch ein Fehler beim Erstellen der Übergänge von Map zu Map.

Soviel für heute.

MfG,
Triology

Ein Button erblickt die Welt...

Donnerstag, 24. Mai 2012 von Triology
Hey,

wird mal wieder Zeit, obwohl nicht wirklich viel passiert ist. Hab ein bisschen mit VisualBasic rumgespielt, aber ich muss sagen, dass mir das nicht wirklich gefällt. Vorallem die Ereignis-Orientierung hat mich gestört. Auch die von einem Freund versprochene Objektorientierung war nicht wirklich das, womit ich gerechnet hätte, kann aber sein, dass ich mich da irre und irgendwas übersehen habe. Nunja, back to BB. Hab in ein paar Wochen Geburtstag und dann müsste ich endlich das Geld für die Vollversion zusammenhaben. Fragt sich nur für welche. BB2D wird ja nicht mehr verkauft, BB+, hab ich nicht sonderlich viel erfahrung mit. Bei meiner runtime.dll kommt ne Trojaner Meldung... BB3D ist an sich ja schon ne coole Sache, aber lohnt sich das wirklich. BlitzMax wär wieder was ganz neues, aber wäre wahrscheinlich am sinvollsten. Obwohl diese Bismuth Geschichte sich auch gut anhört und wenn ich das richtig in Erinnerung habe, soll das ganze auch noch kostenlos sein... mal abwarten!

Meine Projekte sind keinen Millimeter vorangekommen, yeah! Aber dafür hab ich mich entschieden für Sachen wie das RPG eine Engine zu basteln, eine möglichst umfassende Engine. Bisher fertig sind das Map-System, bis auf einem komischen Bug bei der Kollision mit Objekten. Hier mal der Kollisions-Code, vielleicht wisst ihr ja weiter: (das Problem ist, dass die Kollision von unten nicht richtig funktioniert, man rutscht immer zu einer Seite ab oder kann über das Objekt drüber laufen)
Code: [AUSKLAPPEN]

Function tp_SelectObjectToCollide()

   ;Alle Objekte durchgehen
   For d.TObject = Each TObject
      ;abfragen, ob die Map des Objektes aktiv ist
      If active_map = d\Map Then
         ;die komplette Spieler-Breite durchgehen
         For i = 0 To spieler_width
            ;abfragen, ob der Spieler sich auf der richtigen Seite befindet
            If spieler_x+i > d\X And spieler_x+i < d\X+d\Width
               ;Spieler-Höhe durchgehen
               For o = 0 To spieler_height
                  ;abfragen, ob der Spieler sich auf der richtigen Seite befindet
                  If spieler_y+o > d\Y Then
                     ;ausschließen, ob er sich auf der falschen Seite befindet
                     If Not spieler_y+o > d\Y+d\Heigth Then
                        ;prüfen, ob die Seiten kollidieren
                        If Not spieler_y+spieler_height > d\Y+5 Then
                           spieler_y = spieler_y - 1
                        EndIf
                     EndIf   
                  EndIf   
                  If spieler_y+o < d\Y+d\Heigth-10 Then
                     If Not spieler_y+o < d\Y Then
                        If Not spieler_y < d\Y Then
                           If Not spieler_x-spieler_width < d\X Then
                              If Not spieler_x > d\X+d\Width Then
                                 If Not spieler_x-spieler_width < d\X Then
                                    spieler_y = spieler_y + 1
                                 EndIf
                              EndIf
                           EndIf
                        EndIf
                     EndIf   
                  EndIf   
               Nextssssssss
            EndIf
         Next
         For i = 0 To spieler_height
            If spieler_y+i > d\Y And spieler_y+i < d\Y+d\Heigth Then
               For o = 0 To spieler_width
                  If spieler_x+o > d\X Then
                     If Not spieler_x+o > d\X+d\Width Then
                        If Not spieler_x+spieler_width > d\X+d\Width Then
                           If Not spieler_y > d\Y+d\Heigth Then
                              spieler_x = spieler_x - 1
                           EndIf
                        EndIf
                     EndIf
                  EndIf
                  If spieler_x+o < d\X+d\Width Then
                     If Not spieler_x+o < d\X Then
                        If Not spieler_x < d\X Then
                           spieler_x = spieler_x + 1
                        EndIf
                     EndIf
                  EndIf
               Next
            EndIf
         Next
      EndIf
   Next
   
End Function


Dann hab ich eine Vereinfachung für so kurz auf dem Bildschirm auftauchende Texte geschrieben. Man hat relativ viele Möglichkeiten. Hab ich vor paar Wochen geschrieben und muss auf Grund eines doofen Fehlers nochmal überarbeitet werden.

Außerdem hab ich ein paar Vereinfachende Funktionen geschrieben (weil ich so faul bin), z.B. tp_UpdateMouse oder tp_SetFont, mit letzterem erspare ich mir nur das Schreiben von LoadFont Very Happy, obwohl ess auf Dauer und im Spielverlauf wahrscheinlich ein bisschen zu langsam ist, die Schriftart immer wenn sie gesetzt werden soll, neu zu laden.

Und gestern habe ich angefangen die Button-Befehle für die GUI zu schreiben. Hab ich dann heute fertig gemacht. Funktioniert soweit auch ganz gut. Es gibt nur noch ein paar Probleme mit den Farben und wenn man auf einen anderen Button drückt, und dann wieder den anderen Hovert wird dieser aktiviert.
Auch hier mal der Code, hab ein bisschen drin rumgewurschtelt, daher kann es sein, dass da alles ein bisschen durcheinander ist... ist aber nicht zu kompliziert gehalten. War mein letzter Versuch für heute, das richtig hinzubekommen.
Code: [AUSKLAPPEN]
Function tp_MouseOutOfClick(id)

   For a.TButton = Each TButton
      If id = a\Id Then
         If Not Maus_X > a\X And Maus_x < a\X + a\Width Then
            If Not Maus_y > a\Y And Maus_Y < a\Y + a\Height Then
               fail = 1
            EndIf
         EndIf
      EndIf
   Next
   If fail = 1 Then
      FlushMouse()
      Return True
   Else
      Return False
   EndIf

End Function


Function tp_ButtonClick(id)

   For a.TButton = Each TButton
      
      If a\Id = id Then
      
         If tp_MouseOutOfClick(id) = False Then   
            If a\Hovered = 1 Then
               If MouseHit(1) Then
                  Return True
               Else
                  Return False
               EndIf
            Else
               Return False
            EndIf
         EndIf
         
      EndIf
   Next

End Function



Screens lohnen sich nicht, da die Buttons nur Rects sind, hier aber mal die Dokumentation, die ich bisher dazu angefertigt habe:
Zitat:

tp_CreateButton(id,text,x,y,width,height,visible)
Erstellt einen neuen Button.
Parameter:
id: Erkennungszeichen des Buttons.
text: Der Text der im Button stehen soll.
x: die X-Koordinate, wo die linke obere Ecke des Buttons auf dem Bildschirm platziert werden soll.
y: die Y-Koordinate, wo die linke obere Ecke des Buttons auf dem Bildschirm platziert werden soll.
width: die Breite des Buttons.
height: die Höhe des Buttons.
visible: ob der Button sichtbar sein soll.

tp_SetButtonBgColors(id,R1,G1,B1,R2,G2,B2,R3,G3,B3)
Setzt die Hintergrund-Farben für den Button.
Parameter:
id: Erkennungszeichen eines erstellten Buttons.
R1,G1,B1: RGB-Werte für den Button im Normal-Zustand
R2,G2,B2: RGB-Werte für den Button, wenn man mit der Maus darüber fährt.
R3,G3,B3: RGB-Werte für den Button, wenn dieser Disabled ist

tp_SetButtonBorderColors(id,R1,G1,B1,R2,G2,B2,R3,G3,B3)
Setzt die Rand-Farben für den Button.
Parameter:
id: Erkennungszeichen eines erstellten Buttons.
R1,G1,B1: RGB-Werte für den Button im Normal-Zustand
R2,G2,B2: RGB-Werte für den Button, wenn man mit der Maus darüber fährt.
R3,G3,B3: RGB-Werte für den Button, wenn dieser Disabled ist

tp_UpdateButtonState()
Überprüft, ob die Maus über irgendeinem Button ist. In der Hauptschleife notwendig.

tp_DisableButton(id)
Deaktiviert den Button. Er ist aber immernoch sichtbar.
Parameter:
id: Erkennungszeichen eines erstellten Buttons.

tp_VisibleButton(id)
Macht einen Button unsichtbar. Er kann nicht mehr gedrückt werden.
Parameter:
id: Erkennungszeichen eines erstellten Buttons.

tp_DrawButtons()
Malt alle als sichtbar gekennzeichneten Buttons auf den Bildschirm.

tp_ChangeButtonText(id,text)
Ändert den in eeinem Button stehenden Text.
Parameter:
id: Erkennungszeichen eine erstellten Buttons.
text: Neuer Text, den der Button beinhalten soll.

tp_DeleteButton(id)
Löscht einen Button.
Parameter:
id: Erkennungszeichen eines erstellten Buttons.

tp_SetButtonTextColor(id,r,g,b)
Setzt die Schriftfarbe für den Button.
Parameter:
id: Erkennungszeichen eines erstellten Buttons.
r,g,b: RGB-Werte für den Text.

tp_ButtonClick(id)
Prüft, ob ein Button geklickt wurde.
Parameter:
id: Erkennungszeichen eines erstellten Buttons.



Schönen Abend noch.
MfG, Triology

Vorweg ne kleine Erklärung

Montag, 9. April 2012 von Triology
Hey,

ich möchte euch hier einfach mal alles vorstellen, was ich so programmiere. Meine anderen Worklogs hatten keinen wirklichen Sinn, da ich eh immer die Motivation für so ein einzelnes Projekt verlor. Das soll jetzt anders sein. Ich möchte versuchen durch diesen Worklog das Durchhaltevermögen aufzubringen, um meine momentan fünf Projekte (ich weiß, es ist unmöglich) fertigzustellen und würde mich über Unterstützung und Motivation freuen. Ich weiß, dass ich nicht mal annähernd so gut bin, wie der Großteil hier und würde mich daher über Tipps und Denkanstöße bzw. Erklärungen freuen. Da ich nur die Demo besitze, wird es auch keine Exe-Dateien geben, allerdings bin ich grad dabei mit meinem Multiplayer-Shooter meinen Vater zu überreden, mir eine Version von BlitzBasic zu kaufen. Läuft auch schon ganz gut.

Screenshots werden nachgereicht, da ich grade brav mit meinem Handy im Bett liege.

Projekt Nr. 1: Snake
Jaah, das Teil lebt noch, auch wenn seit dem letzten Worklogeintrag (gelöscht) nichts passiert ist.
Sobald man es öffnet, landet man im Menü, was ein Wunder. Im Einstellungsmenü kann man dann noch Pilze und Gegner (dazu werde ich später noch was sagen) an und aus schalten. Ebenso ist die Lautstärke der äußerst verbugten Musik, die ich mir als nächstes vornehmen werde, einstellbar.
Man kann bisher zwischen vier verschiedenen Schlangen auswählen, die aus mehreren 10*10 Pixel Bildchen zusammengesetzt sind.
Im Spiel selbst sind Früchte, Münzen und Pilze zu finden. Um an Punkte und so ins nächste Level zu kommen, muss man Früchte fressen. Ist man eine Frucht, verändert sich die Position der Frucht und des Pilzes, die Münze ist unabhängig. Wie erwartet stirbt man bei dem Versuch, einen Pilz zu essen und muss wieder von vorne anfangen. Beim Einsammeln einer Münze verändert sich nur ihre Position.
Wenn man zehn Punkte hat, gehts in Level 2. Jetzt wirds schon kniffliger. Denn, hast du die Gegner angeschaltet muss du höllisch aufpassen, dass er dir nicht den Schwanz abbeißt. Klingt lustig, ist es aber nicht, denn du musst dann wieder von vorne anfangen Sad. ab Level drei sind es dann zwei Gegner und bei Level 4 drei und bei 5 vier. Klingt logisch, wa Wink. Die Gegner haben eine professionelle Zufallsteuerung, sie bewegen sich fünf Felder und wechseln dann die Richtung, das kann bei mehreren schon ziemlich eng werden. Zum Glück gibt es aber noch die Konsole. Drück K, gib das Zauberwort ein, und alle Gegner verschwinden. Hierbei lautet das Zauberwort "Gegner aus"/"Gegner an". Hab ich eigentlich schon erwähnt, dass sich die Pilze pro Level auch vermehren? So hat man, wenn man beides anlässt am Ende fünf Pilze, vier Gegner, eine Frucht, eine Münze und eine irre lange Schlange, die man daran vorbeisteuern darf. Die Pilze kann man übrigens auch an und aus schalten, außerdem gibt es die Möglichkeit belibig viele davon zu spawnen.
Nach meinen Erfahrungen hat man ab Level 4 eh keine Chance mehr, allerdings hat ein Freund und Teampartner es mal bis Level 5 geschafft, wenn er da auch nicht lange durchgehalten hat.
Es ist möglich sich im Shop mit Extra-Leben und einem Item, dass es einem ermöglicht einen Pilz zu essen, auszustatten. Ein Messer zum Töten der Monster ist schon ewig geplant, nur fehlte die Motivation, es einzubauen.
Die geplanten verschiedenen Spielmodi hab ich mir aus dem Kopf gekloppt. Ich entbugge das ganze, füge das Messer hinzu und schließe das Projekt damit ab. Die Motivation für Snake schwebt knapp überm Erdkern.

Projekt Nr.2: RPG-Stranded-Pokémon-Altes GBA-Spiel dessen Name ich vergessen hab

Rein theoretisch gesehen ist es mein Haupt und größtes Projekt. Ein schon erwähnter Freund hilft mir mit Grafiken, obwohl ich schon sehr viel mehr gemacht hab als er. Um genau zusein hat er eine halbe Animation gemacht, tja, er muss halt Battlefield zocken Very Happy. Trotzdem ein Fettes Danke, falls er das jemals lesen sollte.

Der Titel sagt denke ich mal garnichts. Also:
Du bist auf einer Insel und willst da weg, dafür musst du Quests erfüllen und am Ende ein Boot bauen (Hurra).
Die Insel ist aus Maps (TMap) aufgebaut, welche man durch Übergänge (TExit) wechseln kann. Auf der Map sind Objekte (TObject) verteilt mit denen man kollidieren kann. Die Map besteht aus drei Bildern: Map_Bg(Hintergrund), Map_Struct(Struktur, z.B. andere Untergründe, Wasser, Wege), Map_Obj(Objekte). Und es gibt keinen Editor, da ich weder einige GUI-Funktionen hab, noch ein funktionierendes BlitzPlus, das die runtime.dll bei mir wegen einer Trojaner-Meldung nicht auszuführen ist. Die GUI habe ich schon ewig in Planung, aber drangemacht hab ich mich noch nicht.
Aber weiter im Text.
Es gibt noch keine NPCs, die auf den Maps rumlaufen, dafür aber zwei Monster, eins schon ein bisschen animiert. Das Kampfsystem ist Pokemonartig. Man hat vier Attacken, mit denen man den Gegner im Kampf ausschalten kann, bisher ist nur der Schlag animiert, zieht dem Gegner aber auch noch nichts ab. Der Gegner ist außer zum da stehen zu noch nichts fähig und wackelt nur ein bisschen auf der Stelle herum.
Nochmal zu den Maps. Das Kollisions-System ist fast fertig, nur funktioniert die Kollision von unten nach oben noch nicht. Ich werde den Code mal nachreichen, vielleicht weiß ja wer, was ich da falsch mache. Das Übergangssystem funktioniert schon großartig, war aber auch keine große Sache. Es gibt bisher zwei Test-Maps, die ich Teilweise mit Tiles aus der Terrain.png von Minecraft ausgeliehen habe, nimmt mir sicher niemand übel. Das Menü ist nicht wirklich ein Menü und ansonsten gibt es nur noch einen unnötigen Ladebalken, den ich mal aus Langeweile programmiert habe.
Hierfür werde ich mal meine Pläne preisgeben: Handels-System, Crafting-System. Mining-System, Kampf-System, Quest-System u.v.m. Umso mehr Ziele ich mir setze, umso mehr bleibt übrig, wenn ich mal kräftig aussortiere Wink

Projekt. Nr.3: Multiplayer-2D-Shooter

Das ist mein Prachtstück, dass ich in der Nacht vom ersten April, wo ihr mich so richtig verarscht habt und ich
und mein Visual Basic Freund ne kleine Progger-Nacht gemacht haben.
Ihr steuert zwei kleine Männchen mit euren JoySticks/Controllern durch die Gegend und versucht, den anderen ordentlich mit euren Feuerbällen einzuheizen. Momentan noch nicht mit Tastatur spielbar, kommt aber als nächstes. Sobald die Tastatur-Steuerung eingebaut ist und ich einpaar Grafiken verbessert habe, wird das Spiel auch im Showcase zu finden sein, immerhin garantiere ich Stundenlangen Spielspaß, solang man nicht alleine zocken will. Achja, es ist nicht über Lan oder Internet zu spielen, sondern auf einem Computer, sofern man zwei USB-Anschlüsse hat. In den Einstellungen kann man noch die Feuerrate einstellen, was den Kampf ziemlich unfair machen kann (1 ist das Schnellst, 10 das Langsamste).

Projekt Nr.4: Weltraum-Wirtschaftsspiel

Ich weiß, es ist unnötig, war auch nur sone Idee ohne Hintergrund, als ich mich bei meiner Oma in Koel langweilen durfte. Projekt wird zwar wieder abgebrochen, möchte trotzdem einbisschen was dazu sagen.
Bisher kann man sein Raumschiff über eine Map fliegen lassen, die man, genau wie in Projekt Nr.2 wechseln kann. Man kann auch schon rumballern, gibt nir kein Ziel. Außerdem hab ich das Station-System angefangen, dies ist aber so verdammt verkrüppelt *würgs* das will ich garnicht weiter machen.

Projekt Nr.5: Death Knight

Vielleicht kennt jemand das geniale Spiele für iPhone und iPod Touch. Du steuerst deinen Spieler durch eine recht kleinen Map und musst versuchen die Welle von jeweils 40 Gegnern, beim letzten sind es 95, zu überleben. Man kann neue Waffen kaufen und diese Upgraden und ihre Speziallfähigkeiten einsetzen. Man kann jeweils nur drei Waffen mit in den Kampf nehmen. Tja, soweit bin ich noch nicht. Der Player kann sich bisher auf dem Spielfeld bewegen (Laufen, Stehen, Laufschlag, Rollen, Sterbe-Animation ist fertig, wird heute implementiert). Außerdem spawnen Monster, die auf den Player zugehen, aber irgendwie nicht angreifen wollen. Der Grund ist bekannt, nur weiß in noch nicht, wie ich es fixen kann. Die Gegner sterben auch schon, nur ohne Animation (Der Spieler und der Gegner sieht noch gleich aus). Man kann schon Maps einfügen, ihnen Namen geben und so. Die Grafik kommt natürlich kein Stück ans Original heran, wäre froh, wenn mich jemand in diesem Bereich unterstützen würde. Ich schicke nachher ein paar Screens hinterher, damit ihr meine "Kunstwerke" mal betrachten könnt"

Von den Funktionen her, möchte ich möglichst ans Original heran kommen.

Ich bitte um Entschuldigung, falls ein paar Wörter, die nicht passen, im Text zu finden sind. Das sind dann Ausgeburten des iPhone-Rechtschreibprogrammes...

Vielen Danks fürs Lesen und die Aufmerksamkeit.
MfG, Triology