嘿,伙计们,我很抱歉打扰你们,但我现在浪费了几个小时修修补补,以使这个工作。你知道吗
代码运行得很好,但是射弹在发射后不断改变方向,所以我尝试为每个子弹分配自己的dir值,并将shot函数用于将子弹移动到projector类中。但我一直收到错误信息:
Traceback (most recent call last): File "PycharmProjects/Game/Pygame.py", line 90, in update() File "PycharmProjects/Game/Pygame.py", line 73, in update get_input() File "PycharmProjects/Game/Pygame.py", line 55, in get_input projectile.dir == {'N'} AttributeError: type object 'projectile' has no attribute 'dir'
我想很明显,我是一个新的编码,所以我会非常感谢一些帮助。你知道吗
改变投射物.dir在get\u input函数中项目符号.dir就这样。 把方向放在括号里。在get\ U输入函数外指定方向。在init函数之前为类中的字母赋值
class player():
x = WIDTH / 2
y = HEIGHT / 2
width = 50
height = 50
speed = 1
def draw(self):
pygame.draw.rect(win, (0, 0, 255), (self.x, self.y, self.width, self.height))
class projectile():
radius = 10
speed = 8
def __init__(self, x, y, dir={}):
self.x = x
self.y = y
self.dir = dir
def shot(self):
for bullet in bullets:
if self.dir == 'N':
print('N')
self.y -= 1
if self.dir == 'W':
print('W')
self.x -= 1
if self.dir == 'S':
print('S')
self.y += 1
if self.dir == 'E':
print('E')
self.x += 1
def draw(self):
pygame.draw.circle(win, (255, 0, 0), (self.x, self.y), self.radius)
def get_input():
keys = pygame.key.get_pressed()
ev = pygame.event.get()
if keys[pygame.K_w]:
player.y -= player.speed
projectile.dir == 'N'
if keys[pygame.K_a]:
player.x -= player.speed
projectile.dir == 'W'
if keys[pygame.K_s]:
player.y += player.speed
projectile.dir == 'S'
if keys[pygame.K_d]:
player.x += player.speed
projectile.dir == 'E'
for event in ev:
if event.type == pygame.MOUSEBUTTONDOWN:
bullets.append(projectile(round(player.x + player.width//2), round(player.y + player.height//2), dir))
def update():
clock.tick(300)
win.fill ((0, 0, 0))
get_input()
player.draw()
for bullet in bullets:
bullet.draw()
bullet.shot()
pygame.display.update()
running = True
player = player()
bullets = []
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
update()
#pygame.quit()
.dir
现在是一个instance attribute,因此类属性projectile.dir
不再存在。在全局名称空间中创建变量
current_dir
。使用^{get_input
中的变量,并使用该变量设置构造新projectile
对象时的方向:请注意,
==
是比较相等运算符。要设置current_dir
,必须使用赋值运算符=
。你知道吗避免在主循环中多次调用^{} 。获取一次事件并将事件列表传递给函数
update
和get_input
:相关问题 更多 >
编程相关推荐