Player kollidiert nur teilweise oder garnicht...*gelöst*

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

5k41

Betreff: Player kollidiert nur teilweise oder garnicht...*gelöst*

BeitragMo, Jan 30, 2006 18:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo!
Ich hab mich in letzter Zeit ein bisschen mit 3D beschäftigt... und hab sofort mein erstes Problem mit (mit was sollte ich sonst Probleme haben) der KOLLISION! Ich wette das ist der 2000 Thread zu dem Problem aber ich konnte unter der Forum suche nichts finden...mein Problem am anfang war, das wenn ich meine schwerkraft benutze die objekkte in den Boden sunken...nun ist es noch erweiteret...ich wollte die Karte (das 3D Objekt) drehen und auf einmal, ab einem Bestimmten Winkel setzt die Kollision ganz aus...hier mein Code:
Code: [AUSKLAPPEN]

Graphics3D 1024,768,32,1

SetBuffer BackBuffer()

cam1=CreateCamera()
   PositionEntity cam1,-120,0,0
   TurnEntity cam1,0,270,0
   CameraViewport cam1,0,0,512,768
cam2=CreateCamera()
   PositionEntity cam2,120,0,0
   TurnEntity cam2,0,90,0
   CameraViewport cam2,512,0,512,768
;cam3=CreateCamera()
;   PositionEntity cam3,0,0,-100
;   CameraViewport cam3,412,924,100,100

Const PLAYER=1,KUGEL=2,WAND=3,TOR2=4,TOR1=5

light=CreateLight(1)

d_winkel#=0
p1_ygrav#=0
p1_zgrav#=0
p2_ygrav#=0
p2_zgrav#=0
gravity#=2.5
gspeed#=1
speed#=gspeed

;Environment

Dim env(12)

;oben/unten

env(12)=CreateCube()
   ScaleEntity env(12),1,1,1
   EntityColor env(12),0,0,255
   EntityType env(12),WAND

env(0)=CreateCube()
   ScaleEntity env(0),80,1,20
   EntityColor env(0),0,0,255
   PositionEntity env(0),0,-40,0
   EntityType env(0),WAND
   EntityParent env(0),env(12)
env(1)=CreateCube()
   ScaleEntity env(1),80,1,20
   EntityColor env(1),0,0,255
   PositionEntity env(1),0,40,0
   EntityType env(1),WAND
   EntityParent env(1),env(12)

;links
   
env(2)=CreateCube()
   ScaleEntity env(2),4,10,20
   EntityColor env(2),0,0,255
   PositionEntity env(2),-78,-31,0
   EntityType env(2),WAND
   EntityParent env(2),env(12)
env(3)=CreateCube()
   ScaleEntity env(3),4,10,20
   EntityColor env(3),0,0,255
   PositionEntity env(3),-78,31,0
   EntityType env(3),WAND
   EntityParent env(3),env(12)

;rechts
   
env(4)=CreateCube()
   ScaleEntity env(4),4,10,20
   EntityColor env(4),0,0,255
   PositionEntity env(4),78,-31,0
   EntityType env(4),WAND
   EntityParent env(4),env(12)
env(5)=CreateCube()
   ScaleEntity env(5),4,10,20
   EntityColor env(5),0,0,255
   PositionEntity env(5),78,31,0
   EntityType env(5),WAND
   EntityParent env(5),env(12)
   
;mitte

env(6)=CreateCube()
   ScaleEntity env(6),1,10,20
   EntityColor env(6),0,0,255
   PositionEntity env(6),0,-31,0
   EntityType env(6),WAND
   EntityParent env(6),env(12)
env(7)=CreateCube()
   ScaleEntity env(7),1,10,20
   EntityColor env(7),0,0,255
   PositionEntity env(7),0,31,0
   EntityType env(7),WAND
   EntityParent env(7),env(12)
   
;Glas   
   
env(8)=CreateCube()   
   ScaleEntity   env(8),80,41,1
   EntityColor env(8),0,0,140
   EntityAlpha env(8),.3
   PositionEntity env(8),0,0,-19
   EntityType env(8),WAND
   EntityParent env(8),env(12)
env(9)=CreateCube()
   ScaleEntity   env(9),80,41,1
   EntityColor env(9),0,0,140
   EntityAlpha env(9),.3   
   PositionEntity env(9),0,0,19
   EntityType env(9),WAND
   EntityParent env(9),env(12)
   
;Tor (Glas)

env(10)=CreateCube()
   ScaleEntity env(10),1,21,20
   EntityColor env(10),255,0,0
   EntityAlpha env(10),.2
   PositionEntity env(10),-80,0,0
   EntityType env(10),TOR2
   EntityParent env(10),env(12)

env(11)=CreateCube()
   ScaleEntity env(11),1,21,20
   EntityColor env(11),255,0,0
   EntityAlpha env(11),.2
   PositionEntity env(11),80,0,0
   EntityType env(11),TOR1
   EntityParent env(11),env(12)
   
   
;PLAYER!

player1=CreateCube()
   ScaleEntity player1,1,7,4
   EntityColor player1,255,0,255
   EntityAlpha player1,.6
   PositionEntity player1,-77,0,0
   EntityType player1,PLAYER
player2=CreateCube()
   ScaleEntity player2,1,7,4
   EntityColor player2,255,0,0
   EntityAlpha player2,.6
   PositionEntity player2,77,0,0
   EntityType player2,PLAYER
   
;Ball

ball=CreateSphere()
   EntityType ball,2

;Erster WInkel

b_x_winkel=Rand(360)
b_y_winkel=Rand(360)
b_z_winkel=Rand(360)

;Kollision   

Collisions PLAYER,WAND,2,2
Collisions KUGEL,WAND,2,2
Collisions KUGEL,PLAYER,2,2
Collisions KUGEL,TOR2,2,2
Collisions KUGEL,TOR1,2,2

;//////////////////////////////////////////Hauptschleife\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

While Not KeyDown(1)
;Player   
   
   If KeyDown(200) Then MoveEntity player1,0,(gravity/10)+1,0
   If KeyDown(208) Then MoveEntity player1,0,-1,0
   If KeyDown(203) Then MoveEntity player1,0,0,+1
   If KeyDown(205) Then MoveEntity player1,0,0,-1
   If KeyDown(17) Then MoveEntity player2,0,(gravity/10)+1,0
   If KeyDown(31) Then MoveEntity player2,0,-1,0
   If KeyDown(30) Then MoveEntity player2,0,0,-1
   If KeyDown(32) Then MoveEntity player2,0,0,+1
   
;Drehung   
   
   TurnEntity env(12),.05,0,0
   TurnEntity player1,.05,0,0
   TurnEntity player2,.05,0,0

;Ball

   If EntityCollided(ball,3)<>0 Then
      b_x_winkel=(b_x_winkel*(-1)) Mod 360
      b_y_winkel=(b_y_winkel*(-1)) Mod 360
      b_z_winkel=(b_z_winkel*(-1)) Mod 360
      If speed>.1 Then speed=speed-.001
   ElseIf EntityCollided(ball,1)<>0 Then
      b_x_winkel=(b_x_winkel*(-1)) Mod 360
      b_y_winkel=(b_y_winkel*(-1)) Mod 360
      b_z_winkel=(b_z_winkel*(-1)) Mod 360
      If speed>.001 Then speed=speed-.001
   ElseIf EntityCollided(ball,4)<>0 Then
      p2_tor=p2_tor+1
      PositionEntity ball,0,0,0
      speed=gspeed
   ElseIf EntityCollided(ball,5)<>0 Then
      p1_tor=p1_tor+1
      PositionEntity ball,0,0,0
      speed=gspeed
   EndIf

   If b_x_winkel<0 Then b_x_winkel=b_x_winkel+360
   If b_y_winkel<0 Then b_y_winkel=b_y_winkel+360
   If b_z_winkel<0 Then b_z_winkel=b_z_winkel+360

   MoveEntity ball,Sin(b_y_winkel)/speed,Cos(b_x_winkel)/speed,Tan(b_z_winkel)/speed
   
;Gravity   

   PositionEntity player1,EntityX(player1),EntityY(player1)-(gravity/5),EntityZ(player1)
   PositionEntity player2,EntityX(player2),EntityY(player2)-(gravity/5),EntityZ(player2)   
   
   UpdateWorld
   RenderWorld
   
   Text 0,0,p1_tor
   Text 0,14,p2_tor
   
   Flip
   
Wend

End

ja ich weiss mit der Ball-Physik hab ichs noch nicht so aber das ist im moment erstmal egal ich will erstmal das die Kollision geht...Sad
Projekte:
For a better World - Gesellschaftsspiel ( 100%)

User posted image
  • Zuletzt bearbeitet von 5k41 am Di, Jan 31, 2006 13:59, insgesamt einmal bearbeitet
 

Beaner

BeitragMo, Jan 30, 2006 20:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja ich denk mal das ist das alte Problem mit Kollisionen zwischen zwei sich bewegenden Objekten. Hier is mal nen Beispielcode der sich mit dem Problem befaßt http://www.blitzbasic.com/code...p?code=898 vielleicht hilfts dir ja

5k41

BeitragMo, Jan 30, 2006 21:57
Antworten mit Zitat
Benutzer-Profile anzeigen
ohje...das is ja komplexer als ich dachte...scheiß collisions befehl Wink na ok werd mir das mal angucken...das problem das die dinger halb im boden versinken bleibt ja dann aber trozdem oder nicht? auf jedenfall erstmal danke!
Projekte:
For a better World - Gesellschaftsspiel ( 100%)

User posted image

5k41

BeitragDi, Jan 31, 2006 10:46
Antworten mit Zitat
Benutzer-Profile anzeigen
ich bin grad den code durchgeganen und da ist mir das hier aufgefallen:
http://www.blitzbasic.com/code...p?code=898 hat Folgendes geschrieben:
Limitations:
Only works with spheres as source entities
Only works if the source entity is colliding with one dynamic entity at once

ich kann beides nicht gewährleisten...gibt es noch eine andere möglichkeit
mit bewegenden objekten zu kollidieren?Kann doch nicht sein das das nicht funktioniert!

~Edit~
Ich hab grad einfach mal die Drehung der Umgebung ausgeschaltet und die spieler sind immer noch zur hälfte im boden versunken...woran kann das denn liegen?
Projekte:
For a better World - Gesellschaftsspiel ( 100%)

User posted image
 

Dreamora

BeitragDi, Jan 31, 2006 11:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Das der 0 Punkt der Figur nicht an ihren Füssen ist bzw. du die Figur nicht entsprechend anderst positionierst.

Kollisionen von dynamischen Objekten solltest du eigentlich als Kugelförmig garantieren können, denn etwas anderes ist leider nicht sonderlich schnell ...
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

5k41

BeitragDi, Jan 31, 2006 11:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok das mit dem Nullpunkt seh ich ein aber wie bekomm ich den denn so hin das er mit der ganzen fläche kollidier? ich mein er sackt ja nach oben, unten, recht und links ein...muss man dann mit EntityBox arbeiten? Ich dachte das Collisions nicht nur eine kollision mit dem Nullpunkt macht sondern das selbst berechnet...
ne kugelförmige kollision soll mir von mir aus recht sein aber da steht mit Spheres as Entitys also mit kugeln generell oder soll ich dann einfach da nen alpha auf 0 setzten? das Problem das die Kollision mit mehr als einem Objekt funktionieren soll bleibt immer noch...

~Edit~
Oder ist mit Objekt Objekt-Typ gemeint?
Projekte:
For a better World - Gesellschaftsspiel ( 100%)

User posted image

5k41

BeitragDi, Jan 31, 2006 13:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Problem gelöst! Ich hatte nur einene kleinen Denkfehler! Ich konnte genausogut die Camera drehen brauchte dann nur noch ein paar sin(cos formeln...vielen dank han Hectic!
Projekte:
For a better World - Gesellschaftsspiel ( 100%)

User posted image

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group