PythonPygame:如何移动多个完整对象

2024-09-29 01:35:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我画了一个雪人。但我需要做3个,而不是通过1乘以1改变它们的坐标。我想也许我在任何位置定义一个值,然后它就可以朝x轴移动。 当前:

i= 0
import pygame, sys 
pygame.init() # Käivitame Pygame'i
ekraan = pygame.display.set_mode([800, 800]) 
pygame.display.set_caption("Snowmen") 

ekraan.fill([0, 0, 250])
def snowman():
    pygame.draw.circle(ekraan, [255, 250, 250], [400, 200], 60, 0)
    pygame.draw.circle(ekraan, [255, 250, 250], [400, 300], 75, 0)
    pygame.draw.circle(ekraan, [255, 250, 250], [400, 450], 110, 0)
    pygame.draw.circle(ekraan, [0, 0, 0], [380, 175], 12, 0)
    pygame.draw.circle(ekraan, [0, 0, 0], [420, 175], 12, 0)
    pygame.draw.rect(ekraan, [78, 71, 71], [350, 110, 100, 50], 0)
    pygame.draw.rect(ekraan, [78, 71, 71], [330, 155, 140, 5], 0)
    pygame.draw.circle(ekraan, [0,0,0], [400, 440], 9, 0)
    pygame.draw.circle(ekraan, [0,0,0], [400, 480], 9, 0)
    pygame.draw.circle(ekraan, [0,0,0], [400, 400], 9, 0)
    pygame.draw.circle(ekraan, [0,0,0], [400, 360], 8, 0)
    pygame.draw.circle(ekraan, [0,0,0], [400, 320], 8, 0)
    pygame.draw.circle(ekraan, [0,0,0], [400, 280], 8, 0)
    pygame.draw.polygon(ekraan, [255,165,0], [[400, 205], [400, 195],[450, 200]], 0)
    pygame.draw.line(ekraan, [139, 69, 19], [450, 300], [505, 260], 8)
    pygame.draw.line(ekraan, [139, 69, 19], [500, 190], [500, 550], 3)
    pygame.draw.line(ekraan, [255, 250, 250], [498, 190], [480, 138], 2)
    pygame.draw.line(ekraan, [255, 250, 250], [498, 190], [485, 138], 2)
    pygame.draw.line(ekraan, [255, 250, 250], [498, 190], [490, 138], 2)
    pygame.draw.line(ekraan, [255, 250, 250], [500, 190], [495, 140], 2)
    pygame.draw.line(ekraan, [255, 250, 250], [500, 190], [500, 140], 2)
    pygame.draw.line(ekraan, [255, 250, 250], [500, 190], [505, 140], 2)
    pygame.draw.line(ekraan, [255, 250, 250], [502, 190], [510, 142], 2)
    pygame.draw.line(ekraan, [255, 250, 250], [502, 190], [515, 142], 2)
    pygame.draw.line(ekraan, [255, 250, 250], [502, 190], [520, 142], 2)

while i < 3:
    i+=1
    snowman(k*40)  

pygame.display.flip() # Näitame akent

running = True # Muutuja "running" väärtustamine
while running: #Tsükli käivitamine kui muutuja on tõene
    for i in pygame.event.get(): # Kuulame programmi tööd
        if i.type == pygame.QUIT: # Kui vajutame akna sulgemise nuppu
            running = False # Muudame muutuja väärtuse vääraks
pygame.quit() # Sulgeme programmi akna

Tags: rectdisplaylinepygamerunningdrawsetcircle
1条回答
网友
1楼 · 发布于 2024-09-29 01:35:01

您必须使用参数创建函数-即offset-并将此值与所有x参数一起使用

def snowman(offset):
    pygame.draw.circle(ekraan, [255, 250, 250], [400+offset, 200], 60, 0)
    pygame.draw.circle(ekraan, [255, 250, 250], [400+offset, 300], 75, 0)
    pygame.draw.circle(ekraan, [255, 250, 250], [400+offset, 450], 110, 0)
    pygame.draw.circle(ekraan, [0, 0, 0], [380+offset, 175], 12, 0)
    pygame.draw.circle(ekraan, [0, 0, 0], [420+offset, 175], 12, 0)
    pygame.draw.rect(ekraan, [78, 71, 71], [350+offset, 110, 100, 50], 0)
    pygame.draw.rect(ekraan, [78, 71, 71], [330+offset, 155, 140, 5], 0)
    pygame.draw.circle(ekraan, [0,0,0], [400+offset, 440], 9, 0)
    pygame.draw.circle(ekraan, [0,0,0], [400+offset, 480], 9, 0)
    pygame.draw.circle(ekraan, [0,0,0], [400+offset, 400], 9, 0)
    pygame.draw.circle(ekraan, [0,0,0], [400+offset, 360], 8, 0)
    pygame.draw.circle(ekraan, [0,0,0], [400+offset, 320], 8, 0)
    pygame.draw.circle(ekraan, [0,0,0], [400+offset, 280], 8, 0)
    pygame.draw.polygon(ekraan, [255,165,0], [[400+offset, 205], [400+offset, 195],[450+offset, 200]], 0)
    pygame.draw.line(ekraan, [139, 69, 19], [450+offset, 300], [505+offset, 260], 8)
    pygame.draw.line(ekraan, [139, 69, 19], [500+offset, 190], [500+offset, 550], 3)
    pygame.draw.line(ekraan, [255, 250, 250], [498+offset, 190], [480+offset, 138], 2)
    pygame.draw.line(ekraan, [255, 250, 250], [498+offset, 190], [485+offset, 138], 2)
    pygame.draw.line(ekraan, [255, 250, 250], [498+offset, 190], [490+offset, 138], 2)
    pygame.draw.line(ekraan, [255, 250, 250], [500+offset, 190], [495+offset, 140], 2)
    pygame.draw.line(ekraan, [255, 250, 250], [500+offset, 190], [500+offset, 140], 2)
    pygame.draw.line(ekraan, [255, 250, 250], [500+offset, 190], [505+offset, 140], 2)
    pygame.draw.line(ekraan, [255, 250, 250], [502+offset, 190], [510+offset, 142], 2)
    pygame.draw.line(ekraan, [255, 250, 250], [502+offset, 190], [515+offset, 142], 2)
    pygame.draw.line(ekraan, [255, 250, 250], [502+offset, 190], [520+offset, 142], 2)

然后你可以用不同的值来运行它

^{pr2}$

完整工作代码

# all imports at the top !!!
import pygame
import sys 

#  - functions  -

def snowman(offset):
    pygame.draw.circle(ekraan, [255, 250, 250], [400+offset, 200], 60, 0)
    pygame.draw.circle(ekraan, [255, 250, 250], [400+offset, 300], 75, 0)
    pygame.draw.circle(ekraan, [255, 250, 250], [400+offset, 450], 110, 0)
    pygame.draw.circle(ekraan, [0, 0, 0], [380+offset, 175], 12, 0)
    pygame.draw.circle(ekraan, [0, 0, 0], [420+offset, 175], 12, 0)
    pygame.draw.rect(ekraan, [78, 71, 71], [350+offset, 110, 100, 50], 0)
    pygame.draw.rect(ekraan, [78, 71, 71], [330+offset, 155, 140, 5], 0)
    pygame.draw.circle(ekraan, [0,0,0], [400+offset, 440], 9, 0)
    pygame.draw.circle(ekraan, [0,0,0], [400+offset, 480], 9, 0)
    pygame.draw.circle(ekraan, [0,0,0], [400+offset, 400], 9, 0)
    pygame.draw.circle(ekraan, [0,0,0], [400+offset, 360], 8, 0)
    pygame.draw.circle(ekraan, [0,0,0], [400+offset, 320], 8, 0)
    pygame.draw.circle(ekraan, [0,0,0], [400+offset, 280], 8, 0)
    pygame.draw.polygon(ekraan, [255,165,0], [[400+offset, 205], [400+offset, 195],[450+offset, 200]], 0)
    pygame.draw.line(ekraan, [139, 69, 19], [450+offset, 300], [505+offset, 260], 8)
    pygame.draw.line(ekraan, [139, 69, 19], [500+offset, 190], [500+offset, 550], 3)
    pygame.draw.line(ekraan, [255, 250, 250], [498+offset, 190], [480+offset, 138], 2)
    pygame.draw.line(ekraan, [255, 250, 250], [498+offset, 190], [485+offset, 138], 2)
    pygame.draw.line(ekraan, [255, 250, 250], [498+offset, 190], [490+offset, 138], 2)
    pygame.draw.line(ekraan, [255, 250, 250], [500+offset, 190], [495+offset, 140], 2)
    pygame.draw.line(ekraan, [255, 250, 250], [500+offset, 190], [500+offset, 140], 2)
    pygame.draw.line(ekraan, [255, 250, 250], [500+offset, 190], [505+offset, 140], 2)
    pygame.draw.line(ekraan, [255, 250, 250], [502+offset, 190], [510+offset, 142], 2)
    pygame.draw.line(ekraan, [255, 250, 250], [502+offset, 190], [515+offset, 142], 2)
    pygame.draw.line(ekraan, [255, 250, 250], [502+offset, 190], [520+offset, 142], 2)

#  - main  -

# - init -

pygame.init()
ekraan = pygame.display.set_mode([800, 800]) 
pygame.display.set_caption("Snowmen") 

# - draw -

ekraan.fill([0, 0, 250])

for k in range(-1, 2):
    snowman(k*250)  

pygame.display.flip()

# - mainloop -

clock = pygame.time.Clock()
running = True
while running:

    for i in pygame.event.get():
        if i.type == pygame.QUIT:
            running = False

    clock.tick(5) # slow down to 5 FPS so it will use less CPU power.

# - end -

pygame.quit()

enter image description here


还有其他方法。在

创建Surface并在其上绘制,然后在三个不同的地方blit这个曲面。在

^{4}$

相关问题 更多 >