es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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()

“`

Tags:  ,

Answer

  1. Avatar for 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.

Comments are closed.