Kollision funktioniert nicht ganz

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

dont_know_to_use

Betreff: Kollision funktioniert nicht ganz

BeitragDo, Dez 22, 2011 16:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey
In diesem Code fliegt ein Laserschuss auf ein Objekt zu, sobald der Schuss auf dem Objekt aufprallt, soll ein Sprite dort angezeigt werden, dummerweise passiert gar nichts, der Schuss fliegt einfach durch das Objekt hindurch, das ist mein Code:
BlitzBasic: [AUSKLAPPEN]
EntityPick(laser,12)
Picked2=PickedEntity()
If Picked2<>0 Then
For i=1 To CountCollisions(laser)
PositionEntity Explosion,CollisionX(laser,i),CollisionY(laser,i),CollisionZ(laser,i)
Next
EndIf

Ich bin mir nicht sicher was falsch ist. Confused

Xeres

Moderator

BeitragDo, Dez 22, 2011 17:04
Antworten mit Zitat
Benutzer-Profile anzeigen
EntityPick hat nichts mit Collisions zu tun - das wird das größte Problem sein.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

dont_know_to_use

BeitragDo, Dez 22, 2011 17:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Selbst wenn ich das wegmache, dem Laser und dem Objekt per EntityType verschiedene Werte zuweise und das ganze mit Collisions prüfe, bleibt es das gleiche. Sad

Xeres

Moderator

BeitragDo, Dez 22, 2011 17:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Mal sehen... du brauchst:
EntityType, EntityRadius, Collisions, CountCollisions und UpdateWorld.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

dont_know_to_use

BeitragDo, Dez 22, 2011 17:28
Antworten mit Zitat
Benutzer-Profile anzeigen
EntityRadius brauche ich doch nur bei runden Objekten? Die Sache ist die, dass das Objekt, was von dem Laser getroffen wird, ein Auto ist, also nicht rund. Wink
Ansonsten habe ich alles.

Xeres

Moderator

BeitragDo, Dez 22, 2011 17:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Welchen Kollisionstyp gibst du denn an? Und in welcher Reihenfolge?
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

dont_know_to_use

BeitragDo, Dez 22, 2011 17:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Moment, vielleicht liegt das Problem woanders. Funktioniert Collisions auch dann, wenn es schon vor EntityType kommt? Mein Code schaut ungefähr so aus:
BlitzBasic: [AUSKLAPPEN]
EntityType auto,2
Collisions 3,2,2,2

;...

laser=LoadMesh()
EntityType laser,3
EntityRadius laser,2
For i=1 To CountCollisions(laser)
PositionEntity Explosion,CollisionX(laser,i),CollisionY(laser,i),CollisionZ(laser,i)
Next

Die Kollision an sich funktioniert auch, aber das Sprite wird nicht an der Kollisionsstelle angezeigt.

Xeres

Moderator

BeitragDo, Dez 22, 2011 17:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann werde dir doch bitte erst mal klar, was - oder wo - eigentlich das Problem ist. Aus einem nicht lauffähigen Beispiel kann man nur das gröbste herauslesen.
Hier sehe ich jedenfalls nichts gravierendes - ob es in dieser Reihenfolge funktioniert, sollte ja schnell offensichtlich sein.

Wenn du weißt, was los ist, schreib ein lauffähiges Mini-Beispiel, das den Fehler demonstriert, und das hier schnell verbessert werden kann. Vielleicht siehst du währenddessen ja schon, was passiert. Das debuging ist aber erst mal dein Bier.

In diesem Sinne: Prost & viel Erfolg.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

skey-z

BeitragDo, Dez 22, 2011 19:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich würde Collisions nach dem laden der Objekte setzen, weil es die Collision zuvor noch nicht geben kann.

dem Schuss würde ich als Kugel-Kollision und das Auto als Polygon-Kollision erstellen und dann benötigst du EntityRadius.

Als optimierung würde ich aber erst mal mit EntityDistance prüfen, ob der Schuss in der nähe des Autos ist
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz
BAC#57: 2. Platz
Twitter

ZEVS

BeitragDo, Dez 22, 2011 20:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn es dir um Geschwindigkeit geht, würde ich nicht auf EntityDistance zurückgreifen, sondern die Abfrage selbst machen. Die Wurzelfunktion von EntityDistance haut nämlich ziemlich rein.
Eine Möglichkeit wäre es z.B., eine Box-Kollision zu berechnen, was schneller sein kann. Aber auch bei einer Kugel-Kugel-Kollision kommt man um die Wurzel herum:
Code: [AUSKLAPPEN]
Radius1+Radius2 < Sqr(VektorX*VektorX+VektorY*VektorY+VektorZ*VektorZ)    |()^2
(Radius1+Radius2)*(Radius1+Radius2) < VektorX*VektorX+VektorY*VektorY+VektorZ*VektorZ

Die Summe der Radien kann man einmal ausrechnen. Die Vektoren sind immer VektorA = A1-A2 (mit A als X, Y und Z). Das zur Geschwindigkeit.
@dont_know_to_use: Das Beispiel erscheint mir nicht sinnvoll. Der Laser wird ja wohl nicht unmittelbar vor der Kollisionsprüfung intalisiert. Ich kann mich Xeres' Bitte nur anschließen.

ZEVS

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group