繁体   English   中英

在pygame中将矩形保留在屏幕中

[英]Keep rectangles in screen in pygame

我有一个pygame ,我想用随机的“玩家”创建一个屏幕。 我通过getplayer定义玩家。 一切正常,除了在每一帧中都会创建一个新玩家,但以前的玩家都离开了。 我知道为什么我的代码会这样做,但我不知道该怎么做才能保留玩家。 我的代码如下:

import random
import pygame

pygame.init()

HEIGHT = 600
WIDTH = 800

SCREEN = pygame.display.set_mode((WIDTH,HEIGHT))

def getplayer():
    randr = random.randrange(256)
    randg = random.randrange(256)
    randb = random.randrange(256)
    xpos = random.randrange(WIDTH)
    ypos = random.randrange(HEIGHT)
    pwidth = random.uniform(WIDTH/100, WIDTH/10)
    pheight = random.uniform(HEIGHT/100, HEIGHT/10)
    pygame.draw.rect(SCREEN, (randr, randg, randb), (xpos, ypos, pwidth, pheight)) 


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

while running:
    clock.tick(1)
    SCREEN.fill((200, 200, 200))

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

    getplayer()

    pygame.display.update()

我认为最简单的方法是将 player 更改为一个类对象(如果您不知道它们是什么:它们真的很有用,您绝对应该花时间了解它们https://www.hackerearth。 com/practice/python/object-oriented-programming/classes-and-objects-i/tutorial/ )。

然后可以使用列表跟踪每个玩家对象。

import random
import pygame

pygame.init()

HEIGHT = 600
WIDTH = 800

SCREEN = pygame.display.set_mode((WIDTH,HEIGHT))


# It's easier to keep track of all your values using a class object
class Player:

    def __init__(self):
        self.randr = random.randrange(256)
        self.randg = random.randrange(256)
        self.randb = random.randrange(256)
        self.xpos = random.randrange(WIDTH)
        self.ypos = random.randrange(HEIGHT)
        self.pwidth = random.uniform(WIDTH/100, WIDTH/10)
        self.pheight = random.uniform(HEIGHT/100, HEIGHT/10)

    def draw(self):
        pygame.draw.rect(SCREEN, (self.randr, self.randg, self.randb), (self.xpos, self.ypos, self.pwidth, self.pheight)) 


running = True
clock = pygame.time.Clock()
# Used to keep track of all your player objects
lst_players = []

while running:
    clock.tick(1)
    SCREEN.fill((200, 200, 200))

    # Create a new player
    player = Player()
    # Add the player to your list
    lst_players.append(player)
    # Draw all of your players
    for player in lst_players:
        player.draw()

    pygame.display.update()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM