Entity collision

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
benpicco
Beiträge: 391
Registriert: 01.10.2004 15:32
Wohnort: im Code
Kontaktdaten:

Entity collision

Beitrag von benpicco »

hier passt das wohl besser...
Gibt es eine Möglichkeit, abzufragen, ob ein entity mit einem 2ddrawing object collidiert?
Ich möchte die Roberter anwählen und durch die gegend schicken können.
(mein erster 3d versuch...)
Hier mein bisheriger code:

Code: Alles auswählen

InitEngine3D()
#CameraSpeed = 20
#max=10
Dim marked.b(#max)
IncludeFile "Screen3DRequester.pb"
DefType.f KeyX, KeyY, MouseX, MouseY
#RobotMesh    = 2
#RobotTexture = 2
Dim movX.b(#max)
Global x.b
Dim movZ.b(#max)
Dim movY.b(#max)
;TransparentSpriteColor(0,0,0,0)

Add3DArchive("3d\", #PB_3DArchive_FileSystem)

LoadImage(1,"grafic\cursor.bmp")

InitSprite()
InitSprite3D()
Sprite3DQuality(1)
InitKeyboard()
InitMouse()
ClearScreen(0,0,0)
If Screen3DRequester()
AmbientColor(RGB(255,255,255))
CreateMaterial  (0, LoadTexture(0, "Terrain_Texture.jpg"))
AddMaterialLayer(0, LoadTexture(1, "Terrain_Detail.jpg"), 1)
CreateTerrain("Terrain.jpg", MaterialID(0), 5, 1, 5, 4)
FOV = 65
CreateCamera(0, 0, 0, 100, 100)
CameraLocate(0, 500, 800, 400)
CreateCamera(1,0,0,25,20)
CameraLocate(1, 500, 800, 400)
RotateCamera(0,0,-90,0)
RotateCamera(1,0,-90,0)
CameraRenderMode(1,#PB_Camera_Wireframe)
CameraFOV(0,65)
SkyDome("sky.jpg",1)
LoadMesh(#RobotMesh, "Robot.mesh")
LoadTexture(#RobotTexture, "r2skin.jpg")
CreateMaterial(1,TextureID(#RobotTexture))
For x=1 To #max/2
CreateEntity(x,MeshID(#RobotMesh),MaterialID(1))
EntityLocate(x,500,10,300+x*50)
AnimateEntity(x, "Walk")
Next
For x=1 To #max/2
  CreateEntity(x+#max/2,MeshID(#RobotMesh),MaterialID(1))
  EntityLocate(x+#max/2,400,10,300+x*50)
  AnimateEntity(x+#max/2, "Walk")
Next
For x=1 To #max
  movX(x)=3
Next
Fog(RGB(220,220,220),1,1000,1500)
FreeCamera(1)
CreateLight(1,RGB(255,0,0),400,0.6,400)
MouseLocate(250,250)
RotateCamera(0,0,30,0)
mov=3
;MessageRequester("info","sceenhight:"+Str(ScreenHeight)+" ScreenWitdh:"+Str(ScreenWidth))
Repeat
  Screen3DEvents() 
  For x=1 To #max
  If EntityX(x)=>800
    RotateEntity(x,180,0,0)    
   movX(x)=-3
ElseIf EntityX(x)<=250
    movX(x)=3
    RotateEntity(x,180,0,0)  
  EndIf
  If TerrainHeight(EntityX(x),EntityZ(x))>EntityY(x)+1
    movY(x)=3
    If movX(x)>0
 movX(x)=2
    ElseIf movX(x)<0
 movX(x)=-2
    EndIf
  ElseIf TerrainHeight(EntityX(x),EntityZ(x))<EntityY(x)+1
    movY(x)=-3
    If movX(x)>0
 movX(x)=4
    ElseIf movX(x)<0
 movX(x)=-4
    EndIf
  Else
    movY(x)=0
  EndIf
  
  MoveEntity(x,movX(x),movY(x),0)
Next
  
  LightColor(1,RGB(Random(255),Random(255),Random(255))) 
  ExamineMouse()
  CameraLocate(0,CameraX(0),800,CameraZ(0)) 
  KeyX=0
  KeyY=0
  If MouseX()=0
    KeyX = -#CameraSpeed 
    ElseIf MouseX()>=(ScreenWidth-2)
      KeyX = #CameraSpeed 
    EndIf
    
    If MouseY()=0 
      KeyY = -#CameraSpeed 
    ElseIf MouseY()>=(ScreenHeight-2) 
      KeyY = #CameraSpeed 
    EndIf
    
    ExamineKeyboard()
    MouseX = 0
    If KeyboardPushed(#PB_Key_Pad4)
      MouseX=-#CameraSpeed/2
  ElseIf KeyboardPushed(#PB_Key_Pad6)
    MouseX=#CameraSpeed/2
  EndIf
  MouseY=0
  If KeyboardPushed(#PB_Key_Pad2)
    MouseY=-#CameraSpeed/2
  ElseIf KeyboardPushed(#PB_Key_Pad8)
    MouseY=#CameraSpeed/2
  EndIf
  
  If KeyboardPushed(#PB_Key_Up)
    KeyY=-#CameraSpeed*2
  ElseIf KeyboardPushed(#PB_Key_Down)
    KeyY=#CameraSpeed*2
  EndIf
  
  If KeyboardPushed(#PB_Key_Left)
    KeyX=-#CameraSpeed*2
  ElseIf KeyboardPushed(#PB_Key_Right)
    KeyX=#CameraSpeed*2
  EndIf
    If KeyboardPushed(#PB_Key_F12)
      GrabSprite(2,0,0,ScreenWidth,ScreenHeight)
      SaveSprite(2,"Screenshot.bmp")
    EndIf

    Height.f = TerrainHeight(CameraX(0), CameraZ(0))
    If MouseWheel()>0
    FOV - 1 : If FOV < 40:FOV=40:EndIf
  CameraFOV(0,FOV):EndIf
  If MouseWheel()<0
    FOV + 1 : If FOV > 120:FOV=120:EndIf
  CameraFOV(0,FOV):EndIf
  RotateCamera(0, MouseX, MouseY, RollZ)
  MoveCamera  (0, KeyX, -KeyY, 0)
  ;RotateCamera(1, MouseX, 0, RollZ)
  ;MoveCamera  (1, KeyX, -KeyY, 0)
  RenderWorld()
  Screen3DStats()
  If MouseButton(1)=1
    If mark=0
      mark=1
      startX=MouseX()
      startY=MouseY()
      For x=1 To #max
        marked(x)=0
      Next
    EndIf
    
    StartDrawing(ScreenOutput())
    DrawingMode(4)
    Box(startX,startY,MouseX()-startX,MouseY()-startY,RGB(0,255,0))
    StopDrawing()
    
    
  Else
    mark=0
  EndIf 
  StartDrawing(ScreenOutput())
  DrawImage(UseImage(1),MouseX(),MouseY())
  DrawingMode(1)
  FrontColor(255,255,255)
  Locate(1,1)
  DrawText("X:"+Str(CameraX(0)))
  Locate(1,20)
  DrawText("Y:"+Str(CameraY(0)))
  Locate(1,40)
  DrawText("Z:"+Str(CameraZ(0)))
  Locate(1,60)
  DrawText("MausX:"+Str(MouseX()))
  Locate(1,80)
  DrawText("MausY:"+Str(MouseY()))
  StopDrawing()
  ;DisplayTransparentSprite(1,MouseX(),MouseY())
  FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
EndIf 
Die benötigten dateien sind im Beispielordner (ich möchte sie nicht hochladen, ich hab da wohl grad ein kleines Virenproblem...), die datei curor.bmp gibt´s hier:
Bild
Danke schonmal für die Antwort.
Johann Wolfgang von Geothe hat geschrieben:Wie dieses oder jenes Wort geschrieben wird, darauf kommt es doch eigentlich nicht an, sondern darauf, daß die Leser verstehen, was man damit sagen wollte.