在pygame中绘制多个圆圈的最快方法是什么?

问题描述

我正在为一个项目制作agario克隆,我想知道在pygame中绘制许多点的最快方法

from pygame import *
import random as rd 

x = rd.randint(100,700)
y = rd.randint(100,500)


# I would like to draw about 50 dots of this type. 
dot = draw.circle(screen,(0,0),(x,y),5)

解决方法

以下是使用pygame绘制圆圈的一些基本代码:

import pygame as pg
import random as rd 

pg.init()  # initialize pygame  
screen = pg.display.set_mode((500,500))  # create main screen

for ctr in range(25):  # 25 circles
    x = rd.randint(50,450)
    y = rd.randint(50,450)
   
    # I would like to draw about 50 dots of this type. 
    dot = pg.draw.circle(screen,(100,200,100),(x,y),15)
    pg.display.update()  # update screen
    
while True:  # main pygame loop,always include this
    for event in pg.event.get(): # required for OS events
      if event.type == pg.QUIT:  # user closed window
         pg.quit()

输出

Circles

,

使用简单的python "for" loop with a "range"的任何简单方法:

当循环迭代时,它执行循环主体的内容,变量i从0递增到 N-1 (即49)。变量i可以是任何有效的变量名,但是对于简单的编号循环,通常使用ijk

from pygame import *
import random as rd 

# Draw 50 dots 
for i in range( 0,50 ):
    x = rd.randint(100,700)
    y = rd.randint(100,500)
    dot = draw.circle(screen,(0,0),5)
,

如果要在主应用程序循环中连续绘制相同的圆,则必须生成随机位置列表:

import pygame as pg
import random as rd 

pg.init()
screen = pg.display.set_mode((800,600))

cpts = []
for i in range(25):
    x = rd.randint(100,500)
    cpts.append((x,y))
    
run = True
while run: 
    for event in pg.event.get(): 
        if event.type == pg.QUIT: 
            run = False

    for cpt in cpts: 
        pg.draw.circle(screen,(255,255,255),cpt,15)
    pg.display.update()

有关最低pygame应用程序的信息,请参见Pygame unresponsive display的答案。

,

我开设了一个点班:

import pandas as pd
df = pd.DataFrame({'time':['2019-10-19 19:23:00','2019-10-19 19:24:00','2019-10-19 19:25:00'],\
'lon':[48.80,48.801,48.8018],\
'lat':[2.13,2.130,2.12],\
'hilbert'=[4578,4577,4521]})
print(df)

然后我制作了一个数组,并生成class Dot(): SIZE = 5 def __init__(self,x,y): self.x = x self.y = y def draw(self): draw.circle(screen,self.color,(self.x,self.y),Dot.SIZE) ,如下所示:

NUMBER_OF_DOTS

,并在dots = [] for i in range(NUMBER_OF_DOTS): x = rd.randint(100,500) dots.append(Dot(x,y)) 循环中用白色填充整个场景后重新绘制:

为True时: screen.fill((255,255,255)) ... 对于点中的点: dot.draw()

整个来源:

while

enter image description here

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...