gpt4 book ai didi

python - 使用无法正常工作的类创建对手对象;由于某种原因它们没有显示在屏幕上?

转载 作者:行者123 更新时间:2023-12-01 07:57:46 25 4
gpt4 key购买 nike

所以不久前我学会了如何创建一个类,其目的是创建一个“对手”,它基本上会与玩家战斗等等。这是一个很好的教程,虽然我确实学习了如何创建这种类型的类中,我在测试代码本身时也遇到了问题。

它无法正常工作的原因之一是水平翻转我的 Sprite ;我有 2 个 Sprite 变量,一个用于加载图像,另一个应该包含一个列表。然后循环“翻转”原始图像中的所有图像并将其存储在空列表中。然而,这引起了一个问题,并开始使我的 Sprite 在屏幕上双向“闪烁”,因此我删除了循环,再次尝试,它起作用了,但这次它只有一个 Sprite (面向左侧)。我还尝试删除类外部的变量和循环,但最终根本不显示图像。

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

在进行上述更改后,收到的输出现在根本没有出现图像,我预计图像的输出会出现(并且可能会移动)

最佳答案

这似乎没有达到您想要的效果:

        if self.walkCount1 + 1 <= 33:
self.walkCount1 = 0

作为一个细节,当 if self.walkCount1 <= 32 时,添加 1 并与 33 进行比较是很奇怪的。就足够了。

更重要的是,看起来你想要>=那里。

你有一些硬编码的magic number除数:// 3// 4 。而不是例如4、这样会好很多引用len(self.walkRightGB) 。然后你可以选择插入新的插值行走图像,或删除一些,而不必担心正确性其他可能受影响的代码。像 27 这样的数字应该用更有意义的术语来表达。

我不清楚你想要 //整数除法。可能您正在寻找%相反。正如所写,看起来代码存在危险尝试访问图像数组的末尾。

打印出计数将帮助您进行调试,例如,通过验证增加的计数是否被保留跨函数调用。

关于python - 使用无法正常工作的类创建对手对象;由于某种原因它们没有显示在屏幕上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55879298/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com