Replica del mario en proceso
Bueno, estoy programando en Blitz, un poco para aprender y no perder la practica, una réplica del Mario Bros. Esta recién en pañales, pero publico para obligarme a atenderlo y seguir avanzando. Acá dejo una muestra.
A ver que opinan, yo me distancie un poco de todos aprendiendo más 2d que 3d que tengo poca idea porque hace rato que les perdí la pista a los del hilo del Blitz basic 3d que la tienen muy clara. A ver si alguno le vienen un poco de ganas de hacer algo en 2d. Saludos, el aprendiz 3d.
Posdata: además, hablando de Mario miren esto que está muy bien.
Replica del mario en proceso
Lo veo muy simpático, espero ver más del proceso.
Replica del mario en proceso
Mola el Mario. No salta un poco alto? Yo me estoy metiendo ha programar 2d en darkgdk, para programar de verdad (el 3d también es programar de verdad, pero casi te tiras más tiempo modelando que otra cosa).
1 Archivos adjunto(s)
Replica del mario en proceso
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:
Código:
if my < 300 ;fall.
(.)
Else.
If keyhit(57)
Jump=true.
Else.
Endif.
If Jump=false then mvy=0.
Endif
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.
Código:
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.
-
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 --
https://foro3d.com/attachment.php?attachmentid=115389
Replica del mario en proceso
Algunos no tenemos el Blitz, sabes?
Replica del mario en proceso
Bueno, estaba buscando alguien que sí tuviera interés en el Blitz, si te gustaría meterte en el tema puedes conseguir una versión de demostración del Blitz en la página oficial.
Lo único que pido es alguien que me afirme que no es un problema de código el mío, que el problema que tengo no debería estar pasando. Para eso no hay que saber mucho más que lo que es un if.
No quiero sonar sorete, pero me vendría bien una mano.