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


0