Я просматривал обучающее видео о создании класса (https://www.youtube.com/watch?v=vc1pJ8XdZa0)) и использовании этого класса для создания методов для врага / противника, которые будут использоваться позже в игре, и для перемещения этого персонажа. методы сработали, но он просто отображает изображение на экране: как будто оно постоянно отображается, затем удаляется (исчезает и снова появляется очень быстро), движение также по какой-то причине не работает.
Я попытался поэкспериментировать с этой проблемой, стряхивая ее, что, очевидно, прошло не очень хорошо. Я также попытался поместить его в другие циклы и проверить, будет ли он работать, но результаты были одинаковыми.
x = 0
y = 407
height = 40
width = 87
vel = 5
isJump = False
jumpCount = 10
left = False
right = False
walkCount = 0
walkCount1 = 0
run = True
# === CLASSES === (CamelCase names)
class enemy(object):
walkLeft1 = [ pygame.image.load("GB1.png"), pygame.image.load("GB2.png"), pygame.image.load("GB3.png"), pygame.image.load("GB4.png") ]
walkRight1= []
global vel
global walkCount1
for i in walkLeft1:
walkRight1.append(pygame.transform.flip(i, True, False))
for x in range(len(walkLeft1)):
walkLeft1[x] = pygame.transform.smoothscale(walkLeft1[x], (372, 493))
for x in range(len(walkRight1)):
walkRight1[x] = pygame.transform.smoothscale(walkRight1[x], (372, 493))
def __init__(self, x, y, width, height, end):
global walkCount1
self.x = x
self.y = y
self.width = width
self.height = height
self.end = end
self.path = [self.x, self.end]
self.walkCount1 = 0
self.vel = 3
def draw(self, win):
global walkCount1
self.move()
if self.walkCount1 + 1 <= 33:
self.walkCount1 = 0
"""if self.vel > 0:
DS.blit(self.walkRight1[self.walkCount1 //4], (self.x, self.y))
self.walkCount1 += 1"""
if self.vel > 0:
DS.blit(self.walkLeft1[self.walkCount1 //4], (self.x, self.y))
self.walkCount1 += 1
def move(self):
global walkCount1
if self.vel > 0:
if self.x + self.vel < self.path[1]:
self.x += self.vel
else:
self.vel = self.vel * -1
self.walkCount1 = 0
else:
if self.x - self.vel > self.path[0]:
self.x += self.vel
else:
self.vel = self.vel * -1
self.walkCount1 = 0
man = enemy(1400, 407, 96, 136, 22)
def redrawGameWindow():
global walkCount
pygame.display.update()
DS.blit(canyon,(0,0))
lastMoved = "left"
man.draw(DS)
if walkCount + 1 >= 27:
walkCount = 0
if left:
DS.blit(walkLeft[walkCount//3],(x,y))
walkCount +=1
lastMoved = "left"
elif right:
DS.blit(walkRight[walkCount//3], (x,y))
walkCount +=1
lastMoved = "right"
else: #this is when its moving neither left or right
if lastMoved == "left":
DS.blit(char2, (x, y))
else:
DS.blit(char, (x, y))
def fight_mode():
fight = True
arcade = False
progress = 0
global isJump, jumpCount
global x,y, vel
global width, height
global left, right
px, py, speed = HW, HH, 10
if (pygame.mixer.get_busy() == True):
pygame.mixer.music.stop()
while fight:
while(progress/4) < 100:
event_handler()
DS.fill(BLACK)
time_count = (random.randint(1,1))
increase = random.randint(1,20)
progress += increase
pygame.draw.rect(DS, green, [50, 700, 402, 29])
pygame.draw.rect(DS, grey, [50, 701, 401, 27])
if (progress/4) > 100:
pygame.draw.rect(DS, green, [50, 700, 401, 28])
else:
pygame.draw.rect(DS, green, [50, 700, progress, 28])
loading(progress/4)
pygame.display.flip()
time.sleep(0.2)
pygame.display.update()
CLOCK.tick(FPS)
event_handler()
redrawGameWindow()
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT] and x > vel:
x -= vel
left = True
right = False
elif keys[pygame.K_RIGHT] and x < W - width - vel:
x+= vel
right = True
left = False
else:
right = False
left = False
walkCount = 0
if not(isJump):
if keys[pygame.K_SPACE]:
isJump = True
else:
if jumpCount >= -10:
neg = 1
if jumpCount < 0:
neg = -1
y-= (jumpCount ** 2) * 0.5 * neg
jumpCount -= 1
else:
isJump = False
jumpCount = 10
pygame.display.update()
Я ожидаю, что спрайт будет нормально отображаться на экране, но фактическим выходом будет спрайт, который будет привязан, затем возвращен, затем снова подключен, и т. Д. Я не уверен, что пошло не так, но пока это происходит здесь. Кроме того, я не уверен, что это из-за этого, но движение также не работает.