TurnEntity Problem

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

juse4pro

Betreff: TurnEntity Problem

BeitragMo, Apr 13, 2009 0:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

Ich meinem neustem Spiel geht es darum, dass man mit einer Kugel ins Ziel rollen muss, aber es gibt Probleme mit dem Drehen der Kugel

Code: [AUSKLAPPEN]
RollSpeed = 32


Code: [AUSKLAPPEN]

TurnEntity Player,PlayerZSpeed*RollSpeed,0,-PlayerXSpeed*RollSpeed


Das sieht auch ganz nett aus, aber nur von der Position 0,0,0 aus
bei 0,0,32 dreht sich die Kugel vollkommen unerwartet, da die Drehachsen ja mit gedreht werden. Wie kann ich erreichen, das die Drehachsen nicht mit gedreht werden, oder gibt es noch eine bessere Variante?

Gruß, Mortus
Portfolio |LinkedIn |XING

Xeres

Moderator

BeitragMo, Apr 13, 2009 0:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Also du hast eine Kugel mit Eigendrehung, die sich aber in Z Richtung bewegen soll?
1. Statt Moveentity immer die absolute Position errechnen und Positionentity benutzen.
2. Einfach die Textur anstatt den Körper drehen.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

juse4pro

BeitragMo, Apr 13, 2009 0:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Textur drehen, wie soll das denn funktionieren?

ich benutzte nicht positionentity aber auch nicht moveentity, sondern translateentity Wink
Portfolio |LinkedIn |XING

Goodjee

BeitragMo, Apr 13, 2009 0:45
Antworten mit Zitat
Benutzer-Profile anzeigen
du könntest einen pivot bewegen und daran die kugel hängen und die kugel rotieren...wenn ich mich nich irre und wenn ich dein problem verstanden habe sollte das funktionieren Wink

aber erklär das nochmal ausführlicher was du willst pls
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/
  • Zuletzt bearbeitet von Goodjee am Mo, Apr 13, 2009 0:58, insgesamt 2-mal bearbeitet

juse4pro

BeitragMo, Apr 13, 2009 0:49
Antworten mit Zitat
Benutzer-Profile anzeigen
dann den pivot drehen, oder die kugel?

und funktionier dann das mit der kollision immernoch?
Portfolio |LinkedIn |XING

Xeres

Moderator

BeitragMo, Apr 13, 2009 0:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit PositionTexture könnte man das machen:

Code: [AUSKLAPPEN]
Graphics3D(800, 600, 0, 2)
SetBuffer BackBuffer()
Local timer = CreateTimer(60)
Local camera = CreateCamera()

Local kugel = CreateSphere()
Local Tex = CreateTex()
PositionEntity(kugel, 0, 0, 3)
EntityTexture(kugel, Tex)
Local texpos#

Repeat
   
   texpos# = (texpos# + 0.01) Mod 1.0
   PositionTexture(Tex, texpos#, 0)
   
   RenderWorld
   Flip(0)
   WaitTimer(timer)
Until KeyHit(1)

Function CreateTex()
   Local t = CreateTexture(64, 64)
   SetBuffer TextureBuffer(t)
   For i=0 To 50
      Color(Rand(128,255), Rand(128,255), Rand(128,255))
      Oval(Rand(0,64),Rand(0,64), Rand(1,8),Rand(1,8))
   Next
   SetBuffer BackBuffer()
   Return t
End Function
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

juse4pro

BeitragMo, Apr 13, 2009 1:10
Antworten mit Zitat
Benutzer-Profile anzeigen
nun sieht es so aus, als ob die kugel sich auf der Y Achse dreht, und das kann niemals im spiel passieren Wink , bei deinem beispiel fehlt die z achsen drehung, oder ich bin einfach SEHR müde
Portfolio |LinkedIn |XING

Tankbuster

BeitragMo, Apr 13, 2009 2:12
Antworten mit Zitat
Benutzer-Profile anzeigen
mortus hat Folgendes geschrieben:
dann den pivot drehen, oder die kugel?

und funktionier dann das mit der kollision immernoch?


Den Pivot benutzt du für die Kollision (EntityRadius) und Positionierst die Kugel immer an der Stelle des Pivot (eventuell kannst du sie als Child deklarieren), und dann kann sie sich ja nach belieben drehen, weil nur die Ausrichtung des Pivot für die Bewegungen wichtig sein wird.
Du bewegst einfach den Pivot, nicht die Kugel. Dann wird der Pivot anders positioniert, und die Kugel ist natürlich auf der selben Stelle.
Twitter
Download Jewel Snake!
Windows|Android

juse4pro

BeitragMo, Apr 13, 2009 9:42
Antworten mit Zitat
Benutzer-Profile anzeigen
aber jetzt passiert immernoch das selbe, die Drehachsen werden mit gedreht...

ich drehe jetzt die Kugel, ein Pivot steht für Kollision und Bewegung, aber es funktioniert immernoch nicht...
Portfolio |LinkedIn |XING

Chester

BeitragMo, Apr 13, 2009 13:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann nimm doch einfach RotateEntity mit absoluten Winkelangaben, dann hast du auch kein Problem mehr mit den Drehachsen.

AnniXa

BeitragMo, Apr 13, 2009 14:01
Antworten mit Zitat
Benutzer-Profile anzeigen
am besten ist es wenn du wirklich ein pivot erstellst.
die kugel immer an die position des pivot setzt.
die kugel selbst dreht sich wenn sie bewegt wird um die Z achse,
und steuern tust du nun den pivot mit drehung um die Y achse.
|moonForge|
Ich bin Pokémon Meisterin seit 1998!

juse4pro

BeitragMo, Apr 13, 2009 14:33
Antworten mit Zitat
Benutzer-Profile anzeigen
oh, ich glaube ihr habt mich falsch verstanden, mein spiel ist so aufgebaut:

Code: [AUSKLAPPEN]

         ;Update Player   
         If PlayerHealth>0
            If KeyDown(29)
               PositionEntity CameraPivot,EntityX(Player,1),EntityY(Player,1)+24,EntityZ(Player,1)-4
            Else
               PositionEntity CameraPivot,EntityX(Player,1),Abs(EntityY(Player,1))+6,EntityZ(Player,1)-12
               If KeyDown(200)
                  PlayerZSpeed#=PlayerZSpeed#+0.02
               ElseIf KeyDown(208)
                  PlayerZSpeed#=PlayerZSpeed#-0.02
               EndIf
   
               If KeyDown(203)
                  PlayerXSpeed#=PlayerXSpeed#-0.02
               ElseIf KeyDown(205)
                  PlayerXSpeed#=PlayerXSpeed#+0.02
               EndIf
            EndIf
         EndIf
         
         dcx#=PlayerLastX-PlayerXNow
         dcz#=PlayerLastZ-PlayerZNow
         dcy#=PlayerLastY-PlayerYNow

         TranslateEntity PlayerPivot,PlayerXSpeed#,PlayerYSpeed#,PlayerZSpeed#
         TurnEntity PlayerPivot,-dcz*RollSpeed,0,dcx*RollSpeed
         If EntityY(PlayerPivot,1)<.1 And PlayerHealth>0
            Splash(EntityX(Player,1),EntityZ(Player,1))
            PlayerHealth=0
         EndIf
         
         If KeyHit(28)
            PositionEntity PlayerPivot,0,40,0
            ResetEntity PlayerPivot
            PlayerHealth=100
         EndIf
         
         PlayerZSpeed#=PlayerZSpeed#*0.93
         PlayerXSpeed#=PlayerXSpeed#*0.93

         If PlayerYSpeed#>-6
            PlayerYSpeed#=PlayerYSpeed#-Gravity#
         EndIf
         
         If EntityCollided(PlayerPivot,2)
            PlayerYSpeed#=0
            TranslateEntity PlayerPivot,0,-.3,0
         EndIf


das heißt, ich drehe die kugel nichtauf Y, niemals Wink
Portfolio |LinkedIn |XING

Holzchopf

Meisterpacker

BeitragMo, Apr 13, 2009 15:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Weil ich dein Problem kurz nachvollziehen wollte, hab ich mir grad selber was geschrieben. Und die Lösung des Problems ist eigentlich simpel:

RotateMesh dreht das Koordinatensystems des Körpers nicht mit.

Hier noch der Code, mit dem ich gearbeitet habe:
Code: [AUSKLAPPEN]
Graphics3D 800,600,0,2
Global TIMER = CreateTimer(60)
SetBuffer BackBuffer()

Type TPlayer
   Field x#, y#, z#
   Field xSpeed#, zSpeed#
   Field xRoll#, zRoll#
   Field Pivot
   Field Mesh
End Type

Local Texture = RandomTexture()

Local Player.TPlayer = New TPlayer
Player\Pivot = CreatePivot()
Player\Mesh   = CreateSphere( 8, Player\Pivot )
EntityTexture Player\Mesh, Texture
EntityColor Player\Mesh, 255,128,128
Player\y = 1

Local Ground = CreatePlane()
EntityTexture Ground, Texture
EntityColor Ground, 96,204,96

Local Cam = CreateCamera()
PositionEntity Cam, 0,20,0
AlignToVector Cam, 0,-1,0, 0
CameraZoom Cam, 2

Local Light = CreateLight()
AlignToVector Light, 2,-3,-5, 0

While Not KeyDown(1)
   Cls

   ; Kugel steuern (Pfeiltasten)
   Player\zSpeed = Player\zSpeed +0.002 *( KeyDown(200) -KeyDown(208) )
   Player\xSpeed = Player\xSpeed +0.002 *( KeyDown(205) -KeyDown(203) )
   
   ; Position berechnen
   Player\x = Player\x +Player\xSpeed
   Player\z = Player\z +Player\zSpeed
   
   While Not (Player\x>-8 And Player\x<=8)
      If Player\x>8 Player\x=Player\x-16
      If Player\x<-8 Player\x=Player\x+16
   Wend
   While Not (Player\z>-6 And Player\z<=6)
      If Player\z>6 Player\z=Player\z-12
      If Player\z<-6 Player\z=Player\z+12
   Wend

   ; Positionieren
   PositionEntity Player\Pivot, Player\x, Player\y, Player\z
   
   ; Mesh drehen
   Player\xRoll = Player\xSpeed *55
   Player\zRoll = Player\zSpeed *55
   RotateMesh Player\Mesh, Player\zRoll, 0, -Player\xRoll
   
   RenderWorld()
   
   Flip 0
   WaitTimer( TIMER )
Wend
End

Function RandomTexture()
   Local Buffer = GraphicsBuffer()
   Local Texture = CreateTexture( 64,64 )
   SetBuffer TextureBuffer( Texture )
      Local x, y
      For y = 0 To 63
         For x = 0 To 63
            WritePixel x,y, Rand(4,12) *$00111111
         Next
      Next
   SetBuffer Buffer
   Return Texture
End Function


uU wärs auch möglich, mit AlignToVector was zusammenzubasteln. Aber ich denke, die Version mit RotateMesh sollte schon gut genug funktionieren.

mfG
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

juse4pro

BeitragMo, Apr 13, 2009 20:43
Antworten mit Zitat
Benutzer-Profile anzeigen
jo, danke, funktioniert jetzt richtig gut Wink

das war auch nur das ws ich wollte, naja, wieder um einen befehl reicher Very Happy
Portfolio |LinkedIn |XING

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group