Fragen zum 3D Beispiel FPSFirstPerson.pb

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
Makke
Beiträge: 156
Registriert: 24.08.2011 18:00
Computerausstattung: AMD Ryzen 7 5700X - AMD Radeon RX 6800 XT - 32 GB DDR4 SDRAM
Wohnort: Ruhrpott
Kontaktdaten:

Re: Fragen zum 3D Beispiel FPSFirstPerson.pb

Beitrag von Makke »

Hi,

habe es auf relative Bewegung umgestellt, hat aber leider keinen Erfolg gebracht, ausser, wenn ich dann mit eingeschalteter Physic-Engine den Spieler (die sichtbare Figur) nicht bewege, fliegt er nach oben ohne das er einen Physikalischen Körper zugewiesen bekommen hat. Sehr komisch das ganze.

Zur Hitbox:

Ich habe das Mesh ja selber animiert und umgewandelt, also habe ich den Bones (Knochen) vernünftige Namen gegeben z.B. Body_Hip, Finger_Fore_left, Leg_Knee_Right usw. die Position dieser Knochen kann man mit EntityBoneX(Entity, BoneName) abfragen. an die entsprechenden Bones (Kopf, Arme, Körper, Ober- und Unterschenkel) habe ich dann einfach per Purebasic erstellte Meshes (Cubes bzw. Sphere beim Kopf) angehängt und aktualisiere die nach der Spielerfigurbewegung.

Hier mal wie die Erstellung der Hitbox in meinem Code aussieht:

Code: Alles auswählen

Procedure.i Player_CreateHitboxPart(hEntity.i, hParentEntity.i, sBone.s, hMesh.i, iPhysicBody.i, *offset.fVector3, hMaterial.i=0, scaleX.f=1.0, scaleY.f=1.0, scaleZ.f=1.0, rotate.b=#True)
  Shared      Player
  Shared      DebugWorld
  Protected.f scale = Player\entityScaleFactor
  Protected.f rota  = Player\entityRotationCorrector
  Protected.i result, materialID
  
  If hMaterial = 0
    materialID = #PB_Material_None
  Else
    materialID = MaterialID(hMaterial)
  EndIf
  
  result = CreateEntity(hEntity, MeshID(hMesh), materialID)
  If hEntity = #PB_Any
    hEntity = result
  EndIf
  EntityRenderMode(hEntity, #PB_Entity_NoShadows)
  scaleX * scale : scaleY * scale : scaleZ * scale
  ScaleEntity(hEntity, scaleX, scaleY, scaleZ, #PB_Absolute)
  MoveEntity(hEntity, EntityBoneX(hParentEntity, sBone, *offset\x, *offset\y, *offset\z), EntityBoneY(hParentEntity, sBone, *offset\x, *offset\y, *offset\z), EntityBoneZ(hParentEntity, sBone, *offset\x, *offset\y, *offset\z), #PB_Absolute)
  If rotate
    RotateEntity(hEntity, 180+EntityBonePitch(hParentEntity, sBone), 180+EntityBoneYaw(hParentEntity, sBone), 180+EntityBoneRoll(hParentEntity, sBone), #PB_Absolute)
    Debug EntityBonePitch(hParentEntity, sBone)
    Debug EntityBoneYaw(hParentEntity, sBone)
    Debug EntityBoneRoll(hParentEntity, sBone)
  EndIf
  EntityPhysicBody(hEntity, iPhysicBody, 1, 0, 0)
  If DebugWorld = 0
    HideEntity(hEntity, #True)
  EndIf
  
  ProcedureReturn result
    
EndProcedure

Procedure Player_CreateHitbox()
  Shared Player
  Protected.i tempTexture, tempMaterial, tempMesh, tempMesh2
  
  tempTexture = CreateTexture(#PB_Any, 1, 1)
  StartDrawing(TextureOutput(tempTexture))
  Plot(0, 0, RGB(255,0,255))
  StopDrawing()
  tempMaterial = CreateMaterial(#PB_Any, TextureID(tempTexture))
  tempMesh = CreateCube(#PB_Any, 20)
  tempMesh2 = CreateSphere(#PB_Any, 10)
  
  With Player\Hitbox
    
    \boneBody   = "body17"
    \OffsetBody\x = 0
    \OffsetBody\y = 0
    \OffsetBody\z = 4
    \entityBody = Player_CreateHitboxPart(#PB_Any, Player\entity, \boneBody, tempMesh, #PB_Entity_BoxBody, \OffsetBody, tempMaterial, 1.6, 3.2, 1.4, #False)
        
    \boneHead   = "head1"
    \OffsetHead\x = 0
    \OffsetHead\y = 4
    \OffsetHead\z = -2
    \entityHead = Player_CreateHitboxPart(#PB_Any, Player\entity, \boneHead, tempMesh2, #PB_Entity_SphereBody, \OffsetHead, tempMaterial, 1.0, 1.4, 1.2, #False)
   .
   .
   .
Das einzige was überhaupt nicht funktionieren will ist die korrekte Rotation, die Funktionen EntityBoneYaw() usw. geben alle irgendwie immer das gleiche aus (39.19...usw.).

Ich hoffe die Vorgehensweise ist jetzt einigermaßen klar. Ansosnten frag :)
---
Windows 11 (64 bit)
Benutzeravatar
Chimorin
Beiträge: 451
Registriert: 30.01.2013 16:11
Computerausstattung: MSI GTX 660 OC mit TwinFrozr III
6Gb DDR 3 RAM
AMD Phenom II X4 B55 @ 3,6GHz
Windows 7 Home Premium 64-bit

Re: Fragen zum 3D Beispiel FPSFirstPerson.pb

Beitrag von Chimorin »

Könnte man nicht auch die Beine, Arme, Kopf und Körper gesondert als Mesh benutzen?
Ich werde mal das probieren, aber danke fürs Teilen, sieht gut aus :)

EDIT: Hast du das MoveEntity() in einem Thread? Wenn ja, gibt's da Probleme. Nach oben wegfliegen heißt ja, dass immer wieder Weg in Y-Richtung zur derzeitigen Höhe hinzuaddiert wird, ist dies in deinem Fall so?
Bild

- formerly known as Bananenfreak -
Benutzeravatar
Makke
Beiträge: 156
Registriert: 24.08.2011 18:00
Computerausstattung: AMD Ryzen 7 5700X - AMD Radeon RX 6800 XT - 32 GB DDR4 SDRAM
Wohnort: Ruhrpott
Kontaktdaten:

Re: Fragen zum 3D Beispiel FPSFirstPerson.pb

Beitrag von Makke »

Hi,

nein, mit Threads arbeite ich nicht.

Evtl. schreibe ich das ganze nochmal um (ähnlich dem FPS Beispiel) und schaue wie es sich dann verhält. Problem wird einfach sein, das ich ziemlich viele Abfragen drin habe (Player_OnGround(), Player_CollideForward() usw.), ich denke das wird sich alles beissen, aber mal schauen.

Das FPS Beispiel zeigt ja das es geht, evtl. liegt der Fehler in der (meiner) Programmierung oder man muss auf irgendwas achten bei der Levelerstellung. Trotzdem danke für Deine Tips.
---
Windows 11 (64 bit)
Schobaer
Beiträge: 21
Registriert: 25.07.2009 10:41
Wohnort: Berge

Re: Fragen zum 3D Beispiel FPSFirstPerson.pb

Beitrag von Schobaer »

Moin Bananenefreak,
habe das gleiche Problem und noch nicht wirklich eine Lösung gefunden. Die Bewegung ist kein Problem: Camera bewegen und das Entity halt dahin wo die Camera ist. Nur geht die Camera durch die Wände. Habe Physik aktiviert, das Entity hüpft (fällt runter auf den Boden und mit ihm die Camera), alles gut. Und dann bewege ich die Camera munter durch den Boden und die Wände wo vorher noch die Physik gegriffen hat. Was muss man tun?
Gruß, Schobaer
Benutzeravatar
Chimorin
Beiträge: 451
Registriert: 30.01.2013 16:11
Computerausstattung: MSI GTX 660 OC mit TwinFrozr III
6Gb DDR 3 RAM
AMD Phenom II X4 B55 @ 3,6GHz
Windows 7 Home Premium 64-bit

Re: Fragen zum 3D Beispiel FPSFirstPerson.pb

Beitrag von Chimorin »

@Schobaer:
Mach doch einen eigenen Thread auf und poste gleich einen lauffähigen Codeschnipsel.
Bild

- formerly known as Bananenfreak -
Benutzeravatar
Makke
Beiträge: 156
Registriert: 24.08.2011 18:00
Computerausstattung: AMD Ryzen 7 5700X - AMD Radeon RX 6800 XT - 32 GB DDR4 SDRAM
Wohnort: Ruhrpott
Kontaktdaten:

Re: Fragen zum 3D Beispiel FPSFirstPerson.pb

Beitrag von Makke »

Hallo,

das ist jetzt nur ein Tip, ich glaube aber, das Begrenzungen die nur aus Planes bestehen (also ohne Tiefe) die Physikengine an ihre Grenzen bringt, wohingegen Cubes gut funktionieren. In einer 3rd-Person Ansicht kann man das ganz gut sehen, dass die Spielerfigur teilweise in ein Plane eintaucht.

Wenn gewünscht kann ich dazu mal einen Beispielcode posten, allerdings benötigt man dann eine "Level"-Datei aus Planes und aus Cubes um den Unterschied zu sehen.
---
Windows 11 (64 bit)
Antworten