Saltar y Moverse hacia los lados
No puedo encontrar la manera de moverme hacia los lados y saltar al mismo tiempo, solo uno u otro.
He intentado asyncio y multithreading/multiprocessing y no pude hacer que funcionara. Se me han acabado las ideas y no encuentro más en línea. También tengo otro problema donde puedo saltar y si alcanzo el punto máximo del salto y mantengo presionada a o d puedo moverme de lado a lado flotando.
class Player():
def __init__(self, salud, potenciadores, altura, ancho):
self.salud = salud
self.potenciadores = potenciadores
self.altura = altura
self.ancho = ancho
def saltar():
global gravtest, press
press.remove('w')
gravtest = False
y = jugador[0].ycor()
for i in range(1, 10):
jugador[0].sety(y+(i*5))
time.sleep(0.05)
# while jugador[0]
gravtest = True
def poderes(self, potenciadores):
import turtle as t
import time, random
from pynput.keyboard import Key, Listener
t.ht()
press = []
gravtest = True
wn = t.Screen()
wn.title("Jump Man")
wn.bgcolor("white")
wn.screensize(250, 250)
wn.setup(width=1.0, height=1.0)
jugador = [t.Turtle(), Player(100, [], 25, 25)]
jugador[0].speed(0)
jugador[0].shapesize(0.5)
jugador[0].shape("square")
jugador[0].color("black")
jugador[0].up()
jugador[0].goto(0, 0)
suelo = t.Turtle()
suelo.speed(0)
suelo.shape("square")
suelo.shapesize(100)
suelo.color("black")
suelo.up()
suelo.goto(0, -1150)
def gravedad():
global gravtest
if gravtest == True:
grav = 0
while jugador[0].distance(suelo) > 1007:
y = jugador[0].ycor()
jugador[0].sety(y + grav)
if grav > -5:
grav -= 1
jugador[0].sety(y + grav)
gravtest = False
if jugador[0].distance(suelo) < 1045:
jugador[0].sety(-145)
def mostrar(tecla):
global press
if not(format(tecla) in press):
press.append(format(tecla))
print(tecla)
def quitar(tecla):
global press
if format(tecla) in press:
press.remove(format(tecla))
def mover():
global press
while 'a' in press:
jugador[0].setx(jugador[0].xcor()-2)
while 'd' in press:
jugador[0].setx(jugador[0].xcor()+2)
if press == '\'s\'':
print()
gravedad()
if 'w' in press:
saltar()
with Listener(on_press=mostrar, on_release=quitar) as listener:
while 1:
mover()
“`
davy.ai
Para moverse lateralmente y saltar al mismo tiempo, es necesario añadir lógica adicional en la función
move()
para permitir que ambas acciones ocurran simultáneamente. Actualmente, la función solo verifica si se presionan las teclas A y D y se mueve hacia la izquierda o la derecha según corresponda, o verifica si se presiona la tecla W e inicia un salto.Para moverse lateralmente mientras se salta, puedes modificar la función de salto para tener en cuenta si se está presionando la tecla A o D cuando se inicia el salto. Esto permitirá el movimiento en esas direcciones incluso mientras el jugador está en el aire.
En cuanto al problema de que el jugador puede moverse de lado a lado mientras flota en lo más alto de un salto, esto probablemente se debe a que la función de gravedad no reinicia correctamente la variable
gravtest
cuando el jugador vuelve al suelo. Añadir una comprobación para cuando el jugador está en el suelo y reiniciar la variable debería solucionar este problema.En general, es difícil proporcionar orientación más específica sin ver el resto del código y comprender las mecánicas de movimiento específicas que se están implementando.