Bomberman Klon (Community Tutorial) BMAX

Gehe zu Seite Zurück  1, 2, 3, 4, 5, 6  Weiter

Worklogs Bomberman Klon (Community Tutorial) BMAX Kommentare

Sonntag, 29. August 2010 um 02:05 Uhr von KirkZero

@n-Halbleiter
Mensch, dass ist ja schon wieder so eine kleine aber feine Sache!!!
Wieso komm ich auf sowas nie??? Wink
Das macht die ganze IF... THEN Sache auch wieder ein bissel übersichtlicher!

Danke!

Werd ich gleich mal zu Beginn des nächsten Eintrages mit einarbeiten.

Zitat:

Da ich noch nichts zum Worklog und dem Projekt an sich gesagt habe: Ich finde deine Idee klasse und auch den Inhalt deiner Einträge gut. Weiter so! Smile


Danke auch dafür! Freut mich sehr. Merke aber, das es mit jedem Eintrag schwieriger wird, das alles vernünftig zu dokumentieren... mal sehen, was draus wird Wink

Sonntag, 29. August 2010 um 01:52 Uhr von n-Halbleiter

Deine Steuerungsmethode lässt sich schön beschleunigen (wenn auch nur minimal). Du musst das " And MilliSecs() > BewegungsTimer+BewegungsPause" bei jeder If-Abfrage entfernen und dann die gesamte If-Abfrage für die Tasten in eine Andere mit der Bedingung "MilliSecs() > BewegungsTimer+BewegungsPause" schachteln.

Die Methode würde damit wie folgt aussehen:
<code>
Method Steuerung() 'Enthält die Steuerungsabfrage
If MilliSecs() > BewegungsTimer+BewegungsPause
If KeyDown(KEY_UP) 'wenn Pfeiltaste OBEN gedrückt wird
yPos:-Speed
BewegungsTimer = MilliSecs()
ElseIf KeyDown(KEY_DOWN) 'wenn Pfeiltaste UNTEN gedrückt wird
yPos:+Speed
BewegungsTimer = MilliSecs()
ElseIf KeyDown(KEY_LEFT) 'wenn Pfeiltaste LINKS gedrückt wird
xPos:-Speed
BewegungsTimer = MilliSecs()
ElseIf KeyDown(KEY_RIGHT) 'wenn Pfeiltaste RECHTS gedrückt wird
xPos:+Speed
BewegungsTimer = MilliSecs()
End If
End If
End Method
</code>

Das nur mal so am Rande.

Da ich noch nichts zum Worklog und dem Projekt an sich gesagt habe: Ich finde deine Idee klasse und auch den Inhalt deiner Einträge gut. Weiter so! Smile

Editiert

Samstag, 28. August 2010 um 23:05 Uhr von KirkZero

So, Worklog editiert. https://www.blitzforum.de/worklogs/394/
Hat auch einiges für mich klargestellt. Danke!
Arbeite auch grad schon am nächsten Eintrag, da aber wieder Wochenende ist, und mich da auf der Arbeit über Arbeit nicht beklagen kann... muss ich mal sehen, wie weit ich heute komme Wink
Ansonsten gibt es das erst morgen oder übermorgen Nacht...

(Ich habe keine Ahnung, warum mein letztes Kommentar doppelt gepostet wurde, hab auch nix gefunden, wie ich es löschen könnte...)

Wow... viel Futter

Donnerstag, 26. August 2010 um 01:17 Uhr von KirkZero

Leute... ihr seid klasse!!! Das ich hier so viel Hilfestellung bekomme, find ich echt extrem SUPER!!!
Ich habe die Kommentare jetzt erstmal durchgeschaut, und werde sie mir später (hab grad feierabend und bin extrem müde) nochmal so richtig durch den Kopf gehen lassen.
Denke, dann muss ich meinen letzten Worklog Eintrag mal editieren, da ich ja dort ein wenig dummes Zeug geredet habe. Jedenfalls werd ich mir alles zu Herzen nehmen... und "versuchen" alles soweit klar zu stellen, wie ich es mit meinen Worten schaffe... (bin nicht so der ErklärBär und hatte es mir einfacher vorgestellt)
Was aber nicht heisst, dass ich es nicht wenigstens versuche. Und da ich soviel Anregungen, Tipps, Verbesserungsvorschläge und Erklährungen bekomme... denke ich... das wird schon Wink

NOCHMALS DICKES DANKE!!!

Wow... viel Futter

Donnerstag, 26. August 2010 um 01:16 Uhr von KirkZero

Leute... ihr seid klasse!!! Das ich hier so viel Hilfestellung bekomme, find ich echt extrem SUPER!!!
Ich habe die Kommentare jetzt erstmal durchgeschaut, und werde sie mir später (hab grad feierabend und bin extrem müde) nochmal so richtig durch den Kopf gehen lassen.
Denke, dann muss ich meinen letzten Worklog Eintrag mal editieren, da ich ja dort ein wenig dummes Zeug geredet habe. Jedenfalls werd ich mir alles zu Herzen nehmen... und "versuchen" alles soweit klar zu stellen, wie ich es mit meinen Worten schaffe... (bin nicht so der ErklärBär und hatte es mir einfacher vorgestellt)
Was aber nicht heisst, dass ich es nicht wenigstens versuche. Und da ich soviel Anregungen, Tipps, Verbesserungsvorschläge und Erklährungen bekomme... denke ich... das wird schon Wink

NOCHMALS DICKES DANKE!!!

Mittwoch, 25. August 2010 um 19:14 Uhr von mpmxyz

brl.Max2D ist ein komplett abstraktes Modul.
Das heißt, dass es weder etwas mit OpenGl noch mit DirectX zu tun hat.
Die Implementierung erledigen die brl.xyzMax2D-Module.
Wenn du einfach nur so Code wegschreibst, musst du keinen Grafiktreiber setzen, da die Module ihn beim Start des Programmes selbst festlegen. (eine Vermutung: letztes importiertes Modul->der aktivierte Treiber bei Programmstart)
Schreibe es aber lieber explizit, um Verwechselungen zu vermeiden.
mfG
mpmxyz

Mittwoch, 25. August 2010 um 15:26 Uhr von Lastmayday

Plob!

Ich konnte nicht wirklich einschätzen wie weit du dich bis jetzt auskennst, daher hatte ich meine Erklärungen zu den Vorschlägen kurz gehalten.

Framework muss eben deswegen an erster(oder zweiter -> SuperStrict) stelle im Code stehen um dem Compiler zu sagen das jetzt nur die Module einbinden soll die als nächstes aufgeführt sind. Soweit ist mir jetzt nicht bekannt ob das einen unterschied macht, welches Modul als erstes kommt.
Du kannst auch max2d, glmax2d, DX7, DX9 und opengl gesamt importieren. Was dich dann zu SetGraphicsDriver bringt.

Ein beispiel:
<code>
?Win32 'wird nur unter Windows gebaut
SetGraphicsDriver D3D9Max2DDriver()
?MacOS 'wird nur unter Mac gebaut
SetGraphicsDriver GLMax2DDriver()
?Linux 'wird nur unter Linux gebaut
SetGraphicsDriver GLMax2DDriver()
? 'wird wieder normal weiter kompiliert
</code>
so hättest du gleich für jedes OS den richtigen Render. Oder du könntest in den Optionen dem Spieler anbieten es selbst zu Bestimmen, um zum Beispiel Grafik Fehler zu beheben.

Wenn dir ein Modul fehlen sollte, suchst du die markierte Funktion in der Bmax Hilfe und lässt dir den Hilfe Text anzeigen. Wenn du jetzt ganz nach oben scrollst steht ganz oben der Name des Moduls: „brl.xxx: Functions Source„ den du dann ganz einfach importieren kannst. (funktioniert nicht bei allem, wie bei brl.PNGLoader wo kein Fehler erscheint. (wenn brl.PNGLoader nicht importiert ist und man versucht ein png-Bild zu laden.)

Das mit der Bewegung war nur ein Tipp. Jeder löst dieses Problem anders, von daher nicht weiter beachten.

Das mit Tspieler war so gemeint das du beim Erstellen mit übergibst welche tasten benutzt werden. Man könnte in den Optionen die Tastaturbelegung für Spieler 1,2,3,4 einstellen mit dem altbekannten: „Drücken Sie eine Taste um dem Spieler 1 die Bewegung 'UP' zuzuweisen.“

hier zum Beispiel 4 Spieler:
<code>
Global Spieler:TSpieler[4]
Spieler[0] = Tspieler.Erstellen(2,2,"GFX/robo1.png",20,KEY_UP,KEY_DOWN,KEY_LEFT,KEY_RIGHT)
Spieler[1] = Tspieler.Erstellen(13,2,"GFX/robo1.png",20,KEY_W,KEY_S,KEY_A,KEY_D)
Spieler[2] = Tspieler.Erstellen(13,13,"GFX/robo1.png",20,etc..)
Spieler[3] = Tspieler.Erstellen(2,13,"GFX/robo1.png",20,etc..)
</code>
und die Verarbeitung:
<code>
For local s:int = 0 to 3
Spieler[s].Steuerung()
Spieler[s].Zeichnen()
Next
</code>

Have a nice day.

Mittwoch, 25. August 2010 um 10:13 Uhr von BladeRunner

Ich würde empfehlen unter Windows den dx9-Treiber zu verwenden, den Thunder schon in seinem Kommentar anführte. Smile
Unter Mac/Linux bist Du zwingend auf OGL angewiesen.

Kleinigkeiten

Mittwoch, 25. August 2010 um 09:53 Uhr von Thunder

- Das Modul D3D7Max2D führt den Befehl SetGraphicsDriver D3D7Max2DDriver() selbst aus, wenn der Treiber korrekt geladen wurde - es sollte also genügen einfach das Modul zu importieren.
- Das Modul Max2D hat eigentlich nur wenig mit den Treibern zu tun - es ist eher ein Universalaufsatz den man bis jetzt mit 3 offiziellen Treibern verwenden kann: D3D7Max2DDriver(), D3D9Max2DDriver(), GLMax2DDriver() (die module heißen wie die Treiberfunktionen nur ohne "Driver()").
- Falls dein Spiel später auch auf Linux laufen soll müsstest du den GLMax2D-Treiber verwenden. Wenn du für Windows dennoch einen Direct3D-Treiber verwenden möchtest, schlage ich die bedingte Kompilierung von BlitzMax vor.
- SuperStrict darf am Anfang stehen (ich schreibe Superstrict immer in die erste Zeile und Framework in die zweite), es darf nur keine gewöhnliche Codezeile vor Framework stehen.
- AppTitle ist nicht ein Befehl sondern eine Variable die von der IDE farblich hervorgehoben wird.

Sind wirklich nur Kleinigkeiten, weiter so Wink

mfg Thunder

Danke!

Dienstag, 24. August 2010 um 23:55 Uhr von KirkZero

@D2006
Hmm... momentan liegen alle inkludierten Dateien mit im Hauptordner, hab aber schon gemerkt, das das ganz schön unübersichtlich werden kann, das werde ich glaub ich noch ändern. Eine extra Datei für die inkludierten Dateien ist eine Überlegung wert. Aber noch ist es ja recht überschaubar. Werd ich mir für größere Projekte allerdings merken. Danke für deine Anregungen!

@Lastmayday
Hui, da hast du mir aber Futter gegeben. Erstmal dickes Danke, dass du dir den Code durchgesehen hast.
Hab auch gleich ein paar Fragen zu Framework und Import...
Ist Framework immer brl.max2d (?) oder wonach richtet sich das?
Sogesehen muss ich also immer die Module Importieren aus denen ich Befehle benutze? Dann wäre quasi die .exe auch um einiges kleiner?
Und nun noch ne Frage zum Render. Wenn ich Jetzt ohne Framework und Import arbeite, welchen Render nimmt BMAX dann eigentlich? Ich nehme mal an, man kann nur einen Render setzen? (ok, denke die Frage war überflüssig)

AppTitle und AppTerminate werde ich sofort umsetzen, nachdem ich hier fertig geschrieben habe.

die frameunabhängige Bewegung wie du sie mir zeigst, werd ich nochmal ein wenig verinnerlichen müssen, werd damit mal ein wenig rumspielen.
Ist meine Art, wie ich das mache (WaitTimer in Hauptschleife und millisecs() bei der Bewegung nutzen) nicht Frameunabhängig? Hatte gedacht es wäre so, aber lag wohl daneben?

Das ich in TFeld jedes image nochmal neu lade, hab ich garnicht realisiert... Danke, das werd ich auch gleich ändern.

Sollte also besser ohne Extends arbeiten? Vielleicht auch besser, habe halt noch nicht so viel Erfahrung damit sammeln können.
Belegbare Tastatur meinst du also wie folgt?
z.B. für Bewegung nach oben bei 4 Spielern ein Array von upkey:int[4]
Abfrage für Spieler eins wäre dann also
If KeyHit(upkey[0]) then ....

Stimmt, so sollte es auch gehen, danke für den Denkanstoß

Dann nochmal Danke, für deine Mühe, den KOMPLETTEN Code durch zu gehen und mir ein auf die Sprünge zu helfen, weis das sehr zu schätzen! Werd mal sehen, dass ich das gleich alles versuche soweit umzusetzen (Frameunabhämgige Bewegung evtl erst später, wenn ich Pixelweise Bewegung einbaue)

Gehe zu Seite Zurück  1, 2, 3, 4, 5, 6  Weiter


Kommentar schreiben

Titel:
Text: