Ablauf und Objekte

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

isaru

Betreff: Ablauf und Objekte

BeitragMi, Jun 27, 2007 17:24
Antworten mit Zitat
Benutzer-Profile anzeigen
So, ein wenig dumm komme ich mir schon vor, aber ich habe ein grundsätzliches Verstandnisproblem bei einem derzeitigen Projekt.

Bisher habe ich mich nur mit Datenbankverarbeitung(php/Mysql) auseinandergesetzt, und dynamische Projekte wie Spiele vermieden. Für mein aktuelles Projekt werde ich wohl aber dynamische Objekte benötigen.

Also: nehmen wir einfach mal an ich möchte das sich 2 Bälle über den Bildschirm bewegen. Von den bisher für soetwas genutzen Programmen kenne ich das etwa so:

------------------------------
Objekt: 1.Ball
Aktion: Beweg dich
Wenn Kollision mit Wand: prall ab.

Objekt: 2..Ball
Aktion: Beweg dich
Wenn Kollision mit Wand: prall ab.
------------------------------

Das ganze in Aktion gesetzt ergab nun 2 sich bewegende Bälle die gleichzeitig über den Bildschirm rollen. Die Betonung liegt hier auf gleichzeitig.

Wenn ich jetzt aber mit BlitzBasic(oder irgend einer ander Programmiersprache) an die Sache herangehe lässt sich dieses gleichzeitige nicht so einfach umsetzen. Ich gehe deshalb davon aus das es folgendermaßen aussieht:

----------------------------------
Ball 1 bewegt sich ein Stück
wenn Kollision mit Wand dann abprallen
Ball 2 bewegt sich ein Stück
wenn Kollision mit Wand dann abprallen
Ball 1 bewegt sich ein Stück
wenn Kollision mit Wand dann abprallen
Ball 2 bewegt sich ein Stück
wenn Kollision mit Wand dann abprallen
Ball 1 bewegt sich ein Stück
wenn Kollision mit Wand dann abprallen
Ball 2 bewegt sich ein Stück
...
----------------------------------

Gehe ich also recht in der Annahme das sich scheinbar gleichzeitig bewegende Objekte in wirklichkeit Schritt für Schritt nacheinander bewegen?

Das umzusetzen wäre nicht das Problem. Ich frage mich nur, da dies bei Builderprogrammen mit eingebetteten Sprachen (3D Gamestudio etc.) etwas anders läuft. Wie oben erwähnt werden dort Objekte mit Anweisungen gefüttert und diese dann völlig selbstständig ohne Schleife um das Hauptprogramm ausgeführt. In einigen Beispielprogrammen zu BB habe ich jedoch die Schrittweise Ausführung erkannt. Ist das also hier die Vorgehensweise?

P.S. Tjaja, ich merk schon, das gehört eigendlich in die "beginners corner". Embarassed
So komm ich wenigstens schon recht früh in den Genuß die Admins diese Forums bei der Arbeit zu beobachten. Very Happy Also, bei Gelegenheit verschieben bitte.

BladeRunner

Moderator

BeitragMi, Jun 27, 2007 18:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Auch bei 3DGS und Konsorten laufen diese Bewegungen prinzipiell nacheinander ab.
Warum Du in ihnen keine Schleifen etc. hast ist recht einfach zu erklären: Diese Systeme führen selbstständig eine Mainloop aus, um die sich der Programmierer nicht kümmern muss. Innerhalb dieser Loop sind dann auch Update-Methoden, die sich um eben diese Dinge kümmern (Sprich: Wurden Objekte bewegt, fand Kollision statt etc.)

Zudem ist das 3dGS deutlich objektorientiert, ein Verhalten was unter BB nur bedingt umzusetzen ist - hier ist BMax einen Schritt weiter.

Nichts desto trotz kannst Du es ähnlich umsetzen: Mach deine Mainloop, erschaff eine Updatefunktion die alle objekte überprüft und ruf diese auf.


Ich hoffe das war hilfreich.
Ach ja: Willkommen im Biltzforum.

~VERSCHOBEN~
Dieser Thread passte nicht in das Forum, in dem er ursprünglich gepostet wurde.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

isaru

BeitragMi, Jun 27, 2007 18:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja das hilft mir etwas weiter. Natürlich macht es die ganze Sache schwieriger, aber eine Funktion zu dem Thema sollte dem Abhilfe schaffen.

Danke Nochmal.

NightPhoenix

BeitragMi, Jun 27, 2007 18:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Selbst wenn es codetechnisch so aussieht als wenn du es "schrittweise" bewegst ist es in wirklichkeit so, dass das Bild auf dem Monitor erst durch "RenderWorld" erneuert wird, d.h. wenn du zwei bälle nacheinander bewegst und danach renderworld anwendest sieht es für den betrachter so aus als ob sie gleichzeitig rollen würden.
MfG. Wink
 

isaru

BeitragMi, Jun 27, 2007 18:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für das Stichwort. Das hilft mir wirklich weiter.
So wie ich das verstanden habe wird durch das Rendern zuerst die Veränderungen berechnet und dann Einheitlich und gleichzeitig auf dem Bildschirm dargestellt? Klingt nach genau dem was ich suche. Wink

Edit:

Gut gut, bei mir hats jetzt klick gemacht. Die Lösung ist völlig simpel *g* Keine Ahnung warum es mich so gemartert hat.


Für alle die mal auf das selbe Problem stoßen:

Die Objekte bewegen sich selbstverständlich nicht gleichzeitig, sondern ihre Teilschritte werden alle nacheinander berechnet. Allerdings werden sie nicht sofort auf dem Bildschirm angezeigt. Ihre neuen Positionen werden gespeichert und dann, sobald alles berechnet ist auf den Bildschirm gebracht. Damit erscheinen sie als gleichzeitige Bewegung. Die Berechnung der Teilschritte wird ständig wiederholt sodas eine fließende vollständige Bewegung entsteht.

Wenn es um 3D Umgebungen geht wird das ganze durch das "Rendern" unterstüzt. Der Befehl "renderworld" und Zugehörige erfüllen diese Funktion. Zusätzlich filtert er sich nicht verändernde Objekte aus und lässt diese schlichtweg auf dem Bildschirm wie sie sind ohne sie neu zu Zeichnen. Das kann die Geschwindigkeit erhöhen.


Danke an euch beide für die Hilfe meine Alterssenilität zu überwinden. Wink

Problem gelöst. Thread kann geschlossen werden.

aMul

Sieger des Minimalist Compo 01/13

BeitragMi, Jun 27, 2007 19:11
Antworten mit Zitat
Benutzer-Profile anzeigen
isaru hat Folgendes geschrieben:
Zusätzlich filtert er sich nicht verändernde Objekte aus und lässt diese schlichtweg auf dem Bildschirm wie sie sind ohne sie neu zu Zeichnen. Das kann die Geschwindigkeit erhöhen.

Falsch. Es wird bei jedem Renderworld alles komplett neu gerendert. Wink
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans!
Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver
 

isaru

BeitragMi, Jun 27, 2007 19:59
Antworten mit Zitat
Benutzer-Profile anzeigen
aMul hat Folgendes geschrieben:
isaru hat Folgendes geschrieben:
Zusätzlich filtert er sich nicht verändernde Objekte aus und lässt diese schlichtweg auf dem Bildschirm wie sie sind ohne sie neu zu Zeichnen. Das kann die Geschwindigkeit erhöhen.

Falsch. Es wird bei jedem Renderworld alles komplett neu gerendert. Wink


Gut gut, es lässt sich jedoch mithilfe von Zusatzbefehlen so einrichten das nur die Veränderungen neu berechnet werden. Wink

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group