我正在尝试制作动画,但我不确定如何绘制对角线并移动它。
import pygame
import sys
WINDOW=pygame.display.set_mode((800,300))
RED=(255,0,0)
WHITE=(255,255,255)
CRIMSON=(220,20,60)
BURGUNDY=(102,0,0)
CERULEAN=(153,255,255)
PINK=(255,102,102)
FPS=100
fpsClock=pygame.time.Clock()
x=0
pygame.display.set_caption("Animation")
while True:
for event in pygame.event.get():
if event.type=="QUIT":
pygame.quit()
sys.exit()
#Animation
WINDOW.fill(CERULEAN)
x=x+1
pygame.draw.circle(WINDOW, CRIMSON, (x,100),20)
pygame.draw.circle(WINDOW, BURGUNDY, (x, 92),5)
pygame.draw.line(WINDOW, PINK, (x,30),(x,70),3)
pygame.display.update()
fpsClock.tick(FPS)
这幅画应该是一条尾巴有三角形的鱼。我最初尝试使用多边形函数,但不知道如何输入x以及输入x的位置,所以我决定为三角形绘制三条线。
我只需要帮助我将x输入到行甚至是多边形函数的方式和位置。就像圈子一样,人们只会把它放在第一位,但它对于线条和/或多边形函数又如何呢?
答案 0 :(得分:0)
改为使用pygame.draw.aalines()。
给它一个构成三角形的点列表。
你的问题是:
X无限增加
增长太快。
如果你想让它变得更好,可以用方法移动制作一个名为Fish的物体,它会移动鱼。通过这种方式,您可以获得干净的代码和最小的混淆。
您必须从窗口中移除旧鱼,然后在新位置上绘制新鱼。这就是为什么你应该把鱼放在它自己的物体里。
选择将作为通用位置指示器的鱼的一个点。例如。一个鼻子或质量的中心,或什么的。然后您只需更改该位置,您的移动方法会相应地调整所有其他坐标。
编辑:
这是一个例子。我没试过,只是把它放在一起向你展示它是如何完成的。
我希望这会让它更清晰。你看,我在它的表面画了一次鱼,然后我移动了这个表面。
移动鼠标时,鱼会移动。
它可能很慢,而且很潮湿。这段代码有一些问题。
新鱼应该每4个像素绘制一次,而不是每个像素。
当鱼在一个物体中时,你可以有多种不同大小的鱼。
每条鱼都会保留屏幕中替换origsurf属性的部分。
在移动之前,它会返回之前位置的屏幕。
所以你的鱼可以在屏幕上重叠。
为了使所有工作顺利进行,你将不得不做更多的工作。
例如,没有防止超越显示范围的保护措施。
正如我所说,这是一个如何完成的例子,而不是完整的代码。
class Fish:
def __init__ (self, pos=(0, 0), size=(60, 40), bgcolour=(255, 255, 255)):
self.pos = pos; self.size = size
# Use a little surface and draw your fish in it:
self.surf = surf = pygame.Surface(size)
surf.fill(bgcolour)
# Draw something:
pygame.draw.aalines(surf, (0, 0, 0), 1, [(0, 0), (0, size[1]), (size[0], size[1]/2)]) # Triangle
# Save how screen looks where fish will be:
self.origsurf = Surface(size)
sub = screen.subsurface((pos, size))
self.origsurf.blit(sub)
# Show the fish:
screen.blit(surf, pos)
pygame.display.flip()
def move (self, newpos):
# Remove the fish from old position
screen.blit(self.origsurf, self.pos)
# Save how screen looks where fish will be:
self.origsurf = Surface(self.size)
sub = screen.subsurface((newpos, self.size))
self.origsurf.blit(sub)
# Then show the fish on new location:
screen.blit(self.surf, newpos)
self.pos = newpos
pygame.display.flip()
screen = pygame.display.set_mode()
fish = Fish()
FPS=100
fpsClock=pygame.time.Clock()
while True:
for event in pygame.event.get():
if event.type=="QUIT":
pygame.quit()
sys.exit()
elif event.type==pygame.MOUSEMOTION:
fish.move(event.pos)
fpsClock.tick(FPS)