Python 为什么param moveY不在这里?Pygame更新方法
我正在尝试玩pygame,我可以在屏幕上画一个精灵的图像。我正试图通过改变x和y变量来用WASD移动精灵 当我运行程序时,精灵会绘制,但当我按正确的键时不会移动 编辑:我添加了一个更新方法,moveY参数说它不在那里,尽管它显然在那里,为什么 代码如下:Python 为什么param moveY不在这里?Pygame更新方法,python,pygame,Python,Pygame,我正在尝试玩pygame,我可以在屏幕上画一个精灵的图像。我正试图通过改变x和y变量来用WASD移动精灵 当我运行程序时,精灵会绘制,但当我按正确的键时不会移动 编辑:我添加了一个更新方法,moveY参数说它不在那里,尽管它显然在那里,为什么 代码如下: 导入pygame pygame.init() screen=pygame.display.set_模式((750750)) 黑色=(0,0,0) 白色=(255255) 红色=(255,0,0) 类精灵(pygame.Sprite.Sprite
导入pygame
pygame.init()
screen=pygame.display.set_模式((750750))
黑色=(0,0,0)
白色=(255255)
红色=(255,0,0)
类精灵(pygame.Sprite.Sprite):
定义初始(自我,位置):
超级(精灵,自我)。\uuuuu init\uuuuuuu()
self.image=恶魔
self.pos=[x,y]
self.rect=self.image.get_rect(中心=pos)
def更新(self、moveX、moveY):
pygame.sprite.sprite.update(self)
moveXY=[moveX,moveY]
Sprite.pos[x]+=moveXY[moveX]
Sprite.pos[y]+=moveXY[moveY]
所有精灵列表=pygame.sprite.Group()
demon=pygame.image.load(“C:/programming/doomman/cacodemon.png”).convert_alpha()
x=300
y=300
我的精灵=精灵((x,y))
所有精灵列表。添加(我的精灵)
clock=pygame.time.clock()
pygame.display.set_标题(“恶魔之舞”)
carryOn=True
当carryOn==True时:
keys=pygame.key.get_pressed()
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
夹带=假
elif event.type==pygame.KEYDOWN:
如果键[pygame.K_w]:
Sprite.update(0,50)
如果键[pygame.K_s]:
精灵更新(0,-50)
如果键[pygame.K_d]:
精灵更新(50,0)
如果键[pygame.K_a]:
Sprite.update(-50,0)
pygame.display.flip()
时钟滴答(60)
所有精灵列表。绘制(屏幕)
请参见:
将包含的精灵绘制到曲面参数。这将使用源曲面的Sprite.image
属性和位置的Sprite.rect
因此,在更改精灵的位置(pos
)后,需要更新rect
属性:
类精灵(pygame.Sprite.Sprite):
定义初始(自我,位置):
超级(精灵,自我)。\uuuuu init\uuuuuuu()
self.image=恶魔
self.pos=[pos[0],pos[1]]
self.rect=self.image.get_rect(中心=pos)
def更新(self、moveX、moveY):
Sprite.pos[x]+=moveX
Sprite.pos[y]+=moveY
self.rect=self.image.get_rect(中心=pos)
实际上,您根本不需要
pos
属性。您可以通过更改存储在rect
中的位置来移动精灵:
类精灵(pygame.Sprite.Sprite):
定义初始(自我,位置):
超级(精灵,自我)。\uuuuu init\uuuuuuu()
self.image=恶魔
self.rect=self.image.get_rect(中心=pos)
def更新(self、moveX、moveY):
self.rect.x+=moveX
self.rect.y+=moveY
另外,
update
是一种实例方法。您需要使用对象而不是类调用它:
if键[pygame.K_w]:
我的精灵更新(0,50)
如果键[pygame.K_s]:
我的精灵更新(0,-50)
如果键[pygame.K_d]:
我的精灵更新(50,0)
如果键[pygame.K_a]:
我的精灵。更新(-50,0)
我不熟悉pygame API,但Python中的整数是按值传递的(有点),这意味着:my_sprite=sprite((x,y))
x和y被复制到函数中。这意味着当你改变x或y的值时,它不会反映在我的精灵中。是否有直接修改精灵对象的方法?看起来您可以为精灵定义update
方法。我建议您研究一下,并通过调用所述方法修改您的x和y坐标:我添加了一个更新方法,仍然不起作用,将更新问题我如何得到一个类型错误:update()缺少1个必需的位置参数:“moveY”我怎么会错过这个,谢谢@熊切片机谢谢你。不客气。