Node bewegt Entitybody's nicht mit

Hier werden, insbesondere in den Beta-Phasen, Bugmeldungen gepostet. Das offizielle BugForum ist allerdings hier.
Benutzeravatar
EddyN
Beiträge: 3
Registriert: 05.03.2006 14:09

Node bewegt Entitybody's nicht mit

Beitrag von EddyN »

Bei meinem ersten Post im Forum möchte ich sagen dass Purebasic wirklich die beste Investition war die ich je gemacht habe. :allright:
Und möchte mich bei euch allen im Forum bedanken für die exzellente Unterstützung , die es möglich machte seit V3.50 ohne Post's
durch zu kommen!
Und jetzt zu unserm Problem:
Sobald Entity's zu einer Node zusammen geklemmt werden bewegen sich ihre Entitybody's (Physikbody's) nicht mit,
obwohl sie im WorldDebug(#PB_World_DebugBody) Mode eigentlich richtig angezeigt werden.
Für mein Projekt würde es mir unheimlich weiterhelfen wenn das Funktioniert.
Listing ist selbsterklärend (hoffentlich).
Ach so das ganze wurde mit PB5.42 auf Win7 32/64bit getestet.

Code: Alles auswählen

;If we move a Node, the EntityPhysicBody`s do not move :-(

EnableExplicit

InitEngine3D(#PB_Engine3D_DebugLog)
InitKeyboard()
InitSprite()

RandomSeed(0)

Define.i Ende , Count , Ela_Phy_Ti
Define.s Title=Space(40)+"Move the Node with Cursor Keys" , Title_2=""

OpenWindow(0,0,0,460,300,Title,#PB_Window_ScreenCentered | #PB_Window_SystemMenu)
AddWindowTimer(0,1,700)
OpenWindowedScreen(WindowID(0),0,0,460,300,#False,0,0,#PB_Screen_WaitSynchronization)

WorldDebug(#PB_World_DebugBody)

CreateCamera(0,0,0,100,100)
MoveCamera(0,0,4,8)
CameraLookAt(0,0,0,0)

CreateLight(0,$ffffff,-10,50,10)

CreateTexture(0,2,2)
StartDrawing(TextureOutput(0))
Box(0,0,2,2,$FFFFFF)
StopDrawing()

CreateMaterial(0,TextureID(0))
SetMaterialColor(0, #PB_Material_AmbientColor, $FF0000)
SetMaterialColor(0, #PB_Material_DiffuseColor, $FF0000)

CopyMaterial(0, 1)
SetMaterialColor(1, #PB_Material_AmbientColor, $0000FF)
SetMaterialColor(1, #PB_Material_DiffuseColor, $0000FF)


CreateCube(0,1)

CreateEntity(0,MeshID(0),MaterialID(0) ,-2,0,0)
CreateEntity(1,MeshID(0),MaterialID(0) ,2,0,0)

CreateEntityBody(0, #PB_Entity_BoxBody,0,0.01,1)
CreateEntityBody(1, #PB_Entity_BoxBody,0,0.01,1)

CreateNode(0,0,0,0)
AttachNodeObject(0,EntityID(0))
AttachNodeObject(0,EntityID(1))

For Count=2 To 52
  CreateEntity(Count,MeshID(0),MaterialID(1),0,0,0)
  ScaleEntity(Count,0.5,0.5,0.5)
  CreateEntityBody(Count, #PB_Entity_BoxBody,0.1,0.5,1)
  MoveEntity(Count,Random(4)-2,Random(30,3),Random(4)-2,#PB_Absolute)
Next

Repeat
  
  
  ExamineKeyboard()
  
  Repeat 
    Select WindowEvent()
      Case 0 : Break
      Case #PB_Event_CloseWindow : Ende=1   
      Case #PB_Event_Timer : Swap Title,Title_2 : SetWindowTitle(0,Title)
    EndSelect  
  ForEver  
  
  For Count=2 To 52
    If EntityY(Count)<-8
      MoveEntity(Count,Random(4)-2,Random(32)+4,Random(4)-2,#PB_Absolute)
    EndIf
  Next
  
  If KeyboardPushed(#PB_Key_Right)
    RotateNode(0,0,0.06*Ela_Phy_Ti,0,#PB_Relative)
  ElseIf KeyboardPushed(#PB_Key_Left)
    RotateNode(0,0,-0.06*Ela_Phy_Ti,0,#PB_Relative)
  EndIf
  
  If KeyboardPushed(#PB_Key_Up)
    MoveNode(0,0,0,0.002*Ela_Phy_Ti,#PB_Relative)
  ElseIf KeyboardPushed(#PB_Key_Down)
    MoveNode(0,0,0,-0.002*Ela_Phy_Ti,#PB_Relative)
  EndIf 
  
  Ela_Phy_Ti=RenderWorld(Ela_Phy_Ti)
  
  FlipBuffers()
  
  Delay(1)
  
Until Ende=1 Or KeyboardReleased(#PB_Key_Escape)
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: Node bewegt Entitybody's nicht mit

Beitrag von Chimorin »

Ich kann das bestätigen. Ein einfaches Verschieben des Entities ohne Node verschiebt auch den Physikkörper, jedoch über eine Node nur das Objekt ohne Physikkörper.

Es wäre gut, wenn du das im englischen Forum posten könntest, nur dort wird auch auf Bugs eingegangen.

Achja, herzlich Willkommen im Forum :)
Bild

- formerly known as Bananenfreak -
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6996
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Node bewegt Entitybody's nicht mit

Beitrag von STARGÅTE »

Nodes sind doch nur Container, wenn du eine physikalische Verbindung haben möchtest musst du auf Joints zurückgreifen.
Wobei es natürlich seltsam ist, dass der physikalische Body woanders zu sein scheint, also die Debug-Ausgabe.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
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: Node bewegt Entitybody's nicht mit

Beitrag von Chimorin »

Nein, es geht hier doch nicht um die physikalische Verbindung.
Für mich sind Nodes Verwaltungsobjekte. Möchte ich einen neuen Nullpunkt setzen, evtl. für mehrere Objekte und diese relativ zu diesem Punkt verschieben oder rotieren, so benutze ich Nodes. Ich wüsste gar nicht, was man mit denen sonst anfangen kann.
MoveEntity() und RotateEntity() funktioniert ja auch mit physikalischen Ents, nur eben nicht über eine weitere Verwaltungsstufe, den Nodes.
Bild

- formerly known as Bananenfreak -
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6996
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Node bewegt Entitybody's nicht mit

Beitrag von STARGÅTE »

Klar, aber in der Physikengine gibt es nur das Weltkoordinatensystem.
Scheinbar wird das Anhängen eines phys. Entitys (absichtlich) irgnoriert, weil Sub-Koordinatensysteme (wie das eines Nodes) nicht unterstützt werden.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
EddyN
Beiträge: 3
Registriert: 05.03.2006 14:09

Re: Node bewegt Entitybody's nicht mit

Beitrag von EddyN »

Danke Für´s Feedback

@ Chimorin
Bin 100% deiner Meinung

@ STARGÅTE
Jau Nodes sind nur Container, aber bei dem Befehl AttachEntityObject() tritt das selbe Problem auf.
Physikbody wird zwar richtig angezeigt, in “Wirklichkeit“ steht er aber voll nutzlos und unsichtbar in der Gegend herum.
Denke halt dass der Physikbody genau so zum Entity gehört wie seine Textur und sein Schatten..

Mit Joints würde die Sache schon funzen , aber diese Verbindungen sind mir für manche Sachen
einfach nicht starr genug.

Das mit den Sub-Koordinatensystemen könnte natürlich schon sein, (wär aber ma richtig schade)
und würde bedeuten das Node und AttachEntityObject() mit Entitybodys schlicht nicht möglich ist.
Dann wäre da trotzdem noch das falsche anzeigen von WorldDebug(#PB_World_DebugBody).
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: Node bewegt Entitybody's nicht mit

Beitrag von Chimorin »

Ich habe gerade an einer Idee für ein Workaround gearbeitet und dabei etwas Merkwürdiges festgestellt:
Da der Physikalische Körper nicht aktualisiert wird, lösche ich ihn einfach und erstelle ihn neu. Ich weiß nicht ob die Physikengine ausgehebelt wird (Müsste die sein) oder die Engine an sich, aber auf jeden Fall sind Geschwindigkeiten bis zum Absturz möglich :D

Code: Alles auswählen

;If we move a Node, the EntityPhysicBody`s do not move :-(

EnableExplicit

InitEngine3D(#PB_Engine3D_DebugLog)
InitKeyboard()
InitSprite()

RandomSeed(0)

Define.i Ende , Count , Ela_Phy_Ti
Define.s Title=Space(40)+"Move the Node with Cursor Keys" , Title_2=""


Procedure actual()
  FreeEntityBody(0)
  FreeEntityBody(1)
  CreateEntityBody(0, #PB_Entity_BoxBody,0,0.01,1)
  CreateEntityBody(1, #PB_Entity_BoxBody,0,0.01,1)
EndProcedure


OpenWindow(0,0,0,460,300,Title,#PB_Window_ScreenCentered | #PB_Window_SystemMenu)
AddWindowTimer(0,1,700)
OpenWindowedScreen(WindowID(0),0,0,460,300,#False,0,0,#PB_Screen_WaitSynchronization)

WorldDebug(#PB_World_DebugBody)

CreateCamera(0,0,0,100,100)
MoveCamera(0,0,4,8)
CameraLookAt(0,0,0,0)

CreateLight(0,$ffffff,-10,50,10)

CreateTexture(0,2,2)
StartDrawing(TextureOutput(0))
Box(0,0,2,2,$FFFFFF)
StopDrawing()

CreateMaterial(0,TextureID(0))
SetMaterialColor(0, #PB_Material_AmbientColor, $FF0000)
SetMaterialColor(0, #PB_Material_DiffuseColor, $FF0000)

CopyMaterial(0, 1)
SetMaterialColor(1, #PB_Material_AmbientColor, $0000FF)
SetMaterialColor(1, #PB_Material_DiffuseColor, $0000FF)


CreateCube(0,1)

CreateEntity(0,MeshID(0),MaterialID(0) ,-2,0,0)
CreateEntity(1,MeshID(0),MaterialID(0) ,2,0,0)

CreateEntityBody(0, #PB_Entity_BoxBody,0,0.01,1)
CreateEntityBody(1, #PB_Entity_BoxBody,0,0.01,1)

CreateNode(0,0,0,0)
AttachNodeObject(0,EntityID(0))
AttachNodeObject(0,EntityID(1))

For Count=2 To 52
  CreateEntity(Count,MeshID(0),MaterialID(1),0,0,0)
  ScaleEntity(Count,0.5,0.5,0.5)
  CreateEntityBody(Count, #PB_Entity_BoxBody,0.1,0.5,1)
  MoveEntity(Count,Random(4)-2,Random(30,3),Random(4)-2,#PB_Absolute)
Next

Repeat
  
  
  ExamineKeyboard()
  
  Repeat 
    Select WindowEvent()
      Case 0 : Break
      Case #PB_Event_CloseWindow : Ende=1   
      Case #PB_Event_Timer : Swap Title,Title_2 : SetWindowTitle(0,Title)
    EndSelect  
  ForEver  
  
  For Count=2 To 52
    If EntityY(Count)<-8
      MoveEntity(Count,Random(4)-2,Random(32)+4,Random(4)-2,#PB_Absolute)
    EndIf
  Next
  
  If KeyboardPushed(#PB_Key_Right)
    RotateNode(0,0,0.06*Ela_Phy_Ti,0,#PB_Relative)
    actual()
  ElseIf KeyboardPushed(#PB_Key_Left)
    RotateNode(0,0,-0.06*Ela_Phy_Ti,0,#PB_Relative)
    actual()
  EndIf
  
  If KeyboardPushed(#PB_Key_Up)
    MoveNode(0,0,0,0.002*Ela_Phy_Ti,#PB_Relative)
    actual()
  ElseIf KeyboardPushed(#PB_Key_Down)
    MoveNode(0,0,0,-0.002*Ela_Phy_Ti,#PB_Relative)
    actual()
  EndIf 
  
  Debug Ela_Phy_Ti
  Ela_Phy_Ti=RenderWorld(Ela_Phy_Ti)
  
  FlipBuffers()
  
  Delay(1)
  
Until Ende=1 Or KeyboardReleased(#PB_Key_Escape)
Bild

- formerly known as Bananenfreak -
Benutzeravatar
EddyN
Beiträge: 3
Registriert: 05.03.2006 14:09

Re: Node bewegt Entitybody's nicht mit

Beitrag von EddyN »

Ja so geht’s, aber halt nur Paar (79) mal.
Hat aber nix mit der Geschwindigkeit zu tun.
Hab mal auf #PB_Absolute gestellt so ist der Speed korrekt stürzt aber auch nach 79 Schritten ab.
Der Absturz liegt eher bei FreeEntityBody()
Die zwei Befehle kannste auch mal rauswerfen -> auch Absturz nach 79 Schritten.
Und jetzt kommt es ganz dicke!
Änder mal die kranke For Schleife Count=1 to 1 in Count=1 to 60
So kannste dann schon 979 Schritte weit drehen.

Code: Alles auswählen

EnableExplicit

InitEngine3D(#PB_Engine3D_DebugLog)
InitKeyboard()
InitSprite()

RandomSeed(0)


Define.i Ende , Count , Ela_Phy_Ti 
Define.s Title=Space(40)+"Move the Node with Cursor Keys" , Title_2=""
Global Count_2.i

Procedure actual()
  Count_2+1
;   FreeEntityBody(0)
;   FreeEntityBody(1)
  CreateEntityBody(0, #PB_Entity_BoxBody,0,0.01,1)
  CreateEntityBody(1, #PB_Entity_BoxBody,0,0.01,1)
EndProcedure


OpenWindow(0,0,0,460,300,Title,#PB_Window_ScreenCentered | #PB_Window_SystemMenu)
AddWindowTimer(0,1,700)
OpenWindowedScreen(WindowID(0),0,0,460,300,#False,0,0,#PB_Screen_WaitSynchronization)

WorldDebug(#PB_World_DebugBody)

CreateCamera(0,0,0,100,100)
MoveCamera(0,0,4,8)
CameraLookAt(0,0,0,0)

CreateLight(0,$ffffff,-10,50,10)

CreateTexture(0,2,2)
StartDrawing(TextureOutput(0))
Box(0,0,2,2,$FFFFFF)
StopDrawing()

CreateMaterial(0,TextureID(0))
SetMaterialColor(0, #PB_Material_AmbientColor, $FF0000)
SetMaterialColor(0, #PB_Material_DiffuseColor, $FF0000)

CopyMaterial(0, 1)
SetMaterialColor(1, #PB_Material_AmbientColor, $0000FF)
SetMaterialColor(1, #PB_Material_DiffuseColor, $0000FF)


CreateCube(0,1)

CreateEntity(0,MeshID(0),MaterialID(0) ,-2,0,0)
CreateEntity(1,MeshID(0),MaterialID(0) ,2,0,0)


For Count=1 To 60  ; to 60
CreateEntityBody(0, #PB_Entity_BoxBody,0,0.01,1)
CreateEntityBody(1, #PB_Entity_BoxBody,0,0.01,1)
Next

CreateNode(0,0,0,0)
AttachNodeObject(0,EntityID(0))
AttachNodeObject(0,EntityID(1))



For Count=2 To 52
  CreateEntity(Count,MeshID(0),MaterialID(1),0,0,0)
  ScaleEntity(Count,0.5,0.5,0.5)
  CreateEntityBody(Count, #PB_Entity_BoxBody,0.1,0.5,1)
  MoveEntity(Count,Random(4)-2,Random(30,3),Random(4)-2,#PB_Absolute)
Next

Repeat
  
  
  ExamineKeyboard()
  
  Repeat 
    Select WindowEvent()
      Case 0 : Break
      Case #PB_Event_CloseWindow : Ende=1   
      Case #PB_Event_Timer : Swap Title,Title_2 : SetWindowTitle(0,Title)
    EndSelect  
  ForEver  
  
  For Count=2 To 52
    If EntityY(Count)<-8
      MoveEntity(Count,Random(4)-2,Random(32)+4,Random(4)-2,#PB_Absolute)
    EndIf
  Next
  
  If KeyboardPushed(#PB_Key_Right)
    RotateNode(0,0,0.06*Ela_Phy_Ti,0,#PB_Absolute)
    actual()
  ElseIf KeyboardPushed(#PB_Key_Left)
    RotateNode(0,0,-0.06*Ela_Phy_Ti,0,#PB_Absolute)
    actual()
  EndIf
  
  If KeyboardPushed(#PB_Key_Up)
    MoveNode(0,0,0,-0.002*Ela_Phy_Ti,#PB_Absolute)
    actual()
  ElseIf KeyboardPushed(#PB_Key_Down)
    MoveNode(0,0,0,0.002*Ela_Phy_Ti,#PB_Absolute)
    actual()
  EndIf 
  
  Debug Count_2
  
  Ela_Phy_Ti=RenderWorld(Ela_Phy_Ti)
  
  FlipBuffers()
  
  Delay(1)
  
Until Ende=1 Or KeyboardReleased(#PB_Key_Escape)

Antworten