Python:在动画中绘制对角线

时间:2016-12-19 22:53:43

标签: python

我正在尝试制作动画,但我不确定如何绘制对角线并移动它。

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输入到行甚至是多边形函数的方式和位置。就像圈子一样,人们只会把它放在第一位,但它对于线条和/或多边形函数又如何呢?

1 个答案:

答案 0 :(得分:0)

改为使用pygame.draw.aalines()。

给它一个构成三角形的点列表。

你的问题是:

  1. X无限增加

  2. 增长太快。

  3. 如果你想让它变得更好,可以用方法移动制作一个名为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)