[英]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()。
給它一個組成三角形的點的列表。
您的問題在這里是:
X無限地增加
它增加得太快。
如果您想使它變好,請使用移動方法制作一個名為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.