簡體   English   中英

Python:在動畫中畫一條對角線

[英]Python: Drawing a Diagonal Line in Animation

我正在嘗試制作動畫,但不確定如何繪制對角線並移動它。

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輸入到線甚至多邊形函數中的方式和位置的幫助。 就像圓形一樣,人們只需簡單地將其放在首位,但是對於直線和/或多邊形函數來說會如何呢?

請改用pygame.draw.aalines()。

給它一個組成三角形的點的列表。

您的問題在這里是:

  1. X無限地增加

  2. 它增加得太快。

如果您想使它變好,請使用移動方法制作一個名為Fish的對象,該方法可以移動魚。 這樣,您將獲得簡潔的代碼並減少混亂。

您必須從窗口中移出舊魚,然后在新位置繪制新魚。 這就是為什么您應該將魚放在自己的對象中的原因。

選擇一條魚作為通用位置指示器。 例如鼻子或重心,或其他東西。 然后,您只需更改該位置,然后move方法就會相應地調整所有其他坐標。

編輯:

這是一個例子。 我沒有嘗試過,只是將它們放在一起向您展示它是如何完成的。

我希望這將使其更加清晰。 您會看到,我將魚畫在其自身的表面上一次,然后將其移動。

當您移動鼠標時,魚將被移動。

它可能很慢,而且忽閃忽閃,有些東西。 這段代碼有您的問題。

新魚應每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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM