Author Topic: ENTITY SYSTEM: So einfach wird eine 3rd-Person-Steuerung gemacht!  (Read 9540 times)

Offline Schranz0r

  • Premium User :)
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 5006
  • O Rly?
    • View Profile
Wiedermal ohne Worte :D
(Code ist hoffentlich selbsterklärend?! )

Bei Fragen einfach... öhmm.. fragen :D


Das neuste EntitySystem gibts immer unter folgenden Link:
http://www.glbasic.com/beta/EntitySystem.zip

Code: GLBasic [Select]
LOCAL Cam, Pivot, Axis, Cuboid// Locale Variablen

Cam = EntityCreateCamera() // Erstelle eine Kamera
EntitySetCameraRange(Cam, 1, 1000) // Setze Sichtweite

Pivot = EntityCreatePivot()     // Erstelle einen Drehpunkt
Cuboid = EntityCreateCuboid(3,2,6) // Quader erstellen ( zum angucken :D )

EntityParent(Cam,Pivot)         // Die Cam an den Drehpunkt "heften"
EntitySetPosition(Cam,0,30,30,FALSE) // Die Kamera weg vom Drehpunkt bewegen
EntityAlignTowards(Cam,Pivot)   // Kamera schaut immer in Richtung der Drehachse
EntityParent(Cuboid,Pivot) // Den Quader an den Drehpunkt "heften"



// Ein paar Achsen Zeichen und die Bewegung sichtbar zu machen
FOR x = 0 TO 2
        FOR z = 0 TO 10
                LOCAL A
                A = EntityCreateAxes(2) // erstelle eine Achse mit 2 Einheiten grösse
                EntitySetPosition(A,x*20-20, 0, z*20-100 ) // Setze Position
        NEXT
NEXT

WHILE TRUE
        EntityRotate(Pivot,0,-MOUSEAXIS(0)/5,0) // Drehen mit der Maus in X-Richtung um die Y-Achse

        IF KEY(200) THEN EntityMove(Pivot,0,0,-1) // Bei Pfeiltaste HOCH, gehe vorwaerts
        IF KEY(208) THEN EntityMove(Pivot,0,0,1) // Bei Pfeiltaste RUNTER, gehe rückwaerts


        EntityDrawSystem() // Zeichne alles !
SHOWSCREEN
WEND
END
« Last Edit: 2012-Oct-19 by Schranz0r »
I <3 DGArray's :D

PC:
AMD RYzen 7 1700 @3.9Ghz, 16GB HyperX Fury 2666Mhz Ram, ASUS ROG GTX 1060 STRIX 6GB, Windows 10 Pro 64Bit, MSi Tomahawk B350 Mainboard

Offline Quentin

  • Prof. Inline
  • *****
  • Posts: 915
    • View Profile
hehe chic, Grundlage für ein Autorennen, Slalom fahren um die Achsen geht schon ganz gut. Und vor allem supereinfach  :good:

Offline Schranz0r

  • Premium User :)
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 5006
  • O Rly?
    • View Profile
Lustig, dachte ich mir auch schon :D
I <3 DGArray's :D

PC:
AMD RYzen 7 1700 @3.9Ghz, 16GB HyperX Fury 2666Mhz Ram, ASUS ROG GTX 1060 STRIX 6GB, Windows 10 Pro 64Bit, MSi Tomahawk B350 Mainboard

Offline Xaron

  • Mr. Drawsprite
  • **
  • Posts: 50
    • View Profile
    • CodeKnitters
Danke für den Code und sorry, dass ich so ein altes Thema ausgrabe. (Thanks for that code and sorry to bump such an old topic)

Ich würde das nun gern so haben, dass ich nicht nur links/rechts drehen kann sondern auch hoch/runter. (I'd like to change the code that way I not only can turn left/right but also up/down -> pitch).

Prinzipiell ersetze ich dafür die Zeile (Generally I replace the line)

Code: GLBasic [Select]
EntityRotate(Pivot,0,-MOUSEAXIS(0)/5,0) // Drehen mit der Maus in X-Richtung um die Y-Achse
 

ja einfach mit (with)
Code: GLBasic [Select]
EntityRotate(Pivot,MOUSEAXIS(1)/5,-MOUSEAXIS(0)/5,0)    // Drehen mit der Maus in X-Richtung um die Y-Achse
 

ABER... Natürlich fängt er auf dadurch auch, je nach Drehwinkel, das Rollen an. Wie kann ich das unterbinden? (BUT... Of course that will lead to some roll rotation dependent on the yaw component. How can I avoid that roll component?)

Danke!
« Last Edit: 2012-Oct-16 by Xaron »

Offline kanonet

  • Administrator
  • Prof. Inline
  • *******
  • Posts: 1142
    • View Profile
    • My GLBasic code archiv
Du darfst dafür nicht den Pivot drehen, sondern musst dies am Objekt selbst (der Kamera) tun.
Lenovo Thinkpad T430u: Intel i5-3317U, 8GB DDR3, NVidia GeForce 620M, Micron RealSSD C400 @Win7 x64

Offline Xaron

  • Mr. Drawsprite
  • **
  • Posts: 50
    • View Profile
    • CodeKnitters
Danke, das ist durchaus nicht ohne. ;) Toll wäre es, wenn es ein EntityAlignTowards gäbe, wo die Kamera trotzdem ausgerichtet bleibt.

Gut, ich kann ja die Kamera am Pivot dran lassen, dann hab ich wenigstens schon mal die richtige Position. Die Drehung muss ich dann wohl oder übel selbst berechnen...

Offline kanonet

  • Administrator
  • Prof. Inline
  • *******
  • Posts: 1142
    • View Profile
    • My GLBasic code archiv
Nein musst du nicht selbst berechnen, einfach nach dem pivot drehen noch das objekt (die cam) drehen.
Lenovo Thinkpad T430u: Intel i5-3317U, 8GB DDR3, NVidia GeForce 620M, Micron RealSSD C400 @Win7 x64

Offline Xaron

  • Mr. Drawsprite
  • **
  • Posts: 50
    • View Profile
    • CodeKnitters
Ja in der Theorie ist das klar und klingt einfach, aber die Kamera hat ja durch den Pivot bestimmte Position im Raum. Nur kann ich jetzt nicht einfach eine Achse auf Null setzen und alles stimmt wieder...

Offline kanonet

  • Administrator
  • Prof. Inline
  • *******
  • Posts: 1142
    • View Profile
    • My GLBasic code archiv
Es funktioniert auch in der Praxis, ist ja der Sinn eines ES. ;)
Zur Demonstration:
Code: GLBasic [Select]
        EntityRotate(Cam, MOUSEAXIS(1)/5,0,0)
Lenovo Thinkpad T430u: Intel i5-3317U, 8GB DDR3, NVidia GeForce 620M, Micron RealSSD C400 @Win7 x64

Offline Xaron

  • Mr. Drawsprite
  • **
  • Posts: 50
    • View Profile
    • CodeKnitters
Danke. Funktioniert teilweise, ja. Aber eben nur teilweise. Zwar kippt so die Kamera schön und rollt nicht, aber sie schaut eben auch nicht mehr zum Pivot. ;)

Offline kanonet

  • Administrator
  • Prof. Inline
  • *******
  • Posts: 1142
    • View Profile
    • My GLBasic code archiv
Naja, da ist doch aber auch logisch, oder? Wenn der Pivot unter der Kamera ist und du drehst diese nach oben, dann ist es doch die logische Folge, dass die Kamera vom Pivot weg gedreht ist. Wie sollte das auch anders gehen? Einzige Möglichkeit wäre, dass du die Position der Kamera einfach veränderst, am einfachsten geht das mit einem zweiten Pivot.
Lenovo Thinkpad T430u: Intel i5-3317U, 8GB DDR3, NVidia GeForce 620M, Micron RealSSD C400 @Win7 x64

Offline Xaron

  • Mr. Drawsprite
  • **
  • Posts: 50
    • View Profile
    • CodeKnitters
Ja natürlich ist das logisch, hab ich doch geschrieben. Insofern ist das keine Lösung. Werde ich wohl meine angestaubten Mathe-Kenntnisse ausbuddeln müssen. Ein zweiter Pivot hilft da überhaupt nicht.

Offline Schranz0r

  • Premium User :)
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 5006
  • O Rly?
    • View Profile
Servus,

Du hast das Problem das du dich aufm Kopf stellst oder?
Ich machs immer so, wenn ich es selber schreibe ohne ES, dass ich die Winkel limitiere also Max. -89.99 und +89.99.
Ab 90° kommt der "Flipover" :D
I <3 DGArray's :D

PC:
AMD RYzen 7 1700 @3.9Ghz, 16GB HyperX Fury 2666Mhz Ram, ASUS ROG GTX 1060 STRIX 6GB, Windows 10 Pro 64Bit, MSi Tomahawk B350 Mainboard

Offline Xaron

  • Mr. Drawsprite
  • **
  • Posts: 50
    • View Profile
    • CodeKnitters
Danke, nein, diesen Flipover meine ich nicht. Wenn man um 2 Achsen rotiert, muss die Kamera zwangsläufig "rollen". Genau das will ich aber nicht.

Offline Schranz0r

  • Premium User :)
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 5006
  • O Rly?
    • View Profile
Achso, sollte aber mit dem ES auch machbar sein...
Schau ich mir heute Abend mal an!
I <3 DGArray's :D

PC:
AMD RYzen 7 1700 @3.9Ghz, 16GB HyperX Fury 2666Mhz Ram, ASUS ROG GTX 1060 STRIX 6GB, Windows 10 Pro 64Bit, MSi Tomahawk B350 Mainboard