您可能从标题中知道我想做什么,但这是一个简单的示例:
#User clicks somewhere in the pygame window
pos = cursorPosition()
#Function/Class that creates a square where the user clicked.
我已经尝试过了:
import pygame
import sys
running = True
pygame.init()
screen = pygame.display.set_mode((800, 500))
pos = pygame.mouse.get_pos()
class Create():
cx, cy = pygame.mouse.get_pos()
square = pygame.Rect(cx, cy, 50, 50)
def cube(self):
self.square = pygame.Rect(self.cx, self.cy, 50, 50)
pygame.draw.rect(screen, (255, 0, 0), self.square)
pygame.display.flip()
create = Create()
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.MOUSEBUTTONDOWN:
pos = pygame.mouse.get_pos()
create.cube()
screen.fill((0, 255, 0))
pygame.display.flip()
pygame.quit()
sys.exit()
但是它只是给我一个蓝屏,当我单击任何地方时它什么都没有做,因此,如果您能帮助我,将不胜感激。谢谢!
编辑:我已经做到了,但是现在我面临另一个问题: 仅当我按住鼠标按钮时,方格才会出现。 这是代码
import pygame
import sys
running = True
pygame.init()
screen = pygame.display.set_mode((800, 500))
pos = pygame.mouse.get_pos()
class Create():
cx, cy = pygame.mouse.get_pos()
square = pygame.Rect(cx, cy, 50, 50)
def cube(self):
self.cx, self.cy = pygame.mouse.get_pos()
self.square = pygame.Rect(self.cx, self.cy, 50, 50)
pygame.draw.rect(screen, (255, 0, 0), self.square)
pygame.display.flip()
create = Create()
while running:
screen.fill((0, 255, 0))
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.MOUSEBUTTONDOWN:
create.cube()
pygame.display.flip()
pygame.quit()
sys.exit()
答案 0 :(得分:1)
很高兴看到您正在努力自己解决问题,并且您正在用迄今为止完成的工作来编辑问题!
我添加到代码中的内容基本上允许用户更改绘制多维数据集的位置。如果您想绘制多个多维数据集,其位置基于用户单击鼠标的位置,请编辑您的问题以添加这些详细信息,并在下面留下评论。
首先,我编写了一个名为Cube
的新类,该类实质上具有与Create
相同的代码。我不会详细介绍,但是通常在面向对象的编程中,对象是名词,而它们的方法是 actions 。与您的类相反,这通常不是编写面向对象的代码的方式。
我添加了update()
方法,该方法仅用鼠标的位置更新了对象的字段。您的原始代码定义了类字段或静态变量。我在这里不做过多介绍,但是如果我们要制作100个多维数据集实例,我们希望拥有所有多维数据集的位置,对吗?在这种情况下,您将操作对象,而不是类。
然后,有一个变量在第一次单击鼠标后被设置为true,因此,多维数据集开始被绘制到屏幕上。
这是固定代码:
import pygame
running = True
pygame.init()
screen = pygame.display.set_mode((800, 500))
class Cube:
def update(self):
self.cx, self.cy = pygame.mouse.get_pos()
self.square = pygame.Rect(self.cx, self.cy, 50, 50)
def draw(self):
pygame.draw.rect(screen, (255, 0, 0), self.square)
cube = Cube()
drawing_cube = False
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.MOUSEBUTTONDOWN:
cube.update()
drawing_cube = True
screen.fill((0, 255, 0))
if drawing_cube:
cube.draw()
pygame.display.flip()
pygame.quit()
quit()
希望此答案对您有所帮助,如果还有其他问题,请随时在下面发表评论!
答案 1 :(得分:0)
我也遇到了这个问题,经过一番混乱和沮丧之后,我想到了以下内容:
import sys
import pygame
import time
pygame.init()
white = (255, 255, 255)
red = (255, 0, 0)
size = (700, 500)
screen = pygame.display.set_mode(size)
pygame.display.set_caption("OwO")
mouse_cords = []
clicked = False
def draw(cord_list, zero):
''' This is what will draw on the screen when the mouse clicks using recursion'''
pygame.draw.circle(screen, red, cord_list[zero], 100, 1)
zero += 1
if len(cord_list) > zero:
draw(cord_list, zero)
done = False
clock = pygame.time.Clock()
while not done:
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
screen.fill(white)
if pygame.mouse.get_pressed()[0]:
mouse_cords.append(pygame.mouse.get_pos())
clicked = True
if clicked == True:
draw(mouse_cords, 0)
pygame.display.flip()
clock.tick(60)
pygame.quit()
您可以说我使用递归来解决此问题。抱歉,它不是圆形的方框,但我确定您可以弄清楚如何更改它。