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)
.
.
.
Ich hoffe die Vorgehensweise ist jetzt einigermaßen klar. Ansosnten frag
