Md2 hochspringen lassen. Code funktioniert nicht richtig

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

mevsmp

Betreff: Md2 hochspringen lassen. Code funktioniert nicht richtig

BeitragDo, Feb 23, 2006 19:05
Antworten mit Zitat
Benutzer-Profile anzeigen
HI LEUTZ,

Ich hab versucht mein md2 mit Leertaste springen zu lassen, allerdings klappt das net so ganz wie es sein soll. Das md2 sollte wie ein Mensch einfach hochspringen und wieder runter fallen.

Mein Code klappt irgendwie net soganz
ich hab hier im Forum auch schon ein fertigen "Sprung-code" gesehen, aber dieser code war mit PositionEntity. Nachdem einfügen konnte ich mein md2 garnet mehr bewegen:(
Am besten wär also ein code mit MoveEntity.

hier mal mein code wo das Springen nicht richtig funzt (mir MoveEntity):

sry das ich den ganzen Code poste. Aber dann könnt ihr mir vielleicht präziese Vorschläge machen.
Code: [AUSKLAPPEN]
   


Include "../start.bb"


; cube
cube=CreateCube()
FitMesh cube,-250,0,-250,500,500,500
FlipMesh cube
tex=LoadTexture( "tex.bmp" )
ScaleTexture tex,1.0/3,1.0/3
EntityTexture cube,tex
EntityAlpha cube,.4
EntityFX cube,1

;mirror
m=CreateMirror()

;light
light=CreateLight()
TurnEntity light,45,45,0

;camera
camera=CreateCamera()
cam_xr#=30:cam_yr#=0:cam_zr#=0:cam_z#=-100

;model
tex=LoadTexture( "model\ogro\skin.jpg" )
dragon=LoadMD2( "model\ogro\tris.md2" )
EntityTexture dragon,tex
PositionEntity dragon,0,25,0
TurnEntity dragon,0,150,0

While Not KeyHit(1)

   If KeyDown(203)
      TurnEntity dragon,0,8,0
   End If
   
   If KeyDown(205)
      TurnEntity dragon,0,-8,0
   End If
   
   If KeyDown(200)
      MoveEntity dragon,0,0,6.0
      moved = 1
      forward = 1
   End If
   
   If KeyDown(208)
      MoveEntity dragon,0,0,-3.0
      moved = 1
      forward = 0
   End If

   ; Hier der Spring Teil
 If KeyDown(57)
    Y#=EntityY# (dragon)
y1$=y1$+0.4
   If KeyDown(57)=1
    If Y#>40 MoveEntity dragon,0,-y+25,0
MoveEntity dragon,0,y1$,0

EndIf

;Ende


If moved = True
       If forward = True   
         If MD2AnimTime(dragon) < 40 Or MD2AnimTime(dragon) > 46 Then
            AnimateMD2 dragon,1,0.3,40,46
         End If
      End If
   End If

   If forward = False
      If MD2AnimTime(dragon) < 40 Or MD2AnimTime(dragon) > 46 Then
         AnimateMD2 dragon,1,-0.08,40,45
      End If
   End If
      
   If moved = False
      If MD2AnimTime(dragon) < 0 Or MD2AnimTime(dragon) > 10 Then
         AnimateMD2 dragon,1,0.2,0,15
      End If
    End If      
    moved = 0
   forward = 0

        If KeyDown(30)
      cam_z=cam_z+1:If cam_z>-10 cam_z=-10
   Else If KeyDown(44)
      cam_z=cam_z-1:If cam_z<-180 cam_z=-180
   EndIf
   
   PositionEntity camera,0,0,0
   RotateEntity camera,cam_xr,cam_yr,cam_zr
   MoveEntity camera,0,0,cam_z

   UpdateWorld
   RenderWorld

Text 120,35,"Zoom in Y/Z ; Zoom out A"
Text 0,0,"MD2AnimTime: "+MD2AnimTime(dragon)
   Flip
      
Wend

Hat  jemand ne Idee?  :oops:

preachie

BeitragFr, Feb 24, 2006 1:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Was mir so spontan auf den ersten Blick aufgefallen ist:

Code: [AUSKLAPPEN]
y1$=y1$+0.4


Wieso deklarierst Du die Variable y1 als String? Sollte ja wohl eher ein Float, sprich y1# sein, oder? Wink

Vielleicht hilft das ja schon weiter Wink

Außerdem wäre es noch ganz hilfreich zu erfahren, was denn genau bei Deinem Code nicht klappt?
Springt das Objekt gar nicht, oder läuft das Programm nicht, oder was passiert?

Gruß
Preachie
 

mevsmp

BeitragFr, Feb 24, 2006 15:36
Antworten mit Zitat
Benutzer-Profile anzeigen
HI!
Also bei diesem code ist es so dass wenn ich die Leertase drücke das md2 nach oben "gemovt" wird. Ab einer Bestimmten Höhe wird das md2 wieder auf den Boden gesetzt. Das sieht ziemlich un Physikalisch aus.
Außerdem muss ich die Leertase Gedrückt halten damit das Md2 sich hochbewegt, wenn ich loslasse, bleibt der einfach in der aktuellen position stehen.
Eigendlich sollte man ja mit einmal drücken der Leertaste Springen!

mfg mevsmp

hectic

Sieger des IS Talentwettbewerb 2006

BeitragFr, Feb 24, 2006 17:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Warum du unbedingt alles mit MoveEntity machen willst anstelle auch mal PositionEntity zu benutzen, bleibt mir ein Rätzel... Aber wenn du nicht willst das das md2 beim loslassen der Space-Taste in der Luft stehen bleibt, brauchst du denoch eine zusätzliche Variable die die Y-Geschwindigkeit angibt. Die Geschwindigkeitsvariable sollte dann aufgrund einer Gravitation immer verringert werden und auf Null gesetzt werden wenn Bodenkontakt besteht. Beim drücken der Space-Taste und Bodenkontakt wird dann einfach die Geschwindigkeit auf 1 oder was auch immer gesetzt... Die Y-Geschwindigkeitsvariable sollte dabei eine Float sein...

Hier ein Beispiel:

Code: [AUSKLAPPEN]
Graphics3D 640,480,32,2
SetBuffer BackBuffer()

camera=CreateCamera()
light=CreateLight()
cube=CreateCube()

TurnEntity light,70,0,0
PositionEntity camera,0,10,-20

yg#=0


While Not KeyHit(1)
 If KeyDown(203) TurnEntity cube,0,2,0
 If KeyDown(205) TurnEntity cube,0,-2,0
 If KeyDown(200) MoveEntity cube,0,0,.4
 If KeyDown(208) MoveEntity cube,0,0,-.4
 If KeyDown(57) And EntityY(cube)<0 yg=1
 MoveEntity cube,0,yg,0

 yg=yg-.04
 If EntityY(cube)<0 yg=0
 RenderWorld
 Flip
Wend
End
 

mevsmp

BeitragFr, Feb 24, 2006 18:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey Danke, funktioniert im dem BSP genauso wie ich es wollte Smile
Werd gleich mal probieren den Code in mein Code einzubauen.
Nochmals THX

mfg mevsmp
 

aave13

BeitragFr, Jul 21, 2006 14:02
Antworten mit Zitat
Benutzer-Profile anzeigen
so, hab das bei mir auch mal eingebaut, echt gut. einziges und gravierendes problem: auf treppen und bergigem terrain... Sad

könnte mir da nochmal jemand bitte helfen, wäre echt nett danke

mfg aave13

BladeRunner

Moderator

BeitragFr, Jul 21, 2006 14:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie wäre es mit einer Fehlerbeschreibung ?
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

aave13

BeitragFr, Jul 21, 2006 14:22
Antworten mit Zitat
Benutzer-Profile anzeigen
ok, also los: immoment sieht die sprungszene so aus:

Code: [AUSKLAPPEN]
Graphics3D 800,600,32
SetBuffer BackBuffer()
   
      camera=CreateCamera()
         PositionEntity camera,100,8,-60
         EntityType camera,1
         EntityRadius camera,5
      house=LoadMesh("house.3ds")
         ScaleEntity house,.5,.5,.5
         PositionEntity house,10,0,10
         EntityType house,2
      light=CreateLight(2)
         PositionEntity light,78,10,-10
         LightRange light,10
         LightColor light,241,197,41
         
      Collisions 1,2,2,2

      yg#=0
      x=0
            
   While Not KeyHit(1)

      If KeyDown(200) Then MoveEntity camera,0,0,.2
      If KeyDown(208) Then MoveEntity camera,0,0,-.2
      If KeyDown(203) Then TurnEntity camera,0,1,0
      If KeyDown(205) Then TurnEntity camera,0,-1,0
      If KeyDown(2  ) Then MoveEntity camera,0,.3,0
      If KeyDown(3  ) Then MoveEntity camera,0,-.3,0

         
      
      If KeyDown(57)  And entityY(camera)<6  yg=.5
      TranslateEntity camera,0,yg,0
      yg=yg-.04
         If EntityY(camera)<0 yg=0
   
      UpdateWorld
      RenderWorld
      
         Text 20,20,"x-koordinate: "+EntityX(camera)
         Text 20,30,"y-koordinate: "+EntityY(camera)
         Text 20,40,"z-koordinate: "+EntityZ(camera)
         
      Flip
   Wend
End




moment ich editiere gleich... k, so da hab ich das problem, wenn ich ne treppe oder so hochgehe, dann stimmt die 6 nicht mehr unter der die camera in der y koordinate sein muss um zu springen...

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group