gpt4 book ai didi

python - 如何在 pygame 窗口中单击的任意位置绘制一个正方形

转载 作者:行者123 更新时间:2023-12-01 01:38:10 24 4
gpt4 key购买 nike

您可能从标题中知道我想做什么,但这是一个简单的示例:

#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()

最佳答案

很高兴看到您正在努力自己解决这个问题,并且您正在用迄今为止所做的工作来编辑问题!

我添加到代码中的内容基本上允许用户更改绘制立方体的位置。如果您想绘制多个立方体,其位置基于用户的鼠标点击,请编辑您的问题以添加这些详细信息,并在下面留下评论。

首先,我编写了一个名为 Cube 的新类,它的代码本质上与 Create 相同。我不会详细讨论它,但通常在面向对象编程中,对象是名词,它们的方法是 Action 。您的类正好相反,这不是面向对象代码的一般编写方式。

我添加了 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()

希望这个回答对您有所帮助,如果您还有其他疑问,请随时在下面留言!

关于python - 如何在 pygame 窗口中单击的任意位置绘制一个正方形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52188275/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com