Hogyan irányítható egy magától mozgó kúp mindig a csúcsa felé eső irányba BlitzBasic3D-ben?
Adott egy kúp, aminek mozognia kéne mindig arra, amerre a csúcsa néz. A csúcsot (illetve magát a kúpot) a nyíl gombokkal kéne forgatni. Itt a kód, ami valamiért nem jó; aki ért hozzá, próbálja ki és javítsa meg. Fizetségképpen fogadja hálás köszönetemet és azt a tudatot, hogy megmentett az agyvérzéstől:
Graphics3D 640,480
SetBuffer BackBuffer()
camera=CreateCamera()
light=CreateLight()
cone=CreateCone( 32 )
PositionEntity cone,0,0,5
sebesseg=1
vszamlalo=10
;RotateEntity cone,90,0,0
While Not KeyDown( 1 )
; Change rotation values depending on the key pressed
If KeyDown( 208 )=True Then pitch#=pitch#-1 ;X-tengelyen átbukás
If KeyDown( 200 )=True Then pitch#=pitch#+1
If KeyDown( 203 )=True Then yaw#=yaw#-1 ;Y-tengelyen átfordulás
If KeyDown( 205 )=True Then yaw#=yaw#+1
If KeyDown( 45 )=True Then roll#=roll#-1 ;Z-tengelyen átfordulás
If KeyDown( 44 )=True Then roll#=roll#+1
; Rotate cone using rotation values
RotateEntity cone,pitch#,yaw#,roll#
If EntityPitch#(cone)<90 Or EntityPitch#(cone)>270
x_elojel=1
ElseIf EntityPitch#(cone)=90 Or EntityPitch#(cone)=0
x_elojel=0
Else
x_elojel=-1
EndIf
;
If EntityYaw#(cone)<90 Or EntityYaw#(cone)>270
y_elojel=1
ElseIf EntityYaw#(cone)=90 Or EntityYaw#(cone)=0
y_elojel=0
Else
y_elojel=-1
EndIf
;
If EntityRoll#(cone)<90 Or EntityRoll#(cone)>270
z_elojel=1
ElseIf EntityRoll#(cone)=90 Or EntityRoll#(cone)=0
z_elojel=0
Else
z_elojel=-1
EndIf
;
vszamlalo=vszamlalo-1
If vszamlalo<=0
MoveEntity cone,x_elojel*sebesseg,y_elojel*sebesseg,z_elojel*sebesseg
vszamlalo=10
EndIf
RenderWorld
Text 0,0,"Use cursor/Z/X keys to change cone rotation"
Text 0,20,"Pitch: "+pitch#
Text 0,40,"Yaw : "+yaw#
Text 0,60,"Roll : "+roll#
Text 0,80,"X irány: "+EntityPitch#(cone)+"Y irány: "+EntityYaw#(cone)+"Z irány: "+EntityRoll#(cone)
Text 0,100,"Számláló: "+vszamlalo
Flip
Wend
End
A MoveEntity arra mozgatja az objektumot amerre forgatva lett, tehát elég megadni neki egy fix értéket és majd a rotateentity beállításai alapján elmozgatja a megfelelő irányba
MoveEntity cone,0,sebesseg,0
Persze játéknál jobb lenne fix időszámítást belevinni, hogy ne a processzortól függjön a sebesség
pl:
old_ms = MilliSecs()
sebesseg# = 0.001
A loopba pedig:
ms = MilliSecs()
dt = ms - old_ms
old_ms = ms
MoveEntity cone,0,sebesseg*dt,0
Jé, tényleg működik: arra megy a kúp, amerre a csúcsa felé néz és lehet irányítani!
Még kielemzem az agyacskámban a kódodat, hogy mi hogyan s miért; mindenesetre köszönöm szépen a választ.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!