Python - Cómo soluciono este bug en el jueguito? Python

 
Vista:
sin imagen de perfil

Cómo soluciono este bug en el jueguito? Python

Publicado por Oscar (2 intervenciones) el 28/08/2022 06:35:04
Disculpen el desorden, estoy aprendiendo.
El problema es que cuando suelto una tecla de dirección (ej: W) después de haber presionado otra de dirección (D) mi personaje avanza como patinando, porque al soltar una tecla se detiene la iteración de los sprites que componen la animación pero continúa el movimiento


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
import sys, pygame
from pygame.locals import *
from Sprites import *
 
# Constantes
WIDTH = 1300
HEIGHT = 700
blanco = (255, 255, 255)
negro = (0, 0, 0)
 
pygame.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
fuente = pygame.font.SysFont("Roman", 20)
texto = fuente.render("Hallo Welt", True, blanco)
pygame.display.set_caption("Manguaker")
pygame.time.Clock()
 
 
#____________________Cargo los Sprites______________
SuperficiePasto = pygame.image.load("PastoCorto_Pandamaru.png").convert() #imagen 50 x 50
Casa = pygame.image.load("Casa_cyndybell6.png")
Casa.set_colorkey(blanco)
 
 
Mapa = ["      XX      XXX  XX      XXXXXXXXX",
        "X                                  X",
        "X X  XX XX    XXX XXX    X X X     X",
        "X X  XX XX        XXX    X X X     X",
        "X             XXX XXX              X",
        "X X X X X                X X X     X",
        "X X X X X                          X",
        "X                                  X",
        "X                                  X",
        "X                                  X",
        "X                                  "]
 
 
class ControlesJugador:
    def __init__(self):
        self.SpriteActual = 0
 
    def JugadorWalk(self, Dir, estado):   # Carga sprites del personaje en la lista Camina
        Moviendose = estado
        Direccion = Dir
        SpriteActual = self.SpriteActual
 
        Img_Path = "Personaje1/Personaje_"+Direccion
        Camina = [pygame.image.load(Img_Path+"_0.png"),
                pygame.image.load(Img_Path+"_1.png"),
                pygame.image.load(Img_Path+"_2.png"),
                pygame.image.load(Img_Path+"_3.png")]
 
        if Moviendose == 0:
            SpriteActual = 0
        if SpriteActual < 4:       #  Itera por los índices de Camina y va imprimiendolos
            sprite = Camina
            sprite[SpriteActual].set_colorkey(blanco)
            screen.blit(sprite[SpriteActual].convert(), (500, 200))
 
 
class Control_Camara:
    def __init__(self):
        self.cam_correct_x = 0
        self.cam_correct_y = 0
 
        self.pos_dibujo_x = 0
        self.pos_dibujo_y = 0
 
    def Actualizar_Pos_Camara(self):
        print (self.cam_correct_x, self.cam_correct_y)
 
        self.pos_dibujo_x += self.cam_correct_x
        self.pos_dibujo_y += self.cam_correct_y
 
def RectangulaMapa(Mapa):
    ancho_tesela = 150
    alto_tesela = 150
    x = Camara.pos_dibujo_x
    y = Camara.pos_dibujo_y
 
    for fila in Mapa:
        for tesela in fila:
            if tesela == "X":
                screen.blit(SuperficiePasto, (x, y, ancho_tesela, alto_tesela))
                screen.blit(Casa, (x, y, ancho_tesela, alto_tesela))
            elif tesela == " ":
                screen.blit(SuperficiePasto, (x, y, ancho_tesela, alto_tesela))
            x += ancho_tesela
        x = 0 + Camara.pos_dibujo_x
        y += alto_tesela
    y = 0
 
Camara = Control_Camara()
Jugador = ControlesJugador()
DireccionJugador = "Sur"
Moviendose = 0 #--------Sumar keydowns(+1) y keyups (-1), si es >0, hay una tecla presionada, si es 0, todas han sido soltadas
 
#-----------------Bucle Principal------------
while True:
    screen.fill(negro)
    Camara.Actualizar_Pos_Camara()
    screen.blit(texto, (250, 50))
    RectangulaMapa(Mapa)
 
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_ESCAPE:
                sys.exit()
            if event.key == pygame.K_d:
                Camara.cam_correct_x += -7
                DireccionJugador = "Este"
                Moviendose += 1
            if event.key == pygame.K_a:
                Camara.cam_correct_x += 7
                DireccionJugador = "Oeste"
                Moviendose += 1
            if event.key == pygame.K_w:
                Camara.cam_correct_y += 7
                DireccionJugador = "Norte"
                Moviendose += 1
            if event.key == pygame.K_s:
                Camara.cam_correct_y += -7
                DireccionJugador = "Sur"
                Moviendose += 1
 
        if event.type == pygame.KEYUP:
            if event.key == pygame.K_d:
                Camara.cam_correct_x = 0
                Moviendose += -1
            if event.key == pygame.K_a:
                Camara.cam_correct_x = 0
                Moviendose += -1
            if event.key == pygame.K_w:
                Camara.cam_correct_y = 0
                Moviendose += -1
            if event.key == pygame.K_s:
                Camara.cam_correct_y = 0
                Moviendose += -1
 
    Jugador.JugadorWalk(DireccionJugador, Moviendose)
    Jugador.SpriteActual += 1
    if Jugador.SpriteActual == 4:
        Jugador.SpriteActual = 0
    pygame.time.wait(70)
    pygame.display.update()
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 2.808
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Cómo soluciono este bug en el jueguito? Python

Publicado por tincopasan (1082 intervenciones) el 29/08/2022 18:10:40
podrías subir las imagenes que estas usando
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Cómo soluciono este bug en el jueguito? Python

Publicado por Oscar (2 intervenciones) el 29/08/2022 18:46:46
Adjunto los sprites.
Agrego que probablemente el problema está en relación con la variable global: Moviendose, que entra como parámetro en JugadorWalk()
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar