Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么param moveY不在这里?Pygame更新方法_Python_Pygame - Fatal编程技术网

Python 为什么param moveY不在这里?Pygame更新方法

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,我可以在屏幕上画一个精灵的图像。我正试图通过改变x和y变量来用WASD移动精灵

当我运行程序时,精灵会绘制,但当我按正确的键时不会移动

编辑:我添加了一个更新方法,moveY参数说它不在那里,尽管它显然在那里,为什么

代码如下:

导入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”我怎么会错过这个,谢谢@熊切片机谢谢你。不客气。