Kollisionen

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite Zurück  1, 2, 3

Neue Antwort erstellen

Midimaster

BeitragMi, März 02, 2011 18:28
Antworten mit Zitat
Benutzer-Profile anzeigen
also dann hoch mit ihm:

BlitzBasic: [AUSKLAPPEN]
MoveEntity RealBus,0,1,0

..also ein positiver y-Wert...oder vieleicht sogar hoch höher... experimentiere!

Ein Pivot verhält sich jetzt wieder komplett anders als das echte 3D-Model. Daher kann nun auch das Fallen aus 6 ode aus 3 schon funktionieren.
BlitzBasic: [AUSKLAPPEN]
;*********************************************
PositionEntity sphere,0,3,0
;*********************************************

Experimentiere!

PhillipB

BeitragMi, März 02, 2011 19:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Ah ok ich habs jetzt so Code: [AUSKLAPPEN]
MoveEntity RealBus,0,11,0   ; Bus innerhalb des Pivot verschieben

Nur jetzt schwebt die 1 achse immer wenn man runter fährt wie könnte man das lösen?
Das model in der 3d verschieben oder gibt es irgent einen trick für beide achsen?

Midimaster

BeitragMi, März 02, 2011 20:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Du erstellst zwei neue Pivots, die als Sensoren funktionieren. Sie sind Kinder des Hauptpivots, aber nach jeweils bis zur Achse vorne und hinten verschoben.

Zum besseren Verständnis machst du diese Sensoren während der Testphase sichtbar, indem Du keine Pivots, sondern Spheres erstellst und den 3D-Bus komplett ausblendest (z.b. 100 Einheiten nach oben setzen)

Du kannst jetzt den Abstand dieser Pivots zum Boden berechnen und dann den Hauptpivot solange neigen, bis die beiden Sensoren in etwa den erwünschten Soll-Wert "Achse->Boden" melden.

PhillipB

BeitragMi, März 02, 2011 20:59
Antworten mit Zitat
Benutzer-Profile anzeigen
meinst du so? doch die Achse1 fällt nie auf den Boden!
Code: [AUSKLAPPEN]
O405=CreatePivot()
PositionEntity  O405,  0,12,0
EntityType O405, 1
RealBus=LoadMesh("O405\O405.3ds")
EntityParent RealBus,O405
MoveEntity RealBus,0,11,0   ; Bus innerhalb des Pivot verschieben
Achse2=CreateCube(O405)
EntityType Achse2, 1
Achse1=CreateCube(O405)
MoveEntity  Achse2,  0, -Gravi#,0
EntityType Achse1, 1
PositionEntity  Achse1,  0,0,5.86
MoveEntity  Achse1,  0, -Gravi#,0

Ich hoffe du kannst mir noch weiter helfen

Midimaster

BeitragDo, März 03, 2011 3:31
Antworten mit Zitat
Benutzer-Profile anzeigen
hier mal ein kleines Beispiel:

BlitzBasic: [AUSKLAPPEN]
; Collisions Example Fahrzeug auf Berg-/Tal-Strecke
; ------------------

Graphics3D 640,480
SetBuffer BackBuffer()

type_character=1
type_scenery=2

camera=CreateCamera()
RotateEntity camera,0,45,0
PositionEntity camera,10,5,-15

Himmel=CreateSphere(32)
FlipMesh himmel
ScaleEntity himmel,50,50,50
EntityColor himmel, 111,111,255


light=CreateLight()
RotateEntity light,-45,45,-45
MoveEntity Light,150,0,50


sphere=CreatePivot()
RealBus=CreateCube(); LoadMesh("O405\O405.3ds")
EntityParent RealBus,sphere
MoveEntity RealBus,0,0,0 ; Bus innerhalb des Pivot verschieben
ScaleEntity Realbus,4,1,1
EntityColor Realbus,155,155,0




;EntityRadius sphere,1
;EntityType sphere,type_character




Rasen=CreateCube()
EntityColor Rasen,55,133,0
ScaleEntity Rasen,100,1,100
MoveEntity Rasen,0,-1,-50


Strasse=CreateCube()
EntityRadius Strasse,1
EntityType Strasse,type_scenery
MoveEntity Strasse,0,5,0
EntityColor Strasse,133,133,133
ScaleEntity Strasse,100,.1,3
RotateEntity Strasse,0,0,-10


;*********************************************
MoveEntity sphere,-35,15,0
;*********************************************


Sensor1=CreateSphere(8,Sphere)
EntityColor Sensor1,255,0,0
ScaleEntity Sensor1,0.3,0.3,0.3
MoveEntity Sensor1,-4,-0.2,0
EntityRadius Sensor1,1
EntityType Sensor1,type_character



Sensor2=CreateSphere(8,Sphere)
EntityColor Sensor2,255,0,0
ScaleEntity Sensor2,0.3,0.3,0.3
MoveEntity Sensor2,4,-0.2,0
EntityParent Sensor2,sphere
EntityRadius Sensor2,1
EntityType Sensor2,type_character



method=2
response=1

method_info$="sphere-to-polygon"
response_info$="slide1"
speed#=.1
dreh#=.4


While Not KeyDown( 1 )

Speed#=speed*1.03
dreh#=dreh*0.95
MoveEntity sphere,0.20,0,0
TurnEntity sphere,0,0,dreh#

TurnEntity camera,0,-.2,0



TranslateEntity sphere,0,-speed,0
Collisions type_character,type_scenery,method,response
UpdateWorld
HinterY#=0.2+EntityY(Sensor1)
VorderY#=0.2+EntityY(Sensor2)
AntiSpeed#=0
If (HinterY>0) And (VorderY>0) Then
AntiSpeed=Speed+0.01
dreh=0
Speed=0.01
ElseIf HinterY>0 Then
AntiSpeed=Speed+0.01
Speed=0.01
dreh=-1
ElseIf VorderY>0 Then
AntiSpeed=Speed+0.01
Speed=0.01
dreh=1
EndIf

TranslateEntity sphere, 0,AntiSpeed,0
PositionEntity Sensor1,-4,-0.2,0
PositionEntity Sensor2,4,-0.2,0
ClearCollisions
UpdateWorld
RenderWorld
Flip 0
Delay 10
Wend




#Nachtrag....

so jetzt noch die Erklärung, gestern Nacht um halb drei war ich einfach zu müde....

Also, wenn du dir das "Fahrzeug" in dem Beispiel ansiehst, bemerkst Du die beiden roten "Sensoren". Sie wurden als Child des Pivot vorn und hinten angebracht:
BlitzBasic: [AUSKLAPPEN]
Sensor1=CreateSphere(8,Sphere)
EntityColor Sensor1,255,0,0
ScaleEntity Sensor1,0.3,0.3,0.3
MoveEntity Sensor1,-4,-0.2,0
EntityRadius Sensor1,1
EntityType Sensor1,type_character


Das Pivot wird gefahren und gedreht, so kann es je nach Straßenverlauf nach vorne oder hinten kippen. Solange dreh#=0 dreht sich gar nix:
BlitzBasic: [AUSKLAPPEN]
speed#=.1
dreh#=.4

While Not KeyDown( 1 )

Speed#=speed*1.03
dreh#=dreh*0.95
MoveEntity sphere,0.20,0,0
TurnEntity sphere,0,0,dreh#

.......


Jetzt fällt das Pivot Richtung Erde. Das geschieht jetzt nicht mehr mit MoveEntity, sondern mit TranslateEntity, damit es auch dann senkrecht nach unter gezogen wird, wenn es auf einer 45° Straße fährt. in diesem Fall würde ein MoveEntity es ja senkrecht zur Straße absenken.
user posted image


Durch das Translate sind jetzt möglicherweise Kollisionen aufgetreten. Dies hat dazu geführt, dass die Sensoren nicht komplett mit dem Pivot mitverschoben wurden. Da sie sich genau 0.2 in Y-Richtung unter dem Pivot befinden sollten, muss ich nun nur noch vergleichen, ob sie noch 0.2 weit weg sind. Wenn nein, dann hat eine Kollision stattgefunden:
BlitzBasic: [AUSKLAPPEN]
	HinterY#=0.2+EntityY(Sensor1)
VorderY#=0.2+EntityY(Sensor2)
AntiSpeed#=0
If (HinterY>0) And (VorderY>0) Then
AntiSpeed=Speed+0.01
dreh=0
Speed=0.01
ElseIf HinterY>0 Then
AntiSpeed=Speed+0.01
Speed=0.01
dreh=-1
ElseIf ....


Dabei gibt es drei Fälle für mögliche Kollisionen:

- vorn und hinten gleichzeitig
- nur vorne
- nur hinter

War es nur auf einer Seite, dann deshalb, weil das Pivot nicht parallel zur Straße steht. Deshalb wird jetzt gedreht.

In einem letzten Schritt wird der Fall des Pivot zurückgenommen, die Fallgeschwindigkeit auf ein Minimum reduziert und die Sensoren wieder in Ihre Ausgangsposition gebracht.

BlitzBasic: [AUSKLAPPEN]
	TranslateEntity sphere, 0,AntiSpeed,0
PositionEntity Sensor1,-4,-0.2,0
PositionEntity Sensor2,4,-0.2,0
ClearCollisions
UpdateWorld
RenderWorld


Die Welt muss nochmal neu berechnet werden, dann kommt das Rendern.

Da bei der nächsten Runde speed# viel kleiner ist, wird es nun viel vorsichtiger auf die Straße gesetzt. So pegelt sich langsam ein stabiler Abstand ein.

PhillipB

BeitragDo, März 03, 2011 16:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Also vielen dank für dein Tut aber ich komme jetzt ziemlich durch einander!
Weil ich verstehe nicht wie ich das dann mit der Drehung hinkriegen soll!
Weil die drehung ist ja konztant bei dir!
Wie könnte ich das jetzt verändern das es zu meinem code past.
Trotzdem vielen dank für deine Mühe!

Midimaster

BeitragDo, März 03, 2011 17:40
Antworten mit Zitat
Benutzer-Profile anzeigen
wie meinst Du das mit "konstant"? Die Drehung ist die meiste Zeit=0. Bei mir pegelt sich der Bus nach ein paar Sekunden ein.

Wo sollte jetzt das Problem liegen, diese Idee in Deinen Code zu integrieren?

Das Pivot hast Du doch schon, fehlen nur die 2 Sensoren.

Beim Pivot schaltest Du die Kollisonserkennung aus und dafür bei den Sensoren an. Dann heißt es wieder mal in Experimenten die richtigen Werte finden:

-Tiefe (Y) der Sensoren im Pivot
-mind. Fallhöhe des Pivots
-ev. neue Position des 3D Models im Pivot.
-speed#
-dreh#

das alles musst du experimentell bestimmen.

Sir Gauss der III

BeitragDo, März 03, 2011 17:55
Antworten mit Zitat
Benutzer-Profile anzeigen
@ Midimaster

wäre es nicht einfacher für PhillipB wenn beide Punkte an ihrer Position bis zur Collision nach unten bewegt werden, der Winkel zwischen ihnen mit VectorPitch ausgelesen wird und dann der Bus entsprechend gedreht wird?

so hatte ich das Prob damals gelöst. Ich frag nur deshalb da ich mal das Programmchen getestet hab und es recht wacklig wirkte. hab aber nicht näher rein geschaut in den Code, muss ich zugeben.

BladeRunner

Moderator

BeitragDo, März 03, 2011 18:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich bleibe ja weiter dabei dass es einfacher für Phillipb wäre das Programmieren an einem wesentlich unkomplizierteren Beispiel zu erlernen bevor er sein Busspiel machen will (nach alledem was er bislang Preis gegeben hat leidet er nämlich an dem häufigsten aller HobbyprogrammiererSyndrome: Er überschätzt masslos was er -derzeit- leisten kann.)
Bevor er nicht Grundlegend in der Lage ist einen Programmablauf zu verstehen ist es - man verzeihe mir die deutliche Wortwahl - Perlen vor die Säue ihm anhand eines solchen Beispieles was beibringen zu wollen. Denn wie man ja anhand seiner Antworten ersehen kann versteht er es nicht wirklich und ist weiter darauf bedacht alles per Copy und Paste in seinen Code einzufügen.
Ich schätze deinen Hilfewillen wirklich sehr, Midimaster, aber ich glaube fest daran dass Deine Hilfe erst fruchten wird wenn PhillipB sich mal am Riemen reisst und ein paar Wochen in die Basics investiert.
Solange er nicht mal die grundlegenden Kontrollstrukturen beherrscht kannst du ihm viel von Pivots und Gravitation erzählen, es wird nichts bringen.
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
 

Cedric30003

BeitragDo, März 03, 2011 19:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Also jetzt will ich mich hier mal zu Wort melden:

Vorab: mir ist es jetzt auch egal wenn ich dafür rausfliege.

@BladeRunner: Ich habe irgendwie das Gefühl dass du auf gut Deutsch gesagt denkst (Sorry für die Wortwahl, passt aber am besten)
Ich bin gut, alle anderen sind scheiße, die könnens doch eh nicht. solllen die doch einfachere sachen machen

So kommt mir das hier vor!

Und @midimaster: Dein Beitrag zum Thema Man kann es auch an einem BusSpiel lernen finde ich sehr richtig! Wenn man es nicht zusammenhängend erklärt, verstehen die meisten es auch nciht. Das wäre so als ob du schreiben ohne stift lernen sollst. Ich habe BlitzBasic (soweit ich es shcon kann) auch während der Programmerstellung gelernt.


So, dass musste jetzt sein.

gez.: Cedric

BlitzMoritz

BeitragDo, März 03, 2011 19:29
Antworten mit Zitat
Benutzer-Profile anzeigen
@Cedric 30003: Deine unbeherrschte Reaktion bringt für PhillipB nichts, für Midimaster nichts und für Bladerunner auch nichts. Kläre persönliche Differenzen auf Wunsch per PN.
Bladerunner öffentlich persönliche Überheblichkeit vorzuwerfen, geht doch an der Sache vorbei. Er und andere müssen ein gewisses "Jammerspiel" bereits seit längerem ertragen, außerdem bemüht er sich (im Gegensatz zu den "Worten", die du ihm unterschiebst) um höfliche, aber klare und sachlich-vernünftige Formulierungen.
Wenn Midimaster seinen (auch in meinen Augen irgendwie nicht mehr nachvollziehbaren) pädagogischen Eifer gleichsam missionarisch ausleben will, ist das seine Sache und sicherlich sehr ehrenwert.
Bladerunners Zweifel sind aber ebenso nachvollziehbar und in gewisser Weise ebenso pädagogisch inspiriert, wenn man 'mal genauer nachdenkt.
Irgendwie geht es nicht an, dass sich ein Mod in seinem Einsatz um das Niveau des Forums für jeden etwas härteren Besenstrich rechtfertigen soll, mit dem er hier "saubermachen" will.

BladeRunner

Moderator

BeitragDo, März 03, 2011 19:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Cedric, mir geht es hier nicht drum ob ich besser oder schlechter bin als andere. Es ist meine Aufgabe hier in dem Laden Ordnung zu halten. Und mir fällt einfach auch dass Phillip eine Menge Fragen stellt, deren Antwort er sich aus einem einfachen Grund nicht selbst geben kann: weil er nicht genug Grundwissen hat um solche Themen schon zu bearbeiten.
Für mich ist die Konsequenz eine ganz einfache: Ich rate ihm eben dieses Grundwissen zu erwerben. Das würde auch das Forum von einer Menge Traffic und einige Nutzer hier von viel (derzeit leider sinnfreier) Arbeit entlasten.

Es bringt eben nix, PhillipB Pivots zu erklären wenn er (und das erkennt man an seinem Code noch sehr deutlich) noch schwere Probleme damit hat überhaupt Abfragen und Schleifen zu realisieren. Ich glaube einfach fest daran dass es ihm gut tun würde anfands kleinere Brötchen zu backen. Auf 3D zu verzichten und erstmal die grundlegenden Befehle so sicher zu verstehen, dass er sie auch sinnvoll nutzen kann.

Wenn bei Dir der Eindruck entsteht, ich wollte mich auf Kosten von Anfängern profilieren tut mir das leid, denn das ist sicher nicht meine Intention. Ich versuche nur zu helfen und dabei eine gewisse Ökonomie einzuhalten. Und wie an anderer Stelle schonmal erklärt bin ich was PhillipB angeht schon ein wenig ruppiger, weil er bislang alle Ratschläge ignoriert hat und einfach weiter die Copy&PasteNummer durchzieht. Mit der lernt er aber nichts und stiehlt im Endeffekt einigen hier die Zeit.
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
 

Jumper

BeitragDo, März 03, 2011 20:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Ganau so ist es!

Das wird noch eine Weile so weitergehen mit den Grundsatztfragen und irgendwann schmeißt Phillip die Programmiererei hin, weil er von dem kopierten Code absolut nichts versteht und den Überblick über das eigene Programm verliert, was jetzt nicht abfällig klingen soll!
Das nützt keinen was: Phillip gibt frustriert ein ansich schönes Hobby auf, und das Forum hat einen User weniger.

Viel besser wäre es doch sich zunächst an etwas leicherem zu üben: ein Breakout, ein Asteroids oder ein simples Pong, und auf 3D zunächst ganz zu verzichten.
Dabei lernt er automatisch die Grundlagen der Programmierung und fördert das logische Denken für einen sinnvollen Programmaufbau.
Wenn das klappt, hat man ein Erfolgserlebinis, was zum Weitermachen motiviert. Danach kann er immer noch sein Lieblingsspiel in 3D machen, was selbst bei der Beherrschung der Grundlagen noch schwer genug wird.

Aber dann wird Phillip eher verstehen was man ihn versucht zu erklären.

PhillipB

BeitragDo, März 03, 2011 20:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Was soll den das jetz es wird gesagt hör auf dann mach was einfacheres ich hab doch jetz garnix mehr gesagt! Außerdem verstehe ich die cods außer momentan den von Midnaster nicht!
Und ich finde es eine frechheit wie hier die Leute heruntergezogen werden.
Viele denken hier wie auch cedric sagt alle zu übermächtig.
Ich errinere "ihr wart auch mal anfänger".
Ich habe auch schon eine menge selbst geschrieben,ich habe mich an codes versucht etc. vieles heraus gefunden nur halt bei diesem thema was ich shcon eine lange zeit verfolge halt noch nicht den grundsatz der kollis habe ich ja verstanden nur halt das mit der verlagerung bzw. drehung nicht aber wer weiß villt. kriege ich es ja noch hin.
Bis dann.
und viel spaß beim proggen oder herunter ziehen anderer leute.

(MFG)
PhillipB.

P.S.:Es gibt aber auch noch nette unter euch die ich jetzt hier nich nennen kann aber die anderen wissen schon wen ich meine und wen nicht!

BladeRunner

Moderator

BeitragDo, März 03, 2011 20:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Phillip, ja ich war auch mal Anfänger. Und ich bin meinen Weg gegangen. Aber ich habe laufen gelernt bevor ich rennen wollte. Zumindest hab ich das Rennen nur im stillen Kämmerchen versucht Wink
Als ich Programmieren lernte gab es noch keine Internetforen dazu, weil es simpel noch kein Internet gab, und ich habe es trotzdem gelernt. Fehler um Fehler haben mich weitergebracht.
Bei Dir vermisse ich dieses Fehler machen und selbst korrigieren ein wenig. Du kommst mit deinen zu hoch gegriffenen Plänen her, fragst, verstehst die Antwort nicht und fragst weiter, ohne dass dir eine der Antworten was nützt.
Ich wiederhole mich mal wieder: ich will Dich nicht runterziehen. Ich empfehle Dir nur deutlich erstmal kleiner zu denken.

Edit: und ich wüsste nicht was daran verwerflich wäre dass Du die Leute nennst von denen Du dir geholfen fühlst. Auch wenn ich da wieder anmerken muss dass ich mal schätze es ist die Fraktion von der Du bislang am problemlosesten Code kopieren konntest.
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
  • Zuletzt bearbeitet von BladeRunner am Do, März 03, 2011 20:39, insgesamt 2-mal bearbeitet

Nicdel

BeitragDo, März 03, 2011 20:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Na ja. Wir haben mit 2D-Spielen angefangen, mit Schleifen, Abfragen und Variablen, nicht mit Kollisionen und realistischen Wettereffekten.
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7
 

Jumper

BeitragDo, März 03, 2011 21:00
Antworten mit Zitat
Benutzer-Profile anzeigen
PhillipB hat Folgendes geschrieben:
und viel spaß beim proggen oder herunter ziehen anderer leute.


Das siehst Du völlig verkehrt!
Keiner hat behauptet das Du das Programmieren nicht schaffen könntest. Nur wirst Du Deine gesetzten Ziele nicht erreichen, was ganz eindeutig aus Deinen Fragen hervor geht.

Meine ehrliche Meinung habe ich dazu gesagt, ohne Dich runterziehen zu wollen. Aber das willst Du scheinbar nicht verstehen Confused
Ich habe genau wie Bladerunner das Programmieren erlernt, als es noch kein Internet gab. Das war 1984, und natürlich waren die Ziele nicht so hoch gesteckt, und meine ersten Programme waren aus heutiger Sicht einfach schrecklich.
Aber das man überhaupt was hinbekommen hat, motivierte zum Weitermachen. Nicht zuletzt darum bin ich auch nach 27 Jahren noch mit Spaß dabei.

Wer weiß was geworden wäre, hätte ich meine Ziele damals auch zu hoch gesteckt. Vermutlich wäre mein Hobby dann jetzt ein anderes.
Es ist absolut nicht böse gemeint, wenn Dir mehrere User raten zunächst mit 2D zu beginnen, sondern eher ein gut gemeinter Rat. Denke mal in Ruhe darüber nach.

Gehe zu Seite Zurück  1, 2, 3

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group