Kollisionsproblem

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

Joscha

Betreff: Kollisionsproblem

BeitragMi, Jul 23, 2008 12:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo bin neu hier hab ein grosses Problem mit der Kollisionsabfrage zwischen der Map und dem Geschoss. Kann mir jemand helfen Question Ich bedanke mich schon im Voraus um eure bemühen.
Hier der Code:
Code: [AUSKLAPPEN]
Graphics3D 1600,1200,32,1

Const playercol=1
Const liftcol=1
Const teracol=2
Const meshcol=2
Const panzercol=1
Const panzer1col=1
Const geschoscol=1


Collisions playercol,meshcol,2,2


Global player=CreatePivot()
PositionEntity player,0,1,-1
EntityRadius player,.6
EntityType player,playercol

Global lift=LoadMesh("Lift.3ds")
EntityFX lift,liftcol
EntityType lift,2
Global timer=0

   Global tera=LoadTerrain("heightmap_2561.bmp")
   PositionEntity tera,61,78,-35
   ScaleEntity tera,1,30,1
   teratex=LoadTexture("MossyGround.bmp")
    ScaleTexture teratex,4,4
   EntityTexture tera,teratex
   EntityFX tera,1
   EntityType tera,teracol

Global camera=CreateCamera( player )
CameraRange camera,.1,200

gun=LoadMesh("pistol1.x", camera)
ScaleMesh gun,0.1,0.1,0.1
TurnEntity gun ,0,180,0
PositionEntity gun ,0.3,-0.3,0.3
EntityColor gun,50,50,50

Global geschos=LoadMesh ("Geschoss.3ds",camera)
PositionEntity geschos,0,0,0

visier=LoadMesh("Vis3d.3ds",camera)
PositionEntity visier, 0,0,1
TurnEntity visier, 90,0,0
EntityColor visier, 0,0,0

Global light=CreateLight()
LightColor light,32,32,32
TurnEntity light,45,-45,0

Global mesh=LoadMesh("map.x")
EntityFX mesh,1
EntityType mesh,meshcol

Global ey#=EntityY(player)


;;;;
;;Hauptschleife
;;;;;

While Not KeyHit(1)
   If KeyHit(17)
      wire=1-wire
      WireFrame wire
   EndIf

    yv#=EntityY(player)-ey
    ey=EntityY(player)
   If KeyDown(57) yv=.1
   
   MoveEntity player,0,yv-.005,0
   
   lift()
   move()
   
   UpdateWorld
   RenderWorld   

   
   timer=timer+1
   If timer=7600 Then timer=0
   
   shoot()
   MoveEntity geschos ,0,0,2

Flip

Wend

End
 
;;;;
;;Functionen
;;;;

Function move()
   
   If KeyDown(203) TurnEntity player,0,2,0
   If KeyDown(205) TurnEntity player,0,-2,0
   
   If KeyDown(200) MoveEntity player,0,0,0.05
   If KeyDown(208) MoveEntity player,0,0,-0.05
      
   If KeyDown(30) TurnEntity camera,-2,0,0
   If KeyDown(44) TurnEntity camera,+2,0,0
      
End Function




Function shoot()

   If KeyHit(34) Then PositionEntity geschos, 0.32,-0.15,0.2
   
End Function



Function lift()
   
   If timer=1 Then PositionEntity lift,-31,74,-16
   MoveEntity lift,0,-0.005,0
      
End Function

Vieleicht kann mir jemand Helfen.
Ich bedanke mich schon im Voraus um eure Bemühungen. Smile

Xeres

Moderator

BeitragMi, Jul 23, 2008 12:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du nicht schreibst was denn das Problem ist, wird's schwierig dir zu helfen...
Was ich dir sagen kann:
Code: [AUSKLAPPEN]
timer=timer+1
If timer=7600 Then timer=0

shoot()
MoveEntity geschos ,0,0,2

1. Der Timer ist so wie er da steht kein wirklicher Timer, da er von der Geschwindigkeit des Rechners abhängig ist. Eine konstruktion mit millisecs ist da besser (wenn du den Timer mal nutzt, mom. ja noch nicht).
2. Wenn du keinen besonders langsamen Rechner hast, ist eine Geschwindigkeit von 2 Einheiten / Schleifendurchlauf verdammt groß, zu testzwecken würde ich kleinere Werte verwenden.
3. Du solltest Flip 0 und einen Timer verwenden. Siehe hier für mehr infos.
  • Zuletzt bearbeitet von Xeres am Mi, Jul 23, 2008 12:56, insgesamt einmal bearbeitet

Mr.Keks

BeitragMi, Jul 23, 2008 12:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich sehe auch noch nicht dein Problem, du hast ja auch nur einfach Code hingeklatscht. Aber da ist noch kein ernsthafter Geschoss-Code drin: Schon mal überlegt, wie du mehrere Schüsse umsetzt? Und was dich vielleicht auch interessiert ist EntityCollided für den Schuss, um einen Treffer zu ermitteln.
MrKeks.net
 

Joscha

BeitragMi, Jul 23, 2008 13:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Problem ist das die Kugel durch die Wand geht und ungebremst weiter geht. Ich hab mir das so Gedacht das wenn die Kugel mit der Wand in Berührung kommt das dann die Kugel an einen anderen Ort versetzt wird.
Also: wenn zwei Objekte Kollidieren dann... so hatte ich mir das überlegt.

Meoqan

BeitragSa, Jul 26, 2008 21:39
Antworten mit Zitat
Benutzer-Profile anzeigen
hi!

hab mich mal hingesetzt und aus einem hilfe-beispiel vielecht das gemacht was du woltest:

!achtung: code nicht perfect aber funktionsfähig!

Code: [AUSKLAPPEN]

Graphics3D 800,600,32,2
SetBuffer BackBuffer()


camera=CreateCamera()
PositionEntity camera,0,15,0
EntityType camera,1
EntityRadius camera,2

light=CreateLight()
RotateEntity light,45,0,0

cube=CreateCube()
EntityType cube,2
EntityColor cube,0,100,0
PositionEntity cube,0,-5,0
ScaleEntity cube,10,10,10

cylinder=CreateCylinder(32)
EntityType cylinder,2
EntityColor cylinder,255,0,0
PositionEntity cylinder,0,7,0
ScaleEntity cylinder,2,2,2

Type bullet
   Field mesh,range
End Type
Global bullet.bullet

While Not KeyDown(1)
   
   msx=-MouseXSpeed()
   msy=MouseYSpeed()
   
   TurnEntity camera,msy,msx,0
   RotateEntity camera,EntityPitch#(camera),EntityYaw#(camera),0
   
   x#=EntityX#(camera)
   y#=EntityY#(camera)
   z#=EntityZ#(camera)
   If KeyDown(203)=1 Then MoveEntity camera,-0.1,0,0
   If KeyDown(205)=1 Then MoveEntity camera,0.1,0,0
   If KeyDown(208)=1 Then MoveEntity camera,0,0,-0.1
   If KeyDown(200)=1 Then MoveEntity camera,0,0,0.1
   Collisions 1,2,2,3
   UpdateWorld
   PositionEntity camera,EntityX#(camera),EntityY#(camera)-0.1,EntityZ#(camera)
   Collisions 1,2,2,3
   UpdateWorld
   If MouseHit(1) Then create_shot(EntityX#(camera),EntityY#(camera),EntityZ#(camera),EntityPitch#(camera),EntityYaw#(camera),EntityRoll#(camera))
   update_shot()
   RenderWorld
   col=CountCollisions(camera)
   Text 0,0,"Kollision(en):"
   Text 300,0,"1. Kollision mit:"+EntityCollided(camera,2)
   For i=1 To col
      Text 000,i*20,"Entity="+CollisionEntity(camera,i)
      Text 150,i*20,"Surface="+CollisionSurface(camera,i)
      Text 300,i*20,"Triangle="+CollisionTriangle(camera,i)
   Next
   Flip
   
   
   
Wend
End


Function create_shot(x#,y#,z#,pitch#,yaw#,roll#)
   bullet = New bullet
   bullet\mesh = CreateSphere(16)
   ScaleEntity bullet\mesh,0.1,0.1,0.1
   PositionEntity bullet\mesh,x#,y#,z#
   RotateEntity bullet\mesh,pitch#,yaw#,roll#
   EntityType bullet\mesh,3
   EntityRadius bullet\mesh,0.1
   bullet\range=150
End Function

Function update_shot()
   For bullet = Each bullet
      del=False
      MoveEntity bullet\mesh,0,0,0.2
      Collisions 3,2,2,1
      UpdateWorld
      If CountCollisions(bullet\mesh) >0 Then
         cub=CreateCube()
         ScaleEntity cub,0.05,0.05,0.05
         PositionEntity cub,EntityX#(bullet\mesh),EntityY#(bullet\mesh),EntityZ#(bullet\mesh)
         del = True
      EndIf
      bullet\range=bullet\range-1
      If bullet\range=0 Then del = True
      
      If del Then
         FreeEntity bullet\mesh
         Delete bullet
      EndIf
   Next
End Function


meine codes sind die essenz des bössen. nicht du veränderst meine codes sondern meine codes verändern dich!
 

Joscha

BeitragSo, Jul 27, 2008 12:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen dank genau das wollte ich wissen Very Happy danke für dein bemühen.

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group