Kollision will nicht

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

prhorus

Betreff: Kollision will nicht

BeitragSo, Jan 07, 2007 15:56
Antworten mit Zitat
Benutzer-Profile anzeigen
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"

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSo, Jan 07, 2007 16:45
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Jan 07, 2007 17:06
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Jan 07, 2007 19:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Keine Antwort? Ok, lange Codes schrecken ab Very Happy

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!!!!!!!!!!! Shocked
 

Dreamora

BeitragSo, Jan 07, 2007 19:22
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Jan 07, 2007 19:39
Antworten mit Zitat
Benutzer-Profile anzeigen
oh, stimmt. Das wusste ich auch nicht. Danke!

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group