我正在尝试在python上移动一个八角形 我错过了什么? 如何使这个形状移动
bif="space.jpg"
import pygame, sys
from pygame.locals import *
points=[(-60,20),(-60,-20),(-20,60),(20,60),(60,20),(60,-20),(20,-60),(-20,60)]
colour=(0,191,255)
pygame.init()
screen=pygame.display.set_mode((1280,800),0,32)
background=pygame.image.load(bif).convert()
for point in points:
point[-60] += movex
point[20] += movex
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
if event.type==KEYDOWN:
if event.key==K_LEFT:
movex=-1
elif event.key==K_RIGHT:
movex=+1
elif event.key==K_UP:
movey=-1
elif event.key==K_DOWN:
movey=+1
if event.type==KEYUP:
if event.key==K_LEFT:
movex=0
elif event.key==K_RIGHT:
movex=0
elif event.key==K_UP:
movey=0
elif event.key==K_DOWN:
movey=0
x+=movex
y+=movey
screen.blit(background,(0,0))
pygame.draw.polygon(screen,colour,points)
pygame.display.update()
答案 0 :(得分:0)
您的代码存在一些问题。
1)为了能够更改数组点,您需要使用另一个数据结构而不是元组列表,因为元组是不可变的。所以你可以有一个列表,例如:
points=[[-60,20],[-60,-20],[-20,60],[20,60],[60,20],[60,-20],[20,-60],[-20,60]]
2)在这个循环中:
for point in points:
point[-60] += movex
point[20] += movex
您正在尝试访问点列表的第60和第20个元素,这些元素会立即引发错误,因为索引超出范围,因为正如我之前所解释的,元组是不可变的,并且您正在尝试更改它们的值。我从上面的代码中理解的是,你想用movex和movey移动每个点。要做到这一点,上面的for循环应该改为:
for point in points:
point[0] += movex
point[1] += movey
您还需要在主循环内的键事件下方移动上面的for循环,以使其正常工作。
3)您需要在尝试访问它们之前初始化movex
和movey
,因此在主循环之外您可以像这样简单地初始化它们:
movex = 0
movey = 0
while True:
#code
4)在这种状态下,你根本不需要x
和y
变量来移动八边形,因为你可以通过movex和movey变量直接递增每个点。
通过以上所有更改,您的代码现在应如下所示:
bif="alien.png"
import pygame, sys
from pygame.locals import *
points=[[-60,20],[-60,-20],[-20,60],[20,60],[60,20],[60,-20],[20,-60],[-20,60]]
colour=(0,191,255)
pygame.init()
screen=pygame.display.set_mode((1280,800),0,32)
background=pygame.image.load(bif).convert()
movex = 0
movey = 0
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
if event.type==KEYDOWN:
if event.key==K_LEFT:
movex=-1
elif event.key==K_RIGHT:
movex=+1
elif event.key==K_UP:
movey=-1
elif event.key==K_DOWN:
movey=+1
if event.type==KEYUP:
if event.key==K_LEFT:
movex=0
elif event.key==K_RIGHT:
movex=0
elif event.key==K_UP:
movey=0
elif event.key==K_DOWN:
movey=0
for point in points:
point[0] += movex
point[1] += movey
screen.blit(background,(0,0))
pygame.draw.polygon(screen,colour,points)
pygame.display.update()
这应该很顺利:) 希望我的回答能帮到你! 欢呼声,
Alex