我一直在尝试使用鼠标位置将图像blit到我的屏幕上。这是我的代码。
#Placing the farm
if farm:
if pygame.mouse.get_pressed()[0]:
hi = True
if hi:
screen.blit(farm_image,mouse_pos)
所以基本上我想让它在单击鼠标时将图像blit只在mouse_position屏幕上显示一次。但是它不会显示图像,而是使用mouse_pos移动。如何使图像仅在mouse_position显示一次。在此之前我确实有一个主循环。 我试过的是在图像为blit后将hi设置为False,但是后者会删除图像。感谢您提供的任何答案!
答案 0 :(得分:1)
您可以尝试使用其他变量检查是否是您的第一次点击:
if pygame.mouse.get_pressed()[0]:
if first_click == False:
hi = true
first_click = True
else:
pass
确保在使用之前定义first_click
。此代码使用first_click
来查看您是否已经点击过一次。其起始值为False
,并在鼠标单击后更改为True
。这也将hi
更改为True
,而不允许第二次点击first_click
不再是False
。这导致了else
和pass
语句,几乎没有任何内容。
答案 1 :(得分:1)
在PythonMaster的基础上做出这样的回答可能会起作用,并确保每个帧都保持服务器场的状态,以防每次都用背景刷新所有屏幕:
#Placing the farm
if farm:
if pygame.mouse.get_pressed()[0] == False: #resets the first_click to False everytime the button is released
first_click = False
if pygame.mouse.get_pressed()[0]:
if first_click == False:
first_click = True
else:
pass
if first_click == True: #set's the farm position it will keep updating the position of the farm as you drag the mouse, if you do not want that set first_click to False here.
farm_pos = mouse_pos
try: #using try here, prevents errors when farm_pos is not yet defined
screen.blit(farm_image,farm_pos)
except:
print 'farm position not defined yet, click to place'
答案 2 :(得分:1)
当您只需要单击一次时,您还可以使用事件检查而不是状态检查。这特别有用,因为它意味着您不会错过点击(如果用户在您的代码未检查用户输入时点击并释放鼠标,则可能会发生这种情况)。 Pygame具有事件MOUSEBUTTONDOWN
和MOUSEBUTTONUP
,它们都为您提供鼠标的位置和点击的按钮。
如何将此功能合并到代码中取决于代码的其余部分,例如:如果你已经在其他地方使用pygame事件队列。小例子:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
if event.type == pygame.MOUSEBUTTONDOWN:
if farm:
screen.blit(farm_image,(event.pos[0], event.pos[1]))
根据PythonMaster和Sorade的建议,您可以使用变量来跟踪状态,或者更好的是,将场的位置和可见状态存储在场对象(Sprite)中并简单地blit只要状态设置为可见,它就到了它的位置。