Juego de Plataformas 2D/Godot Tutorial/Movimiento Personaje/Godot/3-Cap/Programacion videojuegos
ฝัง
- เผยแพร่เมื่อ 27 ธ.ค. 2021
- En esta ocasion programaremos el movimiento de nuestro personaje a traves de la manera que iene Godot de programar :D
GODOT DESDE 0 SERIE ➜ • GODOT Desde 0/Tutorial...
CUALQUIER COMENTARIO SE AGRADECE :D Y SI OS A GUSTADO
👍 (◔◡◔) NO OLVIDÉIS DE SUSCRIBIROS😄
🎮 🎮 🎮 🎮 ✨🚀 ✨
🎶TODOS LOS COMENTARIOS TRATARE DE RESPONDERLOS
📷 INSTAGRAM: / luiscanary_
🐤TWITTER: / luiscanary
🔴TWITCH: / luiscanary
✏️DISCORD: / discord
✏️FACEBOOK: / luiscanaryy
Tutoriales Unity➜ • Tutoriales Unity
Descargar Unity➜ • Como DESCARGAR e INSTA...
Descargar Visual Studio➜ • Importar y animar un p...
Juego de Plataformas 2D➜ • Juego de Plataformas 2...
QUE PC TIENES? 💻 👀
Gráfica: Gtx 970 gigabyte
Ram: Kin-hx fury 8 GB 1600DDR3
Procesador: Intel i7 4790-3.6 GHZ
Disco duro 1: 240 gb ssd
Disco duro 2: 1tb sagate barracuda
Placa base: Asrock h97 PRO4 LGA 1150
Fuente: Mars Gaming 800 w
Caja: Antec Gx 505
Ratón🖱: Razer mamba chroma tournament edition
Teclado⌨️: Mars Gaming Mk2
Alfombrilla:Newskill atami control
🎮CANAL🎮 / @luiscanary
HAS LLEGADO HASTA ABAJO DEL TODOOO🎁🎉🎊 - เกม
Para los que useis la version 4 aqui teneis el codigo, cambios importantes con respecto al video -> primero el motion es porque actualmente velocity es un Vector2D, el move_and_slide esta solo porque ya no necesita un argumento adicional, tambien se cambio el KinematicBody2D por el CharacterBody2D ya que se cambio el nombre en la nueva version, luego el lerp le ponemos velocity.x = lerp(velocity.x, 0.0, 0.5) ya que ahora necesita un float, y por ultimo ponemos func _physics_process(_delta):
Espero que asi no tengais errorcillos para aquellos y aquellas que useis la version 4 en adelante, un saludo :D Gracias a @enriqueprol3390
extends CharacterBody2D
const moveSpeed = 25
const maxSpeed = 50
const jumpHeight = -300
const gravity = 15
@onready var sprite = $Sprite2D
@onready var animationPlayer = $AnimationPlayer
func _physics_process(_delta):
velocity.y += gravity
var friction = false
if Input.is_action_pressed("ui_right"):
sprite.flip_h = true
animationPlayer.play("Walk")
velocity.x = min(velocity.x + moveSpeed, maxSpeed)
elif Input.is_action_pressed("ui_left"):
sprite.flip_h = false
animationPlayer.play("Walk")
velocity.x = max(velocity.x - moveSpeed, -maxSpeed)
else:
animationPlayer.play("Idle")
friction = true
if is_on_floor():
if Input.is_action_pressed("ui_accept"):
velocity.y = jumpHeight
if friction:
velocity.x = lerp(velocity.x, 0.0, 0.5)
else:
if friction:
velocity.x = lerp(velocity.x, 0.0, 0.01)
move_and_slide()
justo iba a preguntar por esto XD
ayuda, cuando pongo el script me sale todo lo que tiene que ver con velocity en rojo, junto con el "if is_on_floor() y el move_and_slide()
Edit: Ya resolvi lo de el velocity, solo tenia que cambiarlo por motion, pero sigo con el problema del if is on floor y del move and slide
Tengo problemas con el onready var :( diectamente no existe. Cual deberia usar?
Gracias!
Edit: solo tenia que escribir un arroba primero @onready jsdjasjdj
@@mapache4423tienes que usar el @onready en vez de solamente onready (si te funciona el script y no te da problemas lo podrías copiar y pegar aquí porfa? Es para ver qué tengo mal en el mío)
Espero traerlo si! Gracias por el apoyo!!
Mi hijo de 9 años me envió este video para mostrarme que esta aprendiendo a programar videojuegos y que ahora es lo único que quiere hacer en su vida. Muchas gracias LuisCanary por esa chispa que despertaste en él. Saludos. 🥹🤗
Eternamente agradecido por este tipo de comentarios🙏🏻😊 me alegro mucho de que pueda aprender algo que le apasiona y que así sea, un saludo!
como le va a vuestro hijoo?
Felicidadeeeees
@@LuisCanary una preguntita me dice elif comando no encontrado o algo haci que tengo que hacer saluditos desde Argentina
@@JAVIER-YT-2122 fijate que sea godot 3.5
La onready palabra clave fue reemplazada por la @onready anotación en Godot 4.0. Por si no les funciona la linea de codigo. Saludos y Excelentes videos 😁
Gracias por comentarlo!!, un saludo :D
Gracias men 🗿👌
Gracias pa
e escrito la linea de codigo muchas veses y aun me sale error (aun no e aprendido el lenguage de GDScrip) y visto el video varias veses y aun no encuentro cual es el problema
extends Sprite
const moveSpeed=25
const maxSpeed=50
const jumpheight= -300
const up = Vector2(0,-1)
const gravity=15
onready var elmansito =$Sprite
onready var animationPlayer = $AnimationPlayer
var motion = Vector2()
func _physics_process(delta):
motion.y += gravity
var friction = false
if Input.is_actio_presed("ui_right"):
elmansito.flip_h = true
animationPlayer.Play("Walk")
motion.x = min ( motion.x + moveSpreed, maxSpreed)
elif Input.is_actio_presed("ui_left"):
elmansito.flip_h = false
animationPlayer.Play("Walk")
motion.x = max ( motion.x - moveSpreed, -maxSpreed)
else:
animationPlayer.play("Idle")
friction = true
if is_on_floor():
if Imput.is_action_preseed("ut_aceept"):
notion.y = jumpHelghtf
if friction ==true:
notion.x = lerp (nottion.x ,0,0.5)
else:
if friction==true:
notion.x = lerp(notion.x,0,0.01)
notion = move_and_slide(motion,up)
aqui el error que me sale ahora es en la linera "if is_on_floor():" y no entiendo por que y se que tego mas errores pero no se coreguirlos si me puedes ayudar muchas gracias
man me salvaste
Como developer te lo digo, estos son los tutoriales que mas me han enganchado en tiempo! Sencillos para no tner conocimiento y amenos para los que tenemos base. Tienes una capacidad de explicar bestial, sigue asi tio, me suscribo porque el curro lo merece 💪💪
Muchisimas gracias! :D Siempre intento hacerlo lo mejor que puedo, pero estos mensajes me alegran mucho. Un saludo enorme!
Excelente vídeo; me gusta esta nueva serie, la estoy siguiendo: y esta saliendo de maravillas, hasta estoy haciendo mis propios spriter.
Me alegro mucho, gracias a tii 😊😄
@@LuisCanary hola muy buen video espero la parte 4
x2
Me encanta esta serie de videos, estoy aprendiendo un monton siempre fue mi meta crear juegos y por fin podre lograrlo.
Me alegro mucho por ello😄🙏 te mando todo mi apoyo!
La verdad es increíble lo que estoy pudiendo hacer con este curso!
Mil Gracias!
Me alegro un monton!, espero que vaya genial!, un saludo :D
chevere amigo buen video siempre atento a un nuevo video :) ya me desocupo mas del trabajo para tener mas tiempo :) saludos amigo :)
Muchas gracias! me alegra que te ayudenn😊😄
chavales aquí les traigo un código con godot 4 , si se preguntan porque quite (motion) es porque ahora (velocity) es un (Vector2()) y no es necesario declarar una variable como antes y el (move_and_slide()) esta solo porque ya no requiere un argumento adicional y también lo ise con CharacterBody2D porque el KinematicBody2D se cambio el nombre por el bien de la traba xdxdxd (le cambiaron el name porque actualizaron el código con la versión 4.0 de godot), también el lerp le puse (velocity.x = lerp(velocity.x, 0.0, 0.5)) en vez de (velocity.x = lerp(velocity.x, 0, 0.5)) porque espera argumentos de tipo float (números en coma flotante) para realizar una interpolación lineal y por ultimo el delta le puse (func _physics_process(_delta):) porque el programa me lo indicaba como error pero le pones _delta para no utilizada la variable de manera intencional y así utilizarla en el futuro.
extends CharacterBody2D
const moveSpeed = 25
const maxSpeed = 50
const jumpHeight = -300
const gravity = 15
@onready var sprite = $Sprite2D
@onready var animationPlayer = $AnimationPlayer
func _physics_process(_delta):
velocity.y += gravity
var friction = false
if Input.is_action_pressed("ui_right"):
sprite.flip_h = true
animationPlayer.play("Walk")
velocity.x = min(velocity.x + moveSpeed, maxSpeed)
elif Input.is_action_pressed("ui_left"):
sprite.flip_h = false
animationPlayer.play("Walk")
velocity.x = max(velocity.x - moveSpeed, -maxSpeed)
else:
animationPlayer.play("Idle")
friction = true
if is_on_floor():
if Input.is_action_pressed("ui_accept"):
velocity.y = jumpHeight
if friction:
velocity.x = lerp(velocity.x, 0.0, 0.5)
else:
if friction:
velocity.x = lerp(velocity.x, 0.0, 0.01)
move_and_slide()
Graciassss, me salía todo el código en rojo por no tener en cuenta eso ajajajaja
Muchas gracias por ayudar!, han cambiado bastantes cosillas asique esto vendra genial a todo aquel que tenga errorcillos, un saludo :D
Hola, hice copiar y pegar del codigo y me sale el error "identifier velocity not declared in the current scope" sabes que podria faltar?
@@SaulD-xd6mj copiaste bien el codigo?
@@enriqueprol3390 si, hice un copiar y pegar directo y cuando intento escribirlo tampoco me reconoce el velocity. me sale: Identifier "velocity" not declared in the current scope
Eres el unico que explica el programa con paciencia y sin prisas con los otros tutoriales me perdia eres un grande
Podrias enseñar como hacer que el personaje suba escaleras?
Gracias!, y posiblemente lo veamos en un futuro :D
escaleras de mano o escaleras combencionales?
que buen engine . carga muy rapido, Gracias por enseñar cursos tan divertidos y muy interesantes espero pronto otro capítulo,y me gustaría que el querido lime pueda subir escaleras 😄😄😄.
Muchas gracias por todo el apoyooo :D😄👍
Buenisimo tuto, gracias Luis!
Mil gracias Yova🤗😁
Genial vi otros tutoriales y eran lentoooos este la verdar rapido y eficiente todo lo que se puede pedir
gracias!👌
Consulta: Referente a la función lerp
La variable friction la declaramos nosotros, por lo tanto es simplemente un dato,
ahora:
Cuando declaro que la variable friction es "true" en el movimiento del eje x se aplica la función "lerp"
en consecuencia...
Se va reduciendo el movimiento del eje X, es decir, el del movimiento lateral.
lerp(motion.x, 0, 0,5)
El primer parametro refiere al movimiento en el eje x, sea positivo o negativo,
lo que todavía no entiendo es los dos siguientes parametros.
Perdón que sea tan quisquilloso, es simplemente curiosidad!!
No termino de entender el funcionamiento de lerp y por qué para el objeto 🥲
Saludos!!
Buenas!, basicamente un lerp es una interpolacion lineal entre dos puntos para que no sea un movimiento inmediato y sea mas suave, en este foro hablan del tema seguramente te ayude!, un saludo :D godotengine.org/qa/65222/i-did-not-understand-well-lerp-function
Muchisimas Gracias por compartir esto. Mis respetos !
Gracias a ti por el comentario!, un saludo :D
Tus vídeos son excelentes, gracias por tomarte el tiempo de enseñar esta bonita arte.
Seria expectacular que trajeras el G4, ya que es algo diferente a sus versiones anteriores.
Gracias y estamos con el godot 4 en la serie desde 0 te la dejo por aqui, un saludo :D th-cam.com/video/KXnBp8q_t-Y/w-d-xo.html
Hola Luis, he seguido el tutorial, le he revisado y no se mueve, ni tiene gravedad ni nada.
Aquí te paso el script
extends KinematicBody2D
const moveSpeed = 25
const maxSpeed = 50
const jumpHeight = -300
const up = Vector2(0, -1)
const gravity = 15
onready var sprite = $sprite
onready var animation = $AnimationPlayer
var motion = Vector2 ()
func _physics_process(delta):
motion.y += gravity
var friction = false
if Input.is_action_pressed("ui_right"):
sprite.flip_h = true
animation.play("Walk")
motion.x = min(motion.x+moveSpeed, maxSpeed)
elif Input.is_action_pressed("ui_left"):
sprite.flip_h = false
animation.play("Walk")
motion.x = max(motion.x-moveSpeed, maxSpeed)
else:
animation.play("Idle")
friction = true
if is_on_floor():
if Input.is_action_pressed("ui_accept"):
motion.y = jumpHeight;
if friction == true:
motion.x = lerp (motion.x, 0, 0.5)
else:
motion.x = lerp (motion.x, 0, 0.01)
motion = move_and_slide(motion, up)
Por aqui te dejo el mio por si tiene algo diferente, he visto que te faltaba un - en el elif de moverte por ejemplo
extends KinematicBody2D
const moveSpeed = 25
const maxSpeed = 50
const jumpHeight = -300
const up = Vector2(0,-1)
const gravity = 15
onready var sprite = $Sprite
onready var animationPlayer = $AnimationPlayer
var motion = Vector2()
func _physics_process(delta):
motion.y +=gravity
var friction=false
if Input.is_action_pressed("ui_right"):
sprite.flip_h = true
animationPlayer.play("Walk")
motion.x = min(motion.x + moveSpeed, maxSpeed)
elif Input.is_action_pressed("ui_left"):
sprite.flip_h = false
animationPlayer.play("Walk")
motion.x = max(motion.x - moveSpeed, -maxSpeed)
else:
animationPlayer.play("Idle")
friction = true
if is_on_floor():
if Input.is_action_pressed("ui_accept"):
motion.y = jumpHeight
if friction ==true:
motion.x = lerp(motion.x,0,0.5)
else:
if friction ==true:
motion.x=lerp(motion.x,0,0.01)
motion = move_and_slide(motion,up);
@@LuisCanary Gracias :)
@@oscarhe_1 He pasado cómo una hora revisando el código de pies a cabeza en búsqueda de mi error y se trataba de un solo símbolo, exactamente del "-" de "const up = Vector2(0,-1)"
Jajajja suele pasar, ánimo!
@@LuisCanary hola estoy aprendiendo poco a poco y tuve varios errores que ya arreglé pero ahora hay uno que no entiendo porque está igual ah lo tuyo y dice así error(37,1): The identifier "jumpHeight" isn't declared in the current scope
Hola luis, una pregunta, en algún momento podrías hacer un tutorial de como crear un juego de carreras, graciass :D
Sin duda lo tendremos que ver en un futuro :D
Me encanta como explicas.
Muchisimas gracias🙏🏻😊
MERECES 100 TRILLONES DE SUSCRIPTORES.
Ojala😁 de momento seguiremos compartiendo contenido con todos vosotros!!
hola bro, tengo un problema, ya que hice todos los procedimientos pero mi personaje no se mueve con ninguna tecla que puedo hacer?
a mi me pasa lo mismo, no se que hacer
No te deja con las flechas?, revisa el tema de nombres si algo es en minuscula o mayusculas, las comillas que se usan que son estas"", guardastes el script tambien?, un saludo :D
@@oscarhe_1 lo solucionaste?
@@AnMaster11 si
@@oscarhe_1 cómo?
Bro, en los scripts tengo un problema
en la 30 cuando pongo else:
me dice esto: error parsing expression, misplaced: else
Y lo tengo igual que tu, me ayudas :(
Te paso el codigo por si te ayuda!
extends KinematicBody2D
const moveSpeed = 25
const maxSpeed = 50
const jumpHeight = -300
const up = Vector2(0,-1)
const gravity = 15
onready var sprite = $Sprite
onready var animationPlayer = $AnimationPlayer
var motion = Vector2()
func _physics_process(delta):
motion.y +=gravity
var friction=false
if Input.is_action_pressed("ui_right"):
sprite.flip_h = true
animationPlayer.play("Walk")
motion.x = min(motion.x + moveSpeed, maxSpeed)
elif Input.is_action_pressed("ui_left"):
sprite.flip_h = false
animationPlayer.play("Walk")
motion.x = max(motion.x - moveSpeed, -maxSpeed)
else:
animationPlayer.play("Idle")
friction = true
if is_on_floor():
if Input.is_action_pressed("ui_accept"):
motion.y = jumpHeight
if friction ==true:
motion.x = lerp(motion.x,0,0.5)
else:
if friction ==true:
motion.x=lerp(motion.x,0,0.01)
motion = move_and_slide(motion,up);
@@LuisCanary brooo, muchas gracias, ya me funciono :D
@@LuisCanary gracias bro yo tenia el mismo problema con "elif"
Buen video, estoy aprendiendo mucho
Me alegro mucho de que te este gustando😄
Primero
Muchas gracia por enseñar, muy entretenido, lo único que falto es decir que al crear los Script, todo cuenta, incluso los espacios, no sabes como me rompí la cabeza viendo que podía estar mal escrito. Otra cosa, el script "jumpHeight" no me lo reconoce por nada del mundo, me aparece the ide tifier "jumpHeight" isn't declared in the current scope. A que se refiere. Saludos.
Buenas!, si en godot hace falta poner sus cosillas en orden sobretodo espacios, lo que comentas tiene pinta de que no has declarado tu variable arriba de tu script por lo que no lo encuentra, revisa tambien el tema de mayusculas y minusculas, un saludo :D
Me pasa lo mismo quisiera saber que es
En mi caso es super mas sencillo que unity 100%. Gracias por los videos
Hay gente que le resulta mas sencillo si, depende decada uno, un saludo :D
Buen video, como de costumbre Luis. La única pega, es que para seguir el curso con G4 hay que ir modificando cosillas. Pero bueno, así aprendemos a buscarnos un poco la vida.
Saludos y seguir dándole caña :)
Ya es lo malo que ha pasado tiempecillo ya , a ver si para el futuro puedo actualizarlo, un saludo :D
Like 1
Nota, si les sale parsing error por ejemplo por;
Elif inout.is_action_pressed("ui-left"):
Es por qué tienen que por cada comando ya sea func, if o elif hacer una línea con una ligera separación entre si.
Luego de eso deberían poner un tab al inicio de cada comando como los ir elif o etc y el resto de codigo que escriban debajo del mismo presionen espacio así se arma como una columna de comando, sabrán que hicieron esto bien cuando al clickear en la columna donde pusieron el comando if o elif se guarde todo el código de esa parte en las líneas de abajo
Gracias por comentarlo seguro que ayuda!, un saludo :D
sos grande😎👾
Me aparece ese error, pero la vdd no entendí muy bien tu comentario, me vendría muy bien una ayuda ya q no comprendo mucho de esto
Buenas!, te paso el codigo por si te ayuda :D
extends KinematicBody2D
const moveSpeed = 25
const maxSpeed = 50
const jumpHeight = -300
const up = Vector2(0,-1)
const gravity = 15
onready var sprite = $Sprite
onready var animationPlayer = $AnimationPlayer
var motion = Vector2()
func _physics_process(delta):
motion.y +=gravity
var friction=false
if Input.is_action_pressed("ui_right"):
sprite.flip_h = true
animationPlayer.play("Walk")
motion.x = min(motion.x + moveSpeed, maxSpeed)
elif Input.is_action_pressed("ui_left"):
sprite.flip_h = false
animationPlayer.play("Walk")
motion.x = max(motion.x - moveSpeed, -maxSpeed)
else:
animationPlayer.play("Idle")
friction = true
if is_on_floor():
if Input.is_action_pressed("ui_accept"):
motion.y = jumpHeight
if friction ==true:
motion.x = lerp(motion.x,0,0.5)
else:
if friction ==true:
motion.x=lerp(motion.x,0,0.01)
motion = move_and_slide(motion,up);
@@LuisCanary Muchas gracias, a mi sí me resultó de mucha ayuda el código. Llevaba varios minutos intentando resolver el error que menciona el del comentario jaja
oye como se puede hacer que cuando saltes tambien tenga animacion de salto porque yo hice mi propio sprite con sus animaciones de idle y walk y tambien la de salto pero ya intenta ponerla de muchas formas y no pude
Pues a ver si podemos verlo en el futuro porque habria que crear la transicion y demas, un saludo :D
Y cuenta la leyenda que aún espero la otra parte
Hay video 4! :D
Buenas LuisCanary, solo queria saber si sabes que el Characterbody2D en GD 4 al crear el script te ofrece una plantilla ya hecha para el movimiento de plataformas 2D. Crees que me recomiendas usar esa o la tuya?
Para los que useis la version 4 aqui teneis el codigo, cambios importantes con respecto al video -> primero el motion es porque actualmente velocity es un Vector2D, el move_and_slide esta solo porque ya no necesita un argumento adicional, tambien se cambio el KinematicBody2D por el CharacterBody2D ya que se cambio el nombre en la nueva version, luego el lerp le ponemos velocity.x = lerp(velocity.x, 0.0, 0.5) ya que ahora necesita un float, y por ultimo ponemos func _physics_process(_delta):
Espero que asi no tengais errorcillos para aquellos y aquellas que useis la version 4 en adelante, un saludo :D Gracias a @enriqueprol3390
extends CharacterBody2D
const moveSpeed = 25
const maxSpeed = 50
const jumpHeight = -300
const gravity = 15
@onready var sprite = $Sprite2D
@onready var animationPlayer = $AnimationPlayer
func _physics_process(_delta):
velocity.y += gravity
var friction = false
if Input.is_action_pressed("ui_right"):
sprite.flip_h = true
animationPlayer.play("Walk")
velocity.x = min(velocity.x + moveSpeed, maxSpeed)
elif Input.is_action_pressed("ui_left"):
sprite.flip_h = false
animationPlayer.play("Walk")
velocity.x = max(velocity.x - moveSpeed, -maxSpeed)
else:
animationPlayer.play("Idle")
friction = true
if is_on_floor():
if Input.is_action_pressed("ui_accept"):
velocity.y = jumpHeight
if friction:
velocity.x = lerp(velocity.x, 0.0, 0.5)
else:
if friction:
velocity.x = lerp(velocity.x, 0.0, 0.01)
move_and_slide()
❤Jajaja no le temo a programar hay que aprender si o si para creae juegos,Golpe de realidad❤
Mucho ánimo!! Espero que vaya genial 😄👌
¿he echo todo lo que dice el video pero me aparece error (21,1): tabulación mixta y espacios en sangría y no se como areglarlo me apare eso en la parte de sprite.flip_h = true como lo areglo?
Buenas!, te paso el codigo por si te ayuda :D
extends KinematicBody2D
const moveSpeed = 25
const maxSpeed = 50
const jumpHeight = -300
const up = Vector2(0,-1)
const gravity = 15
onready var sprite = $Sprite
onready var animationPlayer = $AnimationPlayer
var motion = Vector2()
func _physics_process(delta):
motion.y +=gravity
var friction=false
if Input.is_action_pressed("ui_right"):
sprite.flip_h = true
animationPlayer.play("Walk")
motion.x = min(motion.x + moveSpeed, maxSpeed)
elif Input.is_action_pressed("ui_left"):
sprite.flip_h = false
animationPlayer.play("Walk")
motion.x = max(motion.x - moveSpeed, -maxSpeed)
else:
animationPlayer.play("Idle")
friction = true
if is_on_floor():
if Input.is_action_pressed("ui_accept"):
motion.y = jumpHeight
if friction ==true:
motion.x = lerp(motion.x,0,0.5)
else:
if friction ==true:
motion.x=lerp(motion.x,0,0.01)
motion = move_and_slide(motion,up);
Disculpa ami me sale un aviso de "Mixed tabs and spaces in identification" en la linea de animationplayer.play ("Walk") no sabria que sería
Te dejo el script por si te ayuda!
extends KinematicBody2D
const moveSpeed = 25
const maxSpeed = 50
const jumpHeight = -300
const up = Vector2(0,-1)
const gravity = 15
onready var sprite = $Sprite
onready var animationPlayer = $AnimationPlayer
var motion = Vector2()
func _physics_process(delta):
motion.y +=gravity
var friction=false
if Input.is_action_pressed("ui_right"):
sprite.flip_h = true
animationPlayer.play("Walk")
motion.x = min(motion.x + moveSpeed, maxSpeed)
elif Input.is_action_pressed("ui_left"):
sprite.flip_h = false
animationPlayer.play("Walk")
motion.x = max(motion.x - moveSpeed, -maxSpeed)
else:
animationPlayer.play("Idle")
friction = true
if is_on_floor():
if Input.is_action_pressed("ui_accept"):
motion.y = jumpHeight
if friction ==true:
motion.x = lerp(motion.x,0,0.5)
else:
if friction ==true:
motion.x=lerp(motion.x,0,0.01)
motion = move_and_slide(motion,up);
@@LuisCanary muchas gracias amigo
que epico
;D
Me has ayudado bastante! Tus tutoriales son muy claros. Tengo una duda, ¿como puedo agregar animaciones no jugables? ¿que me recomendarias?
Podrias usar lo mismo que hacemos para animar, aunque habria que ver la mejor manera en tu caso quiza puedas investigar sobre cinematicas en godot, un saludo :D
en esta linea de codigo me sale en error (motion = move_and_slide(motion,up);) me aparese esto (Too many arguments for "move_and_slide()" call. Expected at most 0 but received 2.)
Buenas!, te paso el codigo por si te ayuda :D
extends KinematicBody2D
const moveSpeed = 25
const maxSpeed = 50
const jumpHeight = -300
const up = Vector2(0,-1)
const gravity = 15
onready var sprite = $Sprite
onready var animationPlayer = $AnimationPlayer
var motion = Vector2()
func _physics_process(delta):
motion.y +=gravity
var friction=false
if Input.is_action_pressed("ui_right"):
sprite.flip_h = true
animationPlayer.play("Walk")
motion.x = min(motion.x + moveSpeed, maxSpeed)
elif Input.is_action_pressed("ui_left"):
sprite.flip_h = false
animationPlayer.play("Walk")
motion.x = max(motion.x - moveSpeed, -maxSpeed)
else:
animationPlayer.play("Idle")
friction = true
if is_on_floor():
if Input.is_action_pressed("ui_accept"):
motion.y = jumpHeight
if friction ==true:
motion.x = lerp(motion.x,0,0.5)
else:
if friction ==true:
motion.x=lerp(motion.x,0,0.01)
motion = move_and_slide(motion,up);
es que me paso este error me podrías ayudarme Invalid type in utility function 'lerp'. Cannot convert argument 2 from int to Vector2.
Para los que useis la version 4 aqui teneis el codigo, cambios importantes con respecto al video -> primero el motion es porque actualmente velocity es un Vector2D, el move_and_slide esta solo porque ya no necesita un argumento adicional, tambien se cambio el KinematicBody2D por el CharacterBody2D ya que se cambio el nombre en la nueva version, luego el lerp le ponemos velocity.x = lerp(velocity.x, 0.0, 0.5) ya que ahora necesita un float, y por ultimo ponemos func _physics_process(_delta):
Espero que asi no tengais errorcillos para aquellos y aquellas que useis la version 4 en adelante, un saludo :D Gracias a @enriqueprol3390
extends CharacterBody2D
const moveSpeed = 25
const maxSpeed = 50
const jumpHeight = -300
const gravity = 15
@onready var sprite = $Sprite2D
@onready var animationPlayer = $AnimationPlayer
func _physics_process(_delta):
velocity.y += gravity
var friction = false
if Input.is_action_pressed("ui_right"):
sprite.flip_h = true
animationPlayer.play("Walk")
velocity.x = min(velocity.x + moveSpeed, maxSpeed)
elif Input.is_action_pressed("ui_left"):
sprite.flip_h = false
animationPlayer.play("Walk")
velocity.x = max(velocity.x - moveSpeed, -maxSpeed)
else:
animationPlayer.play("Idle")
friction = true
if is_on_floor():
if Input.is_action_pressed("ui_accept"):
velocity.y = jumpHeight
if friction:
velocity.x = lerp(velocity.x, 0.0, 0.5)
else:
if friction:
velocity.x = lerp(velocity.x, 0.0, 0.01)
move_and_slide()
buenos vídeos! mi única queja es que deberías ver al espectador como una persona sin bases de programación. te han faltado cosillas como explicar lo que significa el "extends", las constantes, variables, etc. por todo lo demás perfecto, me está ayudando bastante a cómo empezar en este mundillo. gracias!
Tienes toda la razon de echo me sabe mal este video porque creo que si que es complejo y deberia haber echo quiza otro video entre medias para poder explicar todo mejor, un saludo :D
@@LuisCanary gracias luis, se agradece hahah. ya estoy yo mirando por ahí y tomando apuntes de lo básico como variables, bucles, etc...
si hicieras un tutorial lo vería sin duda alguna. gracias por todo!
hola tengo un problema, cuando pongo los asteriscos no me agarra y me sal error todo el tiempo que hago brou???
Buenas!, te paso el codigo por si te ayuda, un saludo :D extends KinematicBody2D
const moveSpeed = 25
const maxSpeed = 50
const jumpHeight = -300
const up = Vector2(0,-1)
const gravity = 15
onready var sprite = $Sprite
onready var animationPlayer = $AnimationPlayer
var motion = Vector2()
func _physics_process(delta):
motion.y +=gravity
var friction=false
if Input.is_action_pressed("ui_right"):
sprite.flip_h = true
animationPlayer.play("Walk")
motion.x = min(motion.x + moveSpeed, maxSpeed)
elif Input.is_action_pressed("ui_left"):
sprite.flip_h = false
animationPlayer.play("Walk")
motion.x = max(motion.x - moveSpeed, -maxSpeed)
else:
animationPlayer.play("Idle")
friction = true
if is_on_floor():
if Input.is_action_pressed("ui_accept"):
motion.y = jumpHeight
if friction ==true:
motion.x = lerp(motion.x,0,0.5)
else:
if friction ==true:
motion.x=lerp(motion.x,0,0.01)
motion = move_and_slide(motion,up);
Hola,he tenido un problama ;al poner if is_on_floor me sale "espected an intended block after if"
ayuda como lo arreglo
Buenas!, te paso el codigo por si te ayuda :D
extends KinematicBody2D
const moveSpeed = 25
const maxSpeed = 50
const jumpHeight = -300
const up = Vector2(0,-1)
const gravity = 15
onready var sprite = $Sprite
onready var animationPlayer = $AnimationPlayer
var motion = Vector2()
func _physics_process(delta):
motion.y +=gravity
var friction=false
if Input.is_action_pressed("ui_right"):
sprite.flip_h = true
animationPlayer.play("Walk")
motion.x = min(motion.x + moveSpeed, maxSpeed)
elif Input.is_action_pressed("ui_left"):
sprite.flip_h = false
animationPlayer.play("Walk")
motion.x = max(motion.x - moveSpeed, -maxSpeed)
else:
animationPlayer.play("Idle")
friction = true
if is_on_floor():
if Input.is_action_pressed("ui_accept"):
motion.y = jumpHeight
if friction ==true:
motion.x = lerp(motion.x,0,0.5)
else:
if friction ==true:
motion.x=lerp(motion.x,0,0.01)
motion = move_and_slide(motion,up);
hola tengo un problema que no colicionan mi player y el tilemap , el player se cae al bacio y estando ensima del tilemap pero no colicionan ya me fije y le puse coliciones a el tileset y bueno no se que mas hacer
Buenas! te sale algun error?, un saludo :D
tengo en rojo la parte de if Inpunt.is_action_pressed("ut_right") ... y la otra la del ut_left 9 en rojo de error solucion pls?
Revisa con cuidado el tema de mayusculas y minusculas y los fallos de letras como Input en vez de Inpunt o ui_right en vez de ut_right, un saludo :D
Estoy viendo tus tutoriales y estoy interesado en aprender de verdad el Godot, y tengo una duda, intento hacer un buen movimiento, uno que se sienta agradable , y para eso
en el momento en el que se dejara de presionar las teclas de movimiento en medio de un salto, me gustaria que el personaje se quedara completamente quieto, no que tuviera ese efecto de momentum, pero no se como hacerlo, tu sabes la linea de codigo que me hace falta para esto?
pd muchas gracias por los tutoriales!
Seria relativamente sencillo seria que si estas sin tocar suelo el personaje no pueda moverse, con lo que tenemos mas o menos se podria plantear, quiza lo veamos en un futuro, un saludo :D
Parser Error: The identifier "Imput" isn't declared in the current scope. porque me aparece eso?
Buenas!, te paso el codigo por si te ayuda :D
extends KinematicBody2D
const moveSpeed = 25
const maxSpeed = 50
const jumpHeight = -300
const up = Vector2(0,-1)
const gravity = 15
onready var sprite = $Sprite
onready var animationPlayer = $AnimationPlayer
var motion = Vector2()
func _physics_process(delta):
motion.y +=gravity
var friction=false
if Input.is_action_pressed("ui_right"):
sprite.flip_h = true
animationPlayer.play("Walk")
motion.x = min(motion.x + moveSpeed, maxSpeed)
elif Input.is_action_pressed("ui_left"):
sprite.flip_h = false
animationPlayer.play("Walk")
motion.x = max(motion.x - moveSpeed, -maxSpeed)
else:
animationPlayer.play("Idle")
friction = true
if is_on_floor():
if Input.is_action_pressed("ui_accept"):
motion.y = jumpHeight
if friction ==true:
motion.x = lerp(motion.x,0,0.5)
else:
if friction ==true:
motion.x=lerp(motion.x,0,0.01)
motion = move_and_slide(motion,up);
Luiss vacan tu serie, pero no te olvides de una serie de craftinggg
Jajajaja, lo tendre en cuenta :D
Luis estoy usando la versión 3.5.1 y tal vez hay algo que cambiar para poder mover mi player ya que no se puede mover
Buenas!, te paso el codigo por si te ayuda :D
extends KinematicBody2D
const moveSpeed = 25
const maxSpeed = 50
const jumpHeight = -300
const up = Vector2(0,-1)
const gravity = 15
onready var sprite = $Sprite
onready var animationPlayer = $AnimationPlayer
var motion = Vector2()
func _physics_process(delta):
motion.y +=gravity
var friction=false
if Input.is_action_pressed("ui_right"):
sprite.flip_h = true
animationPlayer.play("Walk")
motion.x = min(motion.x + moveSpeed, maxSpeed)
elif Input.is_action_pressed("ui_left"):
sprite.flip_h = false
animationPlayer.play("Walk")
motion.x = max(motion.x - moveSpeed, -maxSpeed)
else:
animationPlayer.play("Idle")
friction = true
if is_on_floor():
if Input.is_action_pressed("ui_accept"):
motion.y = jumpHeight
if friction ==true:
motion.x = lerp(motion.x,0,0.5)
else:
if friction ==true:
motion.x=lerp(motion.x,0,0.01)
motion = move_and_slide(motion,up);
Buen video Luis estoy aprendiendo mucho. Tengo una preguntas y es que cuando presiono la tecla para ir hacia la izquierda hace la animación pero igual va hacia la derecha, tienes alguna solución?
Revisa en codigo cuando hacemos los Inputs el tema de simbolos asi como las teclas que usamos que este todo guachi escrito, un saludo :D
por si no lo resolviste aun, es simple le tenes que agregar un "-" en maxSpeed de "ui_left" osea te tiene que quedar asi:
elif Input.is_action_pressed("ui_left"):
sprite.flip_h = false
animationPlayer.play("Walk")
motion.x = max(motion.x -moveSpeed,-maxSpeed)
ayuda pongo else: y me sale algo rojo diciendo unindent no coincide con ningún nivel de identificación externo
Buenas!, te paso el codigo por si te ayuda :D
extends KinematicBody2D
const moveSpeed = 25
const maxSpeed = 50
const jumpHeight = -300
const up = Vector2(0,-1)
const gravity = 15
onready var sprite = $Sprite
onready var animationPlayer = $AnimationPlayer
var motion = Vector2()
func _physics_process(delta):
motion.y +=gravity
var friction=false
if Input.is_action_pressed("ui_right"):
sprite.flip_h = true
animationPlayer.play("Walk")
motion.x = min(motion.x + moveSpeed, maxSpeed)
elif Input.is_action_pressed("ui_left"):
sprite.flip_h = false
animationPlayer.play("Walk")
motion.x = max(motion.x - moveSpeed, -maxSpeed)
else:
animationPlayer.play("Idle")
friction = true
if is_on_floor():
if Input.is_action_pressed("ui_accept"):
motion.y = jumpHeight
if friction ==true:
motion.x = lerp(motion.x,0,0.5)
else:
if friction ==true:
motion.x=lerp(motion.x,0,0.01)
motion = move_and_slide(motion,up);
no me marca rojo algún script Pero al darle play no se mueve a la izquierda solo a la derecha incluso presionando la tecla de izquierda igualmente va a la derecha pero el personaje si hace su cambió de animación. ayuda
Ya lo arregle en el 28
Motion.x = max(Motion.x - moveSpeed, -maxSpeed)
No puse el - en maxSpeed fue mi error ahora si me va perfecto.
Me alegro que se solucionara!, un saludo :D
hola Luis te mando un saludo desde mexico tienes un canal excelente y explicas muy bien
estoy haciendo este curso o tutorial y me encanta tengo un problemita hasta este video el player ya tendria que caminar y saltar pero el mio solo salta cual podra ser mi error ?
muchas gracias ...
Buenas!, te paso el codigo por si te ayuda :D
extends KinematicBody2D
const moveSpeed = 25
const maxSpeed = 50
const jumpHeight = -300
const up = Vector2(0,-1)
const gravity = 15
onready var sprite = $Sprite
onready var animationPlayer = $AnimationPlayer
var motion = Vector2()
func _physics_process(delta):
motion.y +=gravity
var friction=false
if Input.is_action_pressed("ui_right"):
sprite.flip_h = true
animationPlayer.play("Walk")
motion.x = min(motion.x + moveSpeed, maxSpeed)
elif Input.is_action_pressed("ui_left"):
sprite.flip_h = false
animationPlayer.play("Walk")
motion.x = max(motion.x - moveSpeed, -maxSpeed)
else:
animationPlayer.play("Idle")
friction = true
if is_on_floor():
if Input.is_action_pressed("ui_accept"):
motion.y = jumpHeight
if friction ==true:
motion.x = lerp(motion.x,0,0.5)
else:
if friction ==true:
motion.x=lerp(motion.x,0,0.01)
motion = move_and_slide(motion,up);
Oye bro, se podria agregar un pequeño dash o impulso al personaje? Porque estoy haciendo un fangame de pizza tower y eso me serviria mucho
Si se podria, quiza podamos hacer algun video en el futuro sobre eso, un saludo :D
@@LuisCanary Gracias! Saludos ;)
En la parte de scprit dice esperando contsante o alg asi en la primera parte donde ponemos el valor 25 aparece un codigo de error
Para los que useis la version 4 aqui teneis el codigo, cambios importantes con respecto al video -> primero el motion es porque actualmente velocity es un Vector2D, el move_and_slide esta solo porque ya no necesita un argumento adicional, tambien se cambio el KinematicBody2D por el CharacterBody2D ya que se cambio el nombre en la nueva version, luego el lerp le ponemos velocity.x = lerp(velocity.x, 0.0, 0.5) ya que ahora necesita un float, y por ultimo ponemos func _physics_process(_delta):
Espero que asi no tengais errorcillos para aquellos y aquellas que useis la version 4 en adelante, un saludo :D Gracias a @enriqueprol3390
extends CharacterBody2D
const moveSpeed = 25
const maxSpeed = 50
const jumpHeight = -300
const gravity = 15
@onready var sprite = $Sprite2D
@onready var animationPlayer = $AnimationPlayer
func _physics_process(_delta):
velocity.y += gravity
var friction = false
if Input.is_action_pressed("ui_right"):
sprite.flip_h = true
animationPlayer.play("Walk")
velocity.x = min(velocity.x + moveSpeed, maxSpeed)
elif Input.is_action_pressed("ui_left"):
sprite.flip_h = false
animationPlayer.play("Walk")
velocity.x = max(velocity.x - moveSpeed, -maxSpeed)
else:
animationPlayer.play("Idle")
friction = true
if is_on_floor():
if Input.is_action_pressed("ui_accept"):
velocity.y = jumpHeight
if friction:
velocity.x = lerp(velocity.x, 0.0, 0.5)
else:
if friction:
velocity.x = lerp(velocity.x, 0.0, 0.01)
move_and_slide()
Necesito ayuda, me está poniendo un error en la línea 15 que dice que el argumento delta no es usado en 'physics_proceds'. No entiendo que quiere decir eso y estoy completamente perdido, agradecería si me echarás un cable en eso.
Buenas!, te paso el codigo por si te ayuda :D
extends KinematicBody2D
const moveSpeed = 25
const maxSpeed = 50
const jumpHeight = -300
const up = Vector2(0,-1)
const gravity = 15
onready var sprite = $Sprite
onready var animationPlayer = $AnimationPlayer
var motion = Vector2()
func _physics_process(delta):
motion.y +=gravity
var friction=false
if Input.is_action_pressed("ui_right"):
sprite.flip_h = true
animationPlayer.play("Walk")
motion.x = min(motion.x + moveSpeed, maxSpeed)
elif Input.is_action_pressed("ui_left"):
sprite.flip_h = false
animationPlayer.play("Walk")
motion.x = max(motion.x - moveSpeed, -maxSpeed)
else:
animationPlayer.play("Idle")
friction = true
if is_on_floor():
if Input.is_action_pressed("ui_accept"):
motion.y = jumpHeight
if friction ==true:
motion.x = lerp(motion.x,0,0.5)
else:
if friction ==true:
motion.x=lerp(motion.x,0,0.01)
motion = move_and_slide(motion,up);
en el renglon 25 me dice que la expresion elif esta mal . alguien sabe porque?
Buenas!, te paso el codigo por si te ayuda :D
extends KinematicBody2D
const moveSpeed = 25
const maxSpeed = 50
const jumpHeight = -300
const up = Vector2(0,-1)
const gravity = 15
onready var sprite = $Sprite
onready var animationPlayer = $AnimationPlayer
var motion = Vector2()
func _physics_process(delta):
motion.y +=gravity
var friction=false
if Input.is_action_pressed("ui_right"):
sprite.flip_h = true
animationPlayer.play("Walk")
motion.x = min(motion.x + moveSpeed, maxSpeed)
elif Input.is_action_pressed("ui_left"):
sprite.flip_h = false
animationPlayer.play("Walk")
motion.x = max(motion.x - moveSpeed, -maxSpeed)
else:
animationPlayer.play("Idle")
friction = true
if is_on_floor():
if Input.is_action_pressed("ui_accept"):
motion.y = jumpHeight
if friction ==true:
motion.x = lerp(motion.x,0,0.5)
else:
if friction ==true:
motion.x=lerp(motion.x,0,0.01)
motion = move_and_slide(motion,up);
hola tengo un problema y es que habiendo hecho el mismo código mi personaje se mueve mas lento y no salta casi alguien me podría decir porque
Buenas! te sale algun error?, un saludo :D
Sabes explicar muy bien, pero tengo una duda. En caso que lo quiera manejar para Android como seria?
por que cuando me muevo para un lado lo hace de espaldas y lento? no entiendo eso
Buenas!, te paso el codigo por si te ayuda :D
extends KinematicBody2D
const moveSpeed = 25
const maxSpeed = 50
const jumpHeight = -300
const up = Vector2(0,-1)
const gravity = 15
onready var sprite = $Sprite
onready var animationPlayer = $AnimationPlayer
var motion = Vector2()
func _physics_process(delta):
motion.y +=gravity
var friction=false
if Input.is_action_pressed("ui_right"):
sprite.flip_h = true
animationPlayer.play("Walk")
motion.x = min(motion.x + moveSpeed, maxSpeed)
elif Input.is_action_pressed("ui_left"):
sprite.flip_h = false
animationPlayer.play("Walk")
motion.x = max(motion.x - moveSpeed, -maxSpeed)
else:
animationPlayer.play("Idle")
friction = true
if is_on_floor():
if Input.is_action_pressed("ui_accept"):
motion.y = jumpHeight
if friction ==true:
motion.x = lerp(motion.x,0,0.5)
else:
if friction ==true:
motion.x=lerp(motion.x,0,0.01)
motion = move_and_slide(motion,up);
Hola Luis, tengo una duda, como se agregan mas animaciones como por ejemplo una animación de salto?
Pues es algo que me molaria enseñar en un futuro, un saludo :D
@@LuisCanaryjusto estoy ocupando ese tuto y no hay en ningún lado sería muy útil si lo llegaras a hacer
Parece que tengo un error bastante unico, cuando me muevo para la derecha, avanza muy rápido, pero para la izquiera, se mueve muy lento, como soluciono eso?
Buenas! revisa en tu codigo que la linea de movernos hacia un lado u el otro no tenga nada raro, algun simbolo o numero de mas que aumente la velocidad de tu personaje de un lado al otro, un saludo :D
Tengo un pequeño problema, tengo sprites que la hitbox en algunos sprites es como un rectangulo vertical pero otros sprites en los que la hitbox debería ser totalmente distinta, me pasa lo mismo con las texturas y no se como cambiar de sprites y hitbox debido a que hay una sola hitbox para cada sprite y un tamaño para cada textura, hay algo que se pueda hacer o no
Buenas! he visto un video que explica un poco las colisiones quiza te ayude, un saludo :D th-cam.com/video/1Uk1yhGtnOo/w-d-xo.html
bien, ya e resuleto mi otro problema, ahora lo que pasa es que cuando dejo de caminar, la animacion sigue aunque esté parado, y me gustaria poner una animacion para cada cosa es decir, saltar, quedarse quieto, agacharse etc
Quiza lo veamos en un futuro, un saludo :D
ayuda en la barra 15 de: func _physics_process(delta): me dice que no se debe poner usar asi delta y lo use con barra baja pero cuando lo hago no funciona
Buenas!, te paso el codigo por si te ayuda :D
extends KinematicBody2D
const moveSpeed = 25
const maxSpeed = 50
const jumpHeight = -300
const up = Vector2(0,-1)
const gravity = 15
onready var sprite = $Sprite
onready var animationPlayer = $AnimationPlayer
var motion = Vector2()
func _physics_process(delta):
motion.y +=gravity
var friction=false
if Input.is_action_pressed("ui_right"):
sprite.flip_h = true
animationPlayer.play("Walk")
motion.x = min(motion.x + moveSpeed, maxSpeed)
elif Input.is_action_pressed("ui_left"):
sprite.flip_h = false
animationPlayer.play("Walk")
motion.x = max(motion.x - moveSpeed, -maxSpeed)
else:
animationPlayer.play("Idle")
friction = true
if is_on_floor():
if Input.is_action_pressed("ui_accept"):
motion.y = jumpHeight
if friction ==true:
motion.x = lerp(motion.x,0,0.5)
else:
if friction ==true:
motion.x=lerp(motion.x,0,0.01)
motion = move_and_slide(motion,up);
hola Luis si puedes decirme tengo un fallo en el 32, 27 y 40 y todas me dise Parser Error: The identifier "friction" isn't declared in the current scope y eso es un fallo con friction llevo 2 días sin poder hacer nada
un saludo
hola ya resolvi el problema era poner al enter cuando escribia friction increible
Me alegro que se solucionara :D
cuando pongo la programacion siempre tengo un error osea todo esta bien escrito pero el problema son los ESPACIOS no se como acomodar las cosas y por eso me sale mal. AYUDA!!
Buenas!, te paso el codigo por si te ayuda :D
extends KinematicBody2D
const moveSpeed = 25
const maxSpeed = 50
const jumpHeight = -300
const up = Vector2(0,-1)
const gravity = 15
onready var sprite = $Sprite
onready var animationPlayer = $AnimationPlayer
var motion = Vector2()
func _physics_process(delta):
motion.y +=gravity
var friction=false
if Input.is_action_pressed("ui_right"):
sprite.flip_h = true
animationPlayer.play("Walk")
motion.x = min(motion.x + moveSpeed, maxSpeed)
elif Input.is_action_pressed("ui_left"):
sprite.flip_h = false
animationPlayer.play("Walk")
motion.x = max(motion.x - moveSpeed, -maxSpeed)
else:
animationPlayer.play("Idle")
friction = true
if is_on_floor():
if Input.is_action_pressed("ui_accept"):
motion.y = jumpHeight
if friction ==true:
motion.x = lerp(motion.x,0,0.5)
else:
if friction ==true:
motion.x=lerp(motion.x,0,0.01)
motion = move_and_slide(motion,up);
Me encontré con un problema, tengo un error en el código que dice lo siguiente: The method "is_on_floor" isn´t not declared in the current class.
*Resuelto* en la primera linea de codigo estaba "extends AnimationPlayer" y era "extends KinematicBody2D"
Me alegro que se solucionara, un saludo :D
Hola Luis, primero gracias por tus videos y saludos desde Colombia; quisiera preguntar, que función tiene @onready?
Pues aqui se comenta super rapido espero te ayude!, un saludo :D th-cam.com/video/tvogJJPrIfk/w-d-xo.html
Tengo 2 problemas cuando le doy a la izquierda se mueve a la derecha pero cuando le doy a la derecha se mueve a la derecha y el segundo es que mi personaje no para la animación de caminar por ocupe otro sprite agradecería mucha una ayudita
Buenas te paso el codigo por si te ayuda!, un saludo :D
const moveSpeed = 25
const maxSpeed = 50
const jumpHeight = -300
const up = Vector2(0,-1)
const gravity = 15
onready var sprite = $Sprite
onready var animationPlayer = $AnimationPlayer
var motion = Vector2()
func _physics_process(delta):
motion.y +=gravity
var friction=false
if Input.is_action_pressed("ui_right"):
sprite.flip_h = true
animationPlayer.play("Walk")
motion.x = min(motion.x + moveSpeed, maxSpeed)
elif Input.is_action_pressed("ui_left"):
sprite.flip_h = false
animationPlayer.play("Walk")
motion.x = max(motion.x - moveSpeed, -maxSpeed)
else:
animationPlayer.play("Idle")
friction = true
if is_on_floor():
if Input.is_action_pressed("ui_accept"):
motion.y = jumpHeight
if friction ==true:
motion.x = lerp(motion.x,0,0.5)
else:
if friction ==true:
motion.x=lerp(motion.x,0,0.01)
motion = move_and_slide(motion,up);
if Input.is_action_pressed("ui_right")
sprite.flip_h =false
animationPlayer.play("walk")
onready var sprite $Sprite
onready var animationPlayer = $AnimationPlayer
Por qué me salen rojo
Para los que useis la version 4 aqui teneis el codigo, cambios importantes con respecto al video -> primero el motion es porque actualmente velocity es un Vector2D, el move_and_slide esta solo porque ya no necesita un argumento adicional, tambien se cambio el KinematicBody2D por el CharacterBody2D ya que se cambio el nombre en la nueva version, luego el lerp le ponemos velocity.x = lerp(velocity.x, 0.0, 0.5) ya que ahora necesita un float, y por ultimo ponemos func _physics_process(_delta):
Espero que asi no tengais errorcillos para aquellos y aquellas que useis la version 4 en adelante, un saludo :D Gracias a @enriqueprol3390
extends CharacterBody2D
const moveSpeed = 25
const maxSpeed = 50
const jumpHeight = -300
const gravity = 15
@onready var sprite = $Sprite2D
@onready var animationPlayer = $AnimationPlayer
func _physics_process(_delta):
velocity.y += gravity
var friction = false
if Input.is_action_pressed("ui_right"):
sprite.flip_h = true
animationPlayer.play("Walk")
velocity.x = min(velocity.x + moveSpeed, maxSpeed)
elif Input.is_action_pressed("ui_left"):
sprite.flip_h = false
animationPlayer.play("Walk")
velocity.x = max(velocity.x - moveSpeed, -maxSpeed)
else:
animationPlayer.play("Idle")
friction = true
if is_on_floor():
if Input.is_action_pressed("ui_accept"):
velocity.y = jumpHeight
if friction:
velocity.x = lerp(velocity.x, 0.0, 0.5)
else:
if friction:
velocity.x = lerp(velocity.x, 0.0, 0.01)
move_and_slide()
Mi personaje se cae pero no se por que por que estoy en godot 4 y no me sale la opcion de collider en el mapa
Que raro revisaria la colision de tu player y del mapa, te sale algun error?, un saludo :D
Hola, tengo un problema, y es que no ttengo ningun error de sintaxis pero cuando ejecuto el juego y apreto alguna flechita me aparec esto Invalid type in function 'move_and_slide' in base 'KinematicBody2D (Player.gd)'. Cannot convert argument 1 from float to Vector2.
te paso el codigo por si te ayuda, un saludo :D
extends KinematicBody2D
const moveSpeed = 25
const maxSpeed = 50
const jumpHeight = -300
const up = Vector2(0,-1)
const gravity = 15
onready var sprite = $Sprite
onready var animationPlayer = $AnimationPlayer
var motion = Vector2()
func _physics_process(delta):
motion.y +=gravity
var friction=false
if Input.is_action_pressed("ui_right"):
sprite.flip_h = true
animationPlayer.play("Walk")
motion.x = min(motion.x + moveSpeed, maxSpeed)
elif Input.is_action_pressed("ui_left"):
sprite.flip_h = false
animationPlayer.play("Walk")
motion.x = max(motion.x - moveSpeed, -maxSpeed)
else:
animationPlayer.play("Idle")
friction = true
if is_on_floor():
if Input.is_action_pressed("ui_accept"):
motion.y = jumpHeight
if friction ==true:
motion.x = lerp(motion.x,0,0.5)
else:
if friction ==true:
motion.x=lerp(motion.x,0,0.01)
motion = move_and_slide(motion,up);
q hago si me dice: The method "is_on_floor" isn`t declared in the current class. AYUDAAAAAAAAAAAAAAAAAAA
Buenas!, te paso el codigo por si te ayuda :D
extends KinematicBody2D
const moveSpeed = 25
const maxSpeed = 50
const jumpHeight = -300
const up = Vector2(0,-1)
const gravity = 15
onready var sprite = $Sprite
onready var animationPlayer = $AnimationPlayer
var motion = Vector2()
func _physics_process(delta):
motion.y +=gravity
var friction=false
if Input.is_action_pressed("ui_right"):
sprite.flip_h = true
animationPlayer.play("Walk")
motion.x = min(motion.x + moveSpeed, maxSpeed)
elif Input.is_action_pressed("ui_left"):
sprite.flip_h = false
animationPlayer.play("Walk")
motion.x = max(motion.x - moveSpeed, -maxSpeed)
else:
animationPlayer.play("Idle")
friction = true
if is_on_floor():
if Input.is_action_pressed("ui_accept"):
motion.y = jumpHeight
if friction ==true:
motion.x = lerp(motion.x,0,0.5)
else:
if friction ==true:
motion.x=lerp(motion.x,0,0.01)
motion = move_and_slide(motion,up);
tengo una duda y es el por que atravieso los objetos cuando pongo iniciar
Sera por la colision de tu jugador o del mapa que no esta bien ajustada, un saludo :D
@LuisCanary porfa te pido que hagas el tutorial pero en GODOT 4 ya que no entiendo los cambios que han echo porfa
ya, me molaria actualizarlo si, un saludo :D
twngo un problema y es que if Input.is_action_pressed("ui_right"):
sprite.flip_h = true
animationPlayer.play("Walk")
motion.x = min(motion.x + moveSpeed, maxSpeed) al poner : despues de ui_right me dice error en walk
como puedo solucionarlo?
if Input.is_action_pressed("ui_right"):
sprite.flip_h = true
animationPlayer.play("Walk")
motion.x = min(motion.x + moveSpeed, maxSpeed)
Esto es lo que tengo en mi codigo, espero te sirva, un saludo :D
me marca un error en la linea 36 --- r: The identifier "jump_Height" isn't declared in the current scope.
Buenas!, te paso el codigo por si te ayuda :D
extends KinematicBody2D
const moveSpeed = 25
const maxSpeed = 50
const jumpHeight = -300
const up = Vector2(0,-1)
const gravity = 15
onready var sprite = $Sprite
onready var animationPlayer = $AnimationPlayer
var motion = Vector2()
func _physics_process(delta):
motion.y +=gravity
var friction=false
if Input.is_action_pressed("ui_right"):
sprite.flip_h = true
animationPlayer.play("Walk")
motion.x = min(motion.x + moveSpeed, maxSpeed)
elif Input.is_action_pressed("ui_left"):
sprite.flip_h = false
animationPlayer.play("Walk")
motion.x = max(motion.x - moveSpeed, -maxSpeed)
else:
animationPlayer.play("Idle")
friction = true
if is_on_floor():
if Input.is_action_pressed("ui_accept"):
motion.y = jumpHeight
if friction ==true:
motion.x = lerp(motion.x,0,0.5)
else:
if friction ==true:
motion.x=lerp(motion.x,0,0.01)
motion = move_and_slide(motion,up);
Escribi todo como estaba en el video y cuiando intento probar el juego me aparece un error que dice: *Error(25,1): Mixed tabs and spaces in identation* El error es en la linea donde dice: *elif Input.is_action_pressed("ui_left"):*
Alguien que me pueda ayudar para solucionar este error llevo varios dias intentando en nuevos scrips y no se que estoy haciendo mal 😥😥😢
Buenas te paso el codigillo por si te ayuda! :D
extends KinematicBody2D
const moveSpeed = 25
const maxSpeed = 50
const jumpHeight = -300
const up = Vector2(0,-1)
const gravity = 15
onready var sprite = $Sprite
onready var animationPlayer = $AnimationPlayer
var motion = Vector2()
func _physics_process(delta):
motion.y +=gravity
var friction=false
if Input.is_action_pressed("ui_right"):
sprite.flip_h = true
animationPlayer.play("Walk")
motion.x = min(motion.x + moveSpeed, maxSpeed)
elif Input.is_action_pressed("ui_left"):
sprite.flip_h = false
animationPlayer.play("Walk")
motion.x = max(motion.x - moveSpeed, -maxSpeed)
else:
animationPlayer.play("Idle")
friction = true
if is_on_floor():
if Input.is_action_pressed("ui_accept"):
motion.y = jumpHeight
if friction ==true:
motion.x = lerp(motion.x,0,0.5)
else:
if friction ==true:
motion.x=lerp(motion.x,0,0.01)
motion = move_and_slide(motion,up);
Disculpen hice todos los pasos tan cual pero reemplace los Sprite con unos personales y ahora mi personaje no puede caminar salta y se intenta mover pero no se despega del piso a la hora de caminar :c ayuda
Buenas!, te paso el codigo por si te ayuda :D
extends KinematicBody2D
const moveSpeed = 25
const maxSpeed = 50
const jumpHeight = -300
const up = Vector2(0,-1)
const gravity = 15
onready var sprite = $Sprite
onready var animationPlayer = $AnimationPlayer
var motion = Vector2()
func _physics_process(delta):
motion.y +=gravity
var friction=false
if Input.is_action_pressed("ui_right"):
sprite.flip_h = true
animationPlayer.play("Walk")
motion.x = min(motion.x + moveSpeed, maxSpeed)
elif Input.is_action_pressed("ui_left"):
sprite.flip_h = false
animationPlayer.play("Walk")
motion.x = max(motion.x - moveSpeed, -maxSpeed)
else:
animationPlayer.play("Idle")
friction = true
if is_on_floor():
if Input.is_action_pressed("ui_accept"):
motion.y = jumpHeight
if friction ==true:
motion.x = lerp(motion.x,0,0.5)
else:
if friction ==true:
motion.x=lerp(motion.x,0,0.01)
motion = move_and_slide(motion,up);
hola, he tenido algunos problemas, cuando le doy a la derecha el personaje va mas rapido que la izquierda
Curioso revisa el valor de tu variable hacia un lado y otro deberia ir igual de rapido, te sale algun error?, un saludo :D
hola tengo un problema con el odigo de gravity , mi personaje se queda volando y no entiendo como solucionarlo
te sale algun error?, revisa la colision de tu mapa y del jugador, un saludo :D
hola necesito ayuda alguien sabe por que sale esto en la pag 19, 1 error uninden does not match any outer indentation level ,¿me ayudan please
Para los que useis la version 4 aqui teneis el codigo, cambios importantes con respecto al video -> primero el motion es porque actualmente velocity es un Vector2D, el move_and_slide esta solo porque ya no necesita un argumento adicional, tambien se cambio el KinematicBody2D por el CharacterBody2D ya que se cambio el nombre en la nueva version, luego el lerp le ponemos velocity.x = lerp(velocity.x, 0.0, 0.5) ya que ahora necesita un float, y por ultimo ponemos func _physics_process(_delta):
Espero que asi no tengais errorcillos para aquellos y aquellas que useis la version 4 en adelante, un saludo :D Gracias a @enriqueprol3390
extends CharacterBody2D
const moveSpeed = 25
const maxSpeed = 50
const jumpHeight = -300
const gravity = 15
@onready var sprite = $Sprite2D
@onready var animationPlayer = $AnimationPlayer
func _physics_process(_delta):
velocity.y += gravity
var friction = false
if Input.is_action_pressed("ui_right"):
sprite.flip_h = true
animationPlayer.play("Walk")
velocity.x = min(velocity.x + moveSpeed, maxSpeed)
elif Input.is_action_pressed("ui_left"):
sprite.flip_h = false
animationPlayer.play("Walk")
velocity.x = max(velocity.x - moveSpeed, -maxSpeed)
else:
animationPlayer.play("Idle")
friction = true
if is_on_floor():
if Input.is_action_pressed("ui_accept"):
velocity.y = jumpHeight
if friction:
velocity.x = lerp(velocity.x, 0.0, 0.5)
else:
if friction:
velocity.x = lerp(velocity.x, 0.0, 0.01)
move_and_slide()
hola luis no me anda esta parte bien
if is_on_floor():
if Input.is_action_pressed("ui_accept"):
motion.x = jumpHeight me sale en rojo este me ayudas
if friction == true:
motion.x = lerp(motion.x ,0,0,5)
else:
if friction== true:
motion.x = lerp(motion.x,0,0,01)
motion = move_and_slime(motion,up)
Buenas te paso el codigillo que tenemos por si te ayuda!, un saludo :D
extends KinematicBody2D
const moveSpeed = 25
const maxSpeed = 50
const jumpHeight = -300
const up = Vector2(0,-1)
const gravity = 15
onready var sprite = $Sprite
onready var animationPlayer = $AnimationPlayer
var motion = Vector2()
func _physics_process(delta):
motion.y +=gravity
var friction=false
if Input.is_action_pressed("ui_right"):
sprite.flip_h = true
animationPlayer.play("Walk")
motion.x = min(motion.x + moveSpeed, maxSpeed)
elif Input.is_action_pressed("ui_left"):
sprite.flip_h = false
animationPlayer.play("Walk")
motion.x = max(motion.x - moveSpeed, -maxSpeed)
else:
animationPlayer.play("Idle")
friction = true
if is_on_floor():
if Input.is_action_pressed("ui_accept"):
motion.y = jumpHeight
if friction ==true:
motion.x = lerp(motion.x,0,0.5)
else:
if friction ==true:
motion.x=lerp(motion.x,0,0.01)
motion = move_and_slide(motion,up);
Amé esta explicación, pero dos cositas:
- el friction = false debería ir declarado fuera de la función así no se asigna todo el tiempo (60 veces por segundo)
- Usar TAB y no espacio, creo que es más descente, pero bueno, hay toda una polémica sobre eso jajaja
Abrazo y saludos desde Argentina
Gracias por comentarlo!, un saludo :D
No tendrás de casualidad algún vídeo para hacer los movimientos pero con la programación en C#?
Buenas! no para C# en godot no tengo por ahora nada pero me gustaria traerlo en el futuro, un saludo :D
@LuisCanary estoy en godot pero no me deja escribir el comando onready , que puedo hacer para solusionarlo
Ahora en nuevas versiones creo que es @onready , un saludo :D
Hola, esque e estado viendo y en el código me sale el animation player de la línea 22 en rojo y no sé cómo arreglarlo e visto ya un par de veces el vídeo 0ero aún no lo resuelvo
te paso el codigo por si te ayuda, un saludo :D
extends KinematicBody2D
const moveSpeed = 25
const maxSpeed = 50
const jumpHeight = -300
const up = Vector2(0,-1)
const gravity = 15
onready var sprite = $Sprite
onready var animationPlayer = $AnimationPlayer
var motion = Vector2()
func _physics_process(delta):
motion.y +=gravity
var friction=false
if Input.is_action_pressed("ui_right"):
sprite.flip_h = true
animationPlayer.play("Walk")
motion.x = min(motion.x + moveSpeed, maxSpeed)
elif Input.is_action_pressed("ui_left"):
sprite.flip_h = false
animationPlayer.play("Walk")
motion.x = max(motion.x - moveSpeed, -maxSpeed)
else:
animationPlayer.play("Idle")
friction = true
if is_on_floor():
if Input.is_action_pressed("ui_accept"):
motion.y = jumpHeight
if friction ==true:
motion.x = lerp(motion.x,0,0.5)
else:
if friction ==true:
motion.x=lerp(motion.x,0,0.01)
motion = move_and_slide(motion,up);
@@LuisCanary muchas gracias, me ayudara bastante creo yo, si tengo algún problema yo te aviso :)
Porque cuando le pico al botón de right me sale que el flip_h está mal
Buenas!, te paso el codigo por si te ayuda :D
extends KinematicBody2D
const moveSpeed = 25
const maxSpeed = 50
const jumpHeight = -300
const up = Vector2(0,-1)
const gravity = 15
onready var sprite = $Sprite
onready var animationPlayer = $AnimationPlayer
var motion = Vector2()
func _physics_process(delta):
motion.y +=gravity
var friction=false
if Input.is_action_pressed("ui_right"):
sprite.flip_h = true
animationPlayer.play("Walk")
motion.x = min(motion.x + moveSpeed, maxSpeed)
elif Input.is_action_pressed("ui_left"):
sprite.flip_h = false
animationPlayer.play("Walk")
motion.x = max(motion.x - moveSpeed, -maxSpeed)
else:
animationPlayer.play("Idle")
friction = true
if is_on_floor():
if Input.is_action_pressed("ui_accept"):
motion.y = jumpHeight
if friction ==true:
motion.x = lerp(motion.x,0,0.5)
else:
if friction ==true:
motion.x=lerp(motion.x,0,0.01)
motion = move_and_slide(motion,up);
@@LuisCanary gracias Bro :)
Tengo un error de mixed use of tabs and spaces for identation en lo de los inputs!, necesito ayuda!
este video es de un año ni a palo te va a responder y a alguien con tan poca paciencia como yo no le da esto de crear video juegos
Te paso el codigo por si te ayuda!, un saludo :D Aunque parece que en nuevas versiones pueden haber cambiado alguna cosa y que no sea del todo similar la forma de hacerlo
extends CharacterBody2D
const moveSpeed = 25
const maxSpeed = 50
const jumpHeight = - 300
const up= Vector2(0,-1)
const gravity= 15
@onready var sprite = $Sprite2D
@onready var animationPlayer=$AnimationPlayer
var motion = Vector2()
func _physics_process(delta):
velocity.y += gravity
var friction = false
if Input.is_action_pressed("ui_right"):
sprite.flip_h= true
animationPlayer.play("Walk")
velocity.x = min(velocity.x+moveSpeed,maxSpeed)
elif Input.is_action_pressed("ui_left"):
sprite.flip_h= false
animationPlayer.play("Walk")
velocity.x = max(velocity.x-moveSpeed,-maxSpeed)
else:
animationPlayer.play("Idle")
friction=true
if is_on_floor():
if Input.is_action_pressed("ui_accept"):
velocity.y = jumpHeight
if friction == true:
velocity.x = lerp(0,0, 0)
else:
if friction == true:
velocity.x = lerp(0,0,1)
motion = move_and_slide()
Hola Luis un gusto saludarte, muy buenas explicaciones, te felicito.
Tengo una pregunta y veo q es un poco común.
Mi personaje al darle a las teclas de mover y saltar no lo hacen aunque si hace el cambio del Sprite?
Al revisar la consola me dice que el move_and_slide y move_and_collide no piensen estar en la funcion y no me permite que el personaje se mueva y salte.
Cómo puedo solucionar el problema?
Gracias
Logre encontrar el problema en el script, un espacio mal escrito
Me alegro que se solucionara :D, la verdad que godot es bastante exquisito con los espacios y demas
Hola.... tengo una duda, lo que pasa es que cuando lo hago como tú lo indicas cuando pulso la flecha izquierda el player se me mueve a la derecha, de resto los demás comandos si salen bien, y hice el código tal cual como tú lo escribiste. Muchas gracias por este tutorial es muy interesante, además que estoy estudiando programación de software, y queremos diseñar como trabajo final un videojuego..... Explicas muy bien....saludos desde Colombia!!
Revisa en la parte de codigo del movimiento que los simbolos esten guachis y las variables tengan los valores adecuados, tambien la colision del player con el mapa, un saludo :D
Hola Luis, una pregunta: No entiendo porque no me andan las flechas y la barra espaciadora cuando intento que el personaje se mueva y tengo todo lo escrito sin ningún error (porque no me aparece ninguno) Sabes que puede llegar a ser? Gracias. Buen video.
Revisa el tema de mayusculas y minusculas en tu codigo, sobretodo el tema del input y que tu personaje tenga todo bien configurado, un saludo :D
hola necesito ayuda esuqe mi personaje cuando muevo ala izquierda su animacion va ala derecha pero no estoy usando al slime si no otro de igual manera mi personaje se cae o traspasa el mapa que hice por favor ayuda que ya le puse colision al mapa y al personaje ayudaaa
Buenas!, te paso el codigo por si te ayuda :D
extends KinematicBody2D
const moveSpeed = 25
const maxSpeed = 50
const jumpHeight = -300
const up = Vector2(0,-1)
const gravity = 15
onready var sprite = $Sprite
onready var animationPlayer = $AnimationPlayer
var motion = Vector2()
func _physics_process(delta):
motion.y +=gravity
var friction=false
if Input.is_action_pressed("ui_right"):
sprite.flip_h = true
animationPlayer.play("Walk")
motion.x = min(motion.x + moveSpeed, maxSpeed)
elif Input.is_action_pressed("ui_left"):
sprite.flip_h = false
animationPlayer.play("Walk")
motion.x = max(motion.x - moveSpeed, -maxSpeed)
else:
animationPlayer.play("Idle")
friction = true
if is_on_floor():
if Input.is_action_pressed("ui_accept"):
motion.y = jumpHeight
if friction ==true:
motion.x = lerp(motion.x,0,0.5)
else:
if friction ==true:
motion.x=lerp(motion.x,0,0.01)
motion = move_and_slide(motion,up);
@@LuisCanary no era el script si no que no le metí colisión al TileMap xD pero me ayudas del personaje su movimiento por que ya no es el slime
Me alegro que se solucionara, y lo otro que dices aunque no sea el slime deberia funcionar el movimiento eso si, un saludo :D
Tengo un problema ya hizo todo el proceso ni un error sales pero al darle play sale esto attempt to call function play in base nul instance on a null instances como soluciono eso ayudame porfa bro 😢
Para los que useis la version 4 aqui teneis el codigo, cambios importantes con respecto al video -> primero el motion es porque actualmente velocity es un Vector2D, el move_and_slide esta solo porque ya no necesita un argumento adicional, tambien se cambio el KinematicBody2D por el CharacterBody2D ya que se cambio el nombre en la nueva version, luego el lerp le ponemos velocity.x = lerp(velocity.x, 0.0, 0.5) ya que ahora necesita un float, y por ultimo ponemos func _physics_process(_delta):
Espero que asi no tengais errorcillos para aquellos y aquellas que useis la version 4 en adelante, un saludo :D Gracias a @enriqueprol3390
extends CharacterBody2D
const moveSpeed = 25
const maxSpeed = 50
const jumpHeight = -300
const gravity = 15
@onready var sprite = $Sprite2D
@onready var animationPlayer = $AnimationPlayer
func _physics_process(_delta):
velocity.y += gravity
var friction = false
if Input.is_action_pressed("ui_right"):
sprite.flip_h = true
animationPlayer.play("Walk")
velocity.x = min(velocity.x + moveSpeed, maxSpeed)
elif Input.is_action_pressed("ui_left"):
sprite.flip_h = false
animationPlayer.play("Walk")
velocity.x = max(velocity.x - moveSpeed, -maxSpeed)
else:
animationPlayer.play("Idle")
friction = true
if is_on_floor():
if Input.is_action_pressed("ui_accept"):
velocity.y = jumpHeight
if friction:
velocity.x = lerp(velocity.x, 0.0, 0.5)
else:
if friction:
velocity.x = lerp(velocity.x, 0.0, 0.01)
move_and_slide()
te hago una consulta. @luiscanary estoy con la misma version y todo siguiendo el tutorial pero me ocurre que hacia la derecha tiende a ir mas rapido tanto caminando como saltando, lo mire por todos lados y no le encuentro la vuelta que podra ser?¿?¿¿?¿
Ui que raro jajaja, quiza algun simbolo de mas que tengas puesto, porque errores no te salen no?, un saludo :D
@@LuisCanary nono era como que estaba todo igual, pero a la derecha siempre caminaba mas o si saltaba hacia super saltos, era bastante extraño, pero se volvia injugable, finalmente lo resolví aunque no se si con gemini, o gpt4, porque pregunte en los dos y una solución no me andaba, pero no me acuerdo en cual, que me decía que el problema era por el delta, y me mostro como agregarlo para que no ocurra mas, y en efecto luego ya no me paso mas, ahora anda bien, ya al menos pude armar varias escenas para mi juego sin problemas, (luego si puedo buscare el codigo y lo compartire, x aqui, ahora no esoy en casa), algo que estuve haciendo también, es que creo los sprites con inteligencia artificial (comfyui), me arme un workflow bastante lindo, luego los animo, a un mp4, y si la animación me sirve porque es imposible de saber antes, pero si me sirve, tomo el mp4 entonces animado, (que si la figura esta estática, hace como la animación idle, o si hago muchas animaciones en alguna camina o parece saltar, o sirven para ello los frames, entonces me hice un programa en purebasic que le extrae los frames al video, y me arma la plantilla del tileset, tambien le agregue que me cree ya el formato del objeto animado con el codigo de godot,de la animacion, asi no tengo que agregar cada vez, los frames animados uno a uno, entonces si creo variaciones del personaje principal, ya con arrastrar los archivos queda listo, y me hice otro programita mas que luego le agrega el alpha. para que tengan la transparencia, y ahi ya al menos va quedando mucho mejor! en una tarde me hice como 100 personajes. sino me pasaba que los sprites eran todos cuadrados basicamente, si creaba un solo objeto por ahi quedaba el alpha bien, pero al animarlo chau, (vere luego si puedo armar alguna herramienta para hacerlo automatico, ya que a mucha gente me imagino que si dibuja los sprites les pasara eso, aunque bueno lo de filtrarlos y retocar algunas cosas aveces es inevitable, porque tambien me pasaba que si lo retocaba en paint, al guardar perdia la transparencia, pero bueno ahi le volvia a pasar mi programita y volvia a agregar el alpha, seria bueno ver en photoshop o gimp si ahi se puede hacer eso, aunque la verdad en ese sentido los he usado pero poco y nada. lo mismo los fondos he creado varios con inteligencia artificial y muy lindos, aunquejusto el tema de mi juego parece no existir, tengo como 1tb en checkpoints y ninguno los generaba.
no explicaste como se selecciona el sprite especifico que quieras para la animacion, ahi parece que se elije automaticamente el que el programa quiera...
Buenas! a que momento te refieres?, depende un poco del sprite que elige de base el comienzo pero se puede cambiar, un saludo :D
Hola! disculpa cuando le doy en reproducir escena mi personaje traspasa los bloques del mapa y se cae alguna recomendación?
Revisa la colision de mapa y del player seguramente sea por eso, un saludo :D
Ayuda cuando puse el elif imput.is_actionprossed('ui_left'): siempre me sale rojo y dice que el problema es elif ¿que puedo hacer en mi caso?
A mi también :(, ¿lo pudiste resolver?
Para los que useis la version 4 aqui teneis el codigo, cambios importantes con respecto al video -> primero el motion es porque actualmente velocity es un Vector2D, el move_and_slide esta solo porque ya no necesita un argumento adicional, tambien se cambio el KinematicBody2D por el CharacterBody2D ya que se cambio el nombre en la nueva version, luego el lerp le ponemos velocity.x = lerp(velocity.x, 0.0, 0.5) ya que ahora necesita un float, y por ultimo ponemos func _physics_process(_delta):
Espero que asi no tengais errorcillos para aquellos y aquellas que useis la version 4 en adelante, un saludo :D Gracias a @enriqueprol3390
extends CharacterBody2D
const moveSpeed = 25
const maxSpeed = 50
const jumpHeight = -300
const gravity = 15
@onready var sprite = $Sprite2D
@onready var animationPlayer = $AnimationPlayer
func _physics_process(_delta):
velocity.y += gravity
var friction = false
if Input.is_action_pressed("ui_right"):
sprite.flip_h = true
animationPlayer.play("Walk")
velocity.x = min(velocity.x + moveSpeed, maxSpeed)
elif Input.is_action_pressed("ui_left"):
sprite.flip_h = false
animationPlayer.play("Walk")
velocity.x = max(velocity.x - moveSpeed, -maxSpeed)
else:
animationPlayer.play("Idle")
friction = true
if is_on_floor():
if Input.is_action_pressed("ui_accept"):
velocity.y = jumpHeight
if friction:
velocity.x = lerp(velocity.x, 0.0, 0.5)
else:
if friction:
velocity.x = lerp(velocity.x, 0.0, 0.01)
move_and_slide()
@@LuisCanary yo tengo godot 3.5.3 y me pasa tambien :(
Ese codigo tambien me sirve??
Buenas!, te paso el codigo por si te ayuda :D
extends KinematicBody2D
const moveSpeed = 25
const maxSpeed = 50
const jumpHeight = -300
const up = Vector2(0,-1)
const gravity = 15
onready var sprite = $Sprite
onready var animationPlayer = $AnimationPlayer
var motion = Vector2()
func _physics_process(delta):
motion.y +=gravity
var friction=false
if Input.is_action_pressed("ui_right"):
sprite.flip_h = true
animationPlayer.play("Walk")
motion.x = min(motion.x + moveSpeed, maxSpeed)
elif Input.is_action_pressed("ui_left"):
sprite.flip_h = false
animationPlayer.play("Walk")
motion.x = max(motion.x - moveSpeed, -maxSpeed)
else:
animationPlayer.play("Idle")
friction = true
if is_on_floor():
if Input.is_action_pressed("ui_accept"):
motion.y = jumpHeight
if friction ==true:
motion.x = lerp(motion.x,0,0.5)
else:
if friction ==true:
motion.x=lerp(motion.x,0,0.01)
motion = move_and_slide(motion,up);
Hola Luis! No llego a comprender por qué se usan numeros negativos para velocidades que van hacia arriba y viceversa
En un eje de coordenadas si estas por asi decirlo en el centro estas en (0,0) si es 2D si vas a la izquierda o abajo se representa con valores negativos y si vas arriba o a la derecha es valores positivos, es una manera de saber tu posicion de una manera mas o menos sencillita, para las velocidades seria similar lo que implica es hacia donde quieres ir si es en el eje y negativo es para abajo por ejemplo, un saludo :D
Buenas Luis, te tengo una consulta:
Hago el script literalmente como vos haces en el video y me sale un error:
Script Inherits from native type 'Kinematic Body2D', so it can't be instanced in object of type: 'Sprite'
Eso es lo que me sale en rojo afuera del script y no me deja darle al play para probarlo
(Tengo la misma versión que vos del godot 3.4)
Buenas!, te paso el codigo por si te ayuda :D
extends KinematicBody2D
const moveSpeed = 25
const maxSpeed = 50
const jumpHeight = -300
const up = Vector2(0,-1)
const gravity = 15
onready var sprite = $Sprite
onready var animationPlayer = $AnimationPlayer
var motion = Vector2()
func _physics_process(delta):
motion.y +=gravity
var friction=false
if Input.is_action_pressed("ui_right"):
sprite.flip_h = true
animationPlayer.play("Walk")
motion.x = min(motion.x + moveSpeed, maxSpeed)
elif Input.is_action_pressed("ui_left"):
sprite.flip_h = false
animationPlayer.play("Walk")
motion.x = max(motion.x - moveSpeed, -maxSpeed)
else:
animationPlayer.play("Idle")
friction = true
if is_on_floor():
if Input.is_action_pressed("ui_accept"):
motion.y = jumpHeight
if friction ==true:
motion.x = lerp(motion.x,0,0.5)
else:
if friction ==true:
motion.x=lerp(motion.x,0,0.01)
motion = move_and_slide(motion,up);