Gracias a los dos por los comentarios, es verdad que salta alto, lo que tengo pensado hacer es conseguir un Mario para medir las velocidades y lo alto que salta etc, cosa de hacerlo más parecido posible.
Mientras tanto aquí les dejo el código hasta ahora, y un (*.zip) con todo junto para correrlo. El único avance que tiene con respecto al video es el que al saltar muestre la frame con el brazo para arriba como es en verdad. Probando eso me di cuenta que si al saltar uno aprieta la barra espaciadora todavía en el aire otra vez, Mario al tocar el piso se acuerda de que la presionaste y vuelve a saltar. Es una exquisitez y me gustaría arreglarlo, pero despertó más mi curiosidad esto porque no creo que el código lo permita:
Dice específicamente:
[code]if my < 300 ;fall.
(.)
Else.
If keyhit(57)
Jump=true.
Else.
Endif.
If Jump=false then mvy=0.
Endif[/code]
O sea que no debería de responder al presionar la barra espaciadora en el aire. Díganme por favor si estoy pasando algo por alto. ¿es esto un bug en Blitz o qué?
Bueno, en fin, aquí está el código.
[code]graphics 800,600,16,2.
Setbuffer backbuffer().
Mario=loadanimimage (Mario, (*.png),64,76,0,13)
Maskimage Mario,255,0,255.
Mario.
Global mx=300 ;posición x.
Global my=300 ;posición y.
Global mvy=0 ;velocidad y.
Global max=10 ;aceleración x.
Global mayg=15 ;aceleración de la gravedad.
Global m=1 ;masa.
Global mf=6 ;frame.
Global ms=0 ;estado.
Global mt=0 ;indicador tiempo.
Global mi=true ;indicador intervalos.
Salto.
Global Jump=false ;verdadero si esta saltando.
Global jumpi=0 ;indicador salto.
Global jumpimax=3 ;duración del salto.
General.
Global fps=30 ;frames por segundo.
Timer = createtimer(fps) ;timer para fps.
Mf, ms ;
; 0 ; 0, agachado <
; 1 ; 1, saltar <
; 2 ; 2, deslizando <
; 3.4.5 ; 3, caminar <
; 6 ; 4, parado <
; 7 ; 5, parado >
; 8.9.10 ; 6, caminar >
; 11 ; 7, deslizando >
; 12 ; 8, saltar >
; 13 ; 9, agachado >.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.
While not keyhit(1).
Cls.
Line 0,376,800,376
Line 0,55,800,55
Line 100,55,100,376
Line 200,55,200,376
Line 300,55,300,376
Line 400,55,400,376
Line 500,55,500,376
Line 600,55,600,376
Line 700,55,700,376.
If keydown(203) ;left.
Walkl()
Elseif keydown(205) ;right.
Walkr()
Else.
If mx < 400
Ms = 5
Mf = 7
Else.
Ms = 4
Mf = 6
Endif.
Endif.
If mx < -50 then mx = 800
If mx > 800 then mx = -50.
If my < 300 ;fall.
Mvy = mvy + mayg.
If (my + mvy) > 300 then mvy = 300 - My.
Else.
If keyhit(57)
Jump=true.
Else.
Endif.
If Jump=false then mvy=0.
Endif.
If Jump=true ;jump loop.
If ms>4 then ms=8
If ms<5 then ms=1
If ms=8 then mf=12
If ms=1 then mf=1
Mvy = mvy - 20
If jumpi = jumpimax.
Jumpi=0
Jump=false.
Else.
Jumpi = jumpi + 1
Endif.
Else.
Endif.
My = my + mvy.
Drawimage Mario,mx,my,mf.
Delay 100
Flip.
Wend.
End.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.
Function walkr()
T = 0
If ms = 3 and max = 20
Mt = 0
Ms = 7
Mac = false, si ms es caminando para el otro lado deslizar |
Endif.
If ms = 7, deslizar |
Mf = 2
Mt = mt + 1
Mx = mx - 5 + mt.
If mt = 5
Ms = 6
Mf = 9
Mt = 0
Max = 5
Endif.
Else.
If ms <> 6, inicialización |
Ms = 6
Mf = 9
Mt = 0
Max = 5
Endif.
If mt < 5 then mt = mt + 1, mt incrementando |
If max < 20 then max = max + mt, aceleración incrementando |
Mx = mx + max, mov cord x |
If mf = 9 and mi = true, cambios de frame : patai - Medio - Patad - Medio - Patai. |
Mf = 10
Mi = false.
Elseif mf = 9 and mi = false.
Mf = 8
Mi = true.
Else.
If mf = 10 then mf = 9
If mf = 8 then mf = 9
Endif.
Endif.
End function.
Function walkl()
T = 0
If ms = 6 and max = 20
Mt = 0
Ms = 2
Mac = false, si ms es caminando para el otro lado deslizar |
Endif.
If ms = 2, deslizar |
Mf = 11
Mt = mt + 1
Mx = mx + 5 - Mt.
If mt = 5
Ms = 3
Mf = 4
Mt = 0
Max = 5
Endif.
Else.
If ms <> 3 ;inicialización |
Ms = 3
Mf = 4
Mt = 0
Max = 5
Endif.
If mt < 5 then mt = mt + 1, mt incrementando |
If max < 20 then max = max + mt, aceleración incrementando |
Mx = mx - Max, mov cord x |
If mf = 4 and mi = true, cambios de frame : patai - Medio - Patad - Medio - Patai. |
Mf = 5
Mi = false.
Elseif mf = 4 and mi = false.
Mf = 3
Mi = true.
Else.
If mf = 5 then mf = 4
If mf = 3 then mf = 4
Endif.
Endif.
End function.
-[/code] Saludos, el aprendiz 3d.
Posdata: si alguno conoce algún Mario que me pueda bajar, o código de un Mario por favor háganmelo saber.
-- IMÁGENES ADJUNTAS --
🖼️
Estamos trabajando para mostrar las imágenes del foro
Adjunto #115389