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.

PyGame: ¿Por qué mi objeto no se mueve automáticamente?

Quiero que la ‘roca’ pueda moverse automáticamente hacia la izquierda al ejecutar el programa, pero nada sucede, según entiendo, he hecho que la posición x de ‘rock’ se mueva 3 en cada iteración.

import pygame

p = pygame.display.setmode((900, 600))
pygame.display.setcaption("Primer juego")
FPS = 60
BLANCO = 255, 255, 255
ROJO = 255, 0, 0
VERDE = 0, 255, 0
AZUL = 0, 0, 255
DAZUL = 57, 64, 90

tablero1 = pygame.image.load("board.png")
tablero2 = pygame.image.load("board.png")
roca = pygame.image.load("rock.png")

def dibujar_ventana(mov_tablero1, mov_tablero2, esc_roca):
    p.fill(DAZUL)
    esc_tablero1 = pygame.transform.rotate(pygame.transform.scale(tablero1, (55, 40)), 40)
    esc_tablero2 = pygame.transform.rotate(pygame.transform.scale(tablero2, (55, 40)), 40)
    esc_roca = pygame.transform.rotate(pygame.transform.scale(roca, (55, 40)), 0)
    p.blit(esc_tablero1, (mov_tablero1.x, mov_tablero1.y))
    p.blit(esc_tablero2, (mov_tablero2.x, mov_tablero2.y))
    p.blit(esc_roca, (400, 250))
    pygame.display.update()

tecla_presionada = pygame.key.get_pressed()

def func_mov_tablero1(tecla_presionada, mov_tablero1):
    if tecla_presionada[pygame.K_w] and mov_tablero1.y > 0:
        mov_tablero1.y -= 3
    if tecla_presionada[pygame.K_s] and mov_tablero1.y < 530:
        mov_tablero1.y += 3

def func_mov_tablero2(tecla_presionada, mov_tablero2):
    if tecla_presionada[pygame.K_UP] and mov_tablero2.y > 0:
        mov_tablero2.y -= 3
    if tecla_presionada[pygame.K_DOWN] and mov_tablero2.y < 530:
        mov_tablero2.y += 3

def main():
    pos_roca_x = 450
    pos_roca_y = 250
    mov_tablero1 = pygame.Rect(20, 250, 55, 40)
    mov_tablero2 = pygame.Rect(805, 250, 55, 40)
    mov_roca = pygame.Rect(pos_roca_x, pos_roca_y, 55, 40)

clock = pygame.time.Clock()

run = True
while run == True:
    clock.tick(FPS)
    for evento in pygame.event.get():
        if evento.type == pygame.QUIT:
            run = False

    tecla_presionada = pygame.key.get_pressed()
    pos_roca_x += 3

    func_mov_tablero1(tecla_presionada, mov_tablero1)
    func_mov_tablero2(tecla_presionada, mov_tablero2)
    dibujar_ventana(mov_tablero1, mov_tablero2, mov_roca)

pygame.quit()


if name == "main":
    main()
Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que tiene el código para mover la roca a la izquierda, pero no está siendo llamado. Necesita agregar una línea a la función main() para llamar la línea rock_x += 3. Esto debería hacerse en el bucle while, para que se llame en cada iteración.

    while run == True:
        clock.tick(FPS)
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                run = False
    
        keypress = pygame.key.get_pressed()
        rock_x += 3  # Agregar esta línea
    
        board1_move_func(keypress, board1_move)
        board2_move_func(keypress, board2_move)
        draw_window(board1_move, board2_move, rock_move)
    

Comments are closed.