Kollision will nicht
Übersicht

![]() |
prhorusBetreff: Kollision will nicht |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi Leute!
Ich bin grad dabei, ein einfaches rumfliege Spiel zu machen. Ich hab schon Erfahrung in Blitz2D, aber 3D ist neu. Jetzt will ich mein "Flugzeug" mit dem Raum auf Kollision prüfen lassen. Der Raum wird später ein richtiges Mesh haben, deshalb möchte ich eine Kugel-Polygon-Kollision prüfen. Ich hab wirklich alles wie in der Hilfe gemacht, es geht aber nicht: Code: [AUSKLAPPEN] ;Welt welt = CreateCube() EntityType welt,WELT_TYPE ScaleEntity welt,250,100,150 FlipMesh welt ;wegen Textur, etc. ;Type-Variablen Const FLIEGER_TYPE = 1, WELT_TYPE = 2 ;Flieger erstellen Global flieger=LoadMesh( "test.x") Global camera=CreateCamera(flieger) PositionEntity camera, 0,2,-5.8 CameraRange camera,0.01,1000 EntityType flieger,SPIELER_TYPE EntityRadius flieger,1.5 Dann in der Schleife mach ich eine wirklich einfache Abfrage: Code: [AUSKLAPPEN] ;Kollisionen Collisions PLAYER_TYPE,WELT_TYPE,2,2 abc = CountCollisions(flieger) If abc>0 Then DebugLog abc If EntityCollided(flieger,welt) Then DebugLog "kollidiert" |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] ;Welt
welt = CreateCube() EntityType welt,WELT_TYPE ScaleEntity welt,250,100,150 FlipMesh welt ;wegen Textur, etc. ;Type-Variablen Const FLIEGER_TYPE = 1, WELT_TYPE = 2 WELT_TYPE wird abgefragt, befor die Variable ein Wert zugewiesen bekommt. |
||
![]() |
prhorus |
![]() Antworten mit Zitat ![]() |
---|---|---|
Jo, aber soweit ich weiß, ist das bei Konstanten egal.
Hab's probiert, klappt immer no nicht(das Beispiel aus der Onlinehilfe klappt dagegen problemlos) Ich weiß nicht ob es hilft, aber hier ist mal der ganze Code: Code: [AUSKLAPPEN] Graphics3D 640, 480 SetBuffer BackBuffer() ;Texturen textur = LoadTexture("muster.bmp") textur2 = LoadTexture("flieger.jpg") ScaleTexture textur,0.5,0.5 ScaleTexture textur2,6,6 ;Type-Variablen Const FLIEGER_TYPE = 1, WELT_TYPE = 2 ;Welt welt = CreateCube() EntityType welt,WELT_TYPE EntityTexture welt,textur ScaleEntity welt,250,100,150 FlipMesh welt ;Flieger erstellen Global flieger=LoadMesh( "test.x") Global camera=CreateCamera(flieger) PositionEntity camera, 0,2,-5.8 CameraRange camera,0.01,1000 ;-----------FLIEGER einstellen EntityTexture flieger, textur2 ;Kollisionseigenschaften flieger EntityType flieger,SPIELER_TYPE EntityRadius flieger,1.5 ;Variablen acc# = 0 roll# = 0 roll_ausgleich# = 0 pitch# = 0 yaw# = 0 ;Konstanten Const ROLL_AUSGLEICH_SPEED = 30 ;je größer, desto langsamer ;=======================BEGINN DER SCHLEIFE========================================= Repeat ;Kollisionen Collisions WELT_TYPE,FLIEGER_TYPE,2,2 abc = CountCollisions(flieger) If abc>0 Then DebugLog abc If EntityCollided(flieger,welt) Then DebugLog "sdfsdfsdfs" ;===============================Ignorierbarer-Teil-Anfang================================== ;==================================================================================== ;===================================================================================== ;Rotationen If KeyDown(203) Then yaw# = yaw# + 1 ElseIf KeyDown(205) Then yaw# = yaw# - 1 EndIf If KeyDown(200) Then pitch# = pitch# + 1 ElseIf KeyDown(208) Then pitch# = pitch# -1 EndIf If KeyDown(30) Then roll# = roll# + 1 rolltgerade = 1 ElseIf KeyDown(32) Then roll# = roll# - 1 rolltgerade = 1 Else rolltgerade = 0 EndIf ;Beschleunigung und Bewegung If KeyDown(17) Then acc = acc+0.08 If KeyDown(31) Then acc = acc-0.03 If acc > 0 Then acc=acc-0.008 If acc < 0 Then acc=0 If acc > 2.5 Then acc=2.5 MoveEntity flieger,0,0,acc ;Schwerkraft TranslateEntity flieger,0,-0.1,0 ;Umrechnung, damit es keine Rotationen von 500 o.Ä. gibt yaw# = yaw# Mod 360 pitch# = pitch# Mod 360 roll# = roll# Mod 360 ;Roll Ausgleich If roll# <> 0 And rolltgerade = 0 Then roll_ausgleich# = (-1)*(roll#/ROLL_AUSGLEICH_SPEED) If roll_ausgleich# < 0.1 And roll_ausgleich# > 0 Then roll_ausgleich# = 0.1 ElseIf roll_ausgleich# > -0.1 And roll_ausgleich# < 0 Then roll_ausgleich# = -0.1 EndIf roll# = roll# + roll_ausgleich# If roll# < 0.1 And roll# > -0.1 Then roll# = 0 EndIf EndIf RotateEntity flieger,pitch#,yaw#,roll# ;===============================Ignorierbarer-Teil-Ende================================== ;==================================================================================== ;===================================================================================== WireFrame(0) UpdateWorld RenderWorld Flip Until KeyDown(1) End |
||
![]() |
prhorus |
![]() Antworten mit Zitat ![]() |
---|---|---|
Keine Antwort? Ok, lange Codes schrecken ab ![]() Nach subjektiv geschätzten 3-4 Stunden Debugarbeit hab ich den Fehler gefunden. Ich habe dem Flieger den Type SPIELER_TYPE zugewiesen(der nicht mehr existier), statt FLIEGER_TYPE AHHHHHHHHHHHHHHHHH!!!!!!!!!!! ![]() |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ein Problem ist das du versuchst gegen "Welt" zu prüfen. Das ist falsch. Du musst in EntityCollided als zweites den Collisionstyp angeben wo Welt drin ist und die Rückgabe dann überprüfen. | ||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
prhorus |
![]() Antworten mit Zitat ![]() |
---|---|---|
oh, stimmt. Das wusste ich auch nicht. Danke! | ||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group