Итак, некоторое время назад я узнал, как создать класс, для которого нужно было создать «оппонента», который будет в основном сражаться с игроком и т. Д. Это было хорошее руководство, и в то время как я научился создавать этот тип класс, я также получил проблемы из самого кода при тестировании.
Одна из причин, по которой он не работал должным образом, заключалась в том, что я переворачивал спрайты по горизонтали; У меня есть 2 переменные спрайта, 1, которая загружает изображения, а другая, которая должна содержать список. Затем цикл «переворачивает» все изображения из оригинала и сохраняет его в пустом списке. Это, однако, вызвало проблему и начало заставлять мой спрайт «мигать» на экране в обоих направлениях, поэтому я удалил цикл, повторил попытку, и это сработало, но на этот раз у него был только один спрайт (обращенный влево).
Я также попытался удалить переменные и цикл за пределами класса, но в итоге он вообще не отображал изображение.
#Goku Black
walkLeftGB = [ pygame.image.load("GB1.png"), pygame.image.load("GB2.png"), pygame.image.load("GB3.png"), pygame.image.load("GB4.png") ]
walkRightGB = []
for l in walkLeftGB:
walkRightGB.append(pygame.transform.flip(l, True, False))
for x in range(len(walkLeftGB)):
walkLeftGB[x] = pygame.transform.smoothscale(walkLeftGB[x], (372, 493))
for x in range(len(walkRightGB)):
walkRightGB[x] = pygame.transform.smoothscale(walkRightGB[x], (372, 493))
# === CLASSES === (CamelCase names)
class Enemy(object):
global vel
global walkCount1
global walkRightGB, walkLeftGB
def __init__(self, x, y, width, height, end):
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
self.walkLeftGB = walkLeftGB
self.walkRightGB = walkRightGB
def draw(self, DS):
self.move()
global walkCount1
if self.walkCount1 + 1 <= 33:
self.walkCount1 = 0
if self.vel > 0:
DS.blit(self.walkRightGB[self.walkCount1 //4], (self.x, self.y))
self.walkCount1 += 1
else:
DS.blit(self.walkLeftGB[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(1600, 407, 96, 136, 22)
def redrawGameWindow():
global walkCount
pygame.display.update()
man.draw(DS)
DS.blit(canyon,(0,0))
lastMoved = "left"
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))
#The "redrawGameWindow" is then called in a loop inside a function.
После того, как я внес эти изменения, упомянутые выше, полученным выводом стало изображение, которое вообще не появлялось, я ожидал, что вывод изображения появится (и, возможно, переместится)