0

我正在尝试在 PyGame 中制作我的第一款游戏。目标是点击一个罐子(标题为“jar.png”)以获得更多沙子。还有文字不断告诉你你有多少沙子。

不过我有一个问题,我需要一个脚本来确保当您单击“jar.png”时它会将变量 sand 增加 1。此外,如果我确实找到了解决此问题的方法,我不确定文本是否将正确显示变量。

我当前的代码如下所示:

import sys, pygame
from pygame.locals import *
pygame.init()
size = width, height = 800,500
screen = pygame.display.set_mode(size)
pygame.display.set_caption("Sand Maker (Created by - Not Really Working Lamp Productions:)")
CORNBLUE = (100,149,237)
WHITE = (255,255,255)
sand = 0
liams = 0
screen.fill (CORNBLUE)
jar = pygame.image.load("jar.png")
screen.blit(jar,(90,50))
liambutton = pygame.image.load("liam button.png")
screen.blit(liambutton,(450,50))
liamdesc = pygame.image.load("liam desc.png")
screen.blit(liamdesc,(350,50))
myfont = pygame.font.SysFont("monospace", 16)
scoretext = myfont.render("Number of sand = "+str(sand), 1, (255,255,255))
screen.blit(scoretext, (5, 10))
liamscoretext = myfont.render("Number of Liams = "+str(liams), 1, (255,255,255))
screen.blit(liamscoretext, (350, 10))
import time
while 1:
    for event in pygame.event.get():
        pygame.display.flip()
        if event.type == pygame.QUIT:sys.exit()
while 1:
    time.sleep(5)
    sand = sand + 1 * liams

那么,您能否向我提供一段经过编辑的代码,其中包含我想要的功能。谢谢你。

4

2 回答 2

0

您的代码不是结构良好的 pygame 应用程序。一个小的 pygame 应用程序代码是什么样的:

结构

应用程序初始化

在这里,我们放置pygame.init(),获取我们的屏幕变量,加载所有必要的图像和文件,创建我们程序中可能需要的任何其他变量。

While 循环

在这里,我们放置了所有需要更新的东西。我们可以将这里的代码分为 3 部分:

  • 绘图- 背景,以及需要绘制的所有其他精灵
  • 更新- 更新时钟、移动精灵、检查碰撞等。
  • 处理输入- 在更新方法中设置改变精灵行为的变量。

这3个部分要分清楚!

其他几件事:永远不要打电话sleep(),因为这基本上会冻结你的游戏。此外,您的第二个 while 循环永远不会执行。

现在回到问题:在事件循环中,检查与 jar rect 的冲突。使用的方法是:Rect.collidepoint当点在矩形中时返回True。

于 2013-10-29T22:32:41.310 回答
0

为此,我有两件事要说:

首先,正如Bartlomiej Lewandowski所说,这是一些无组织的 pygame 代码。我推荐这本来自 inventwithpython 的关于 pygame 和一般 gameLoop 组织的免费电子书。

其次,我也曾与 tkinter 一起解决过此类问题。首先有一个函数可以增加一个计算点击次数的全局变量:

clickCount = 0
multiplier = 1

def incrementClickCount():
    global clickCount
    global multiplier
    click += 1 * multiplier  

然后你要做的是测试鼠标光标按下时的位置,如果它在你想要的坐标上。(您可以为此添加按钮动画):

def checkForCursorPressed(x,y):
    if pygame.mouse.get_pressed() == (1, 0, 0) and pygame.mouse.get_pos() == (x,y):
        incrementClickCount()

您可以通过不同的用户操作和/或使用简单的检查点来更改乘数的值!我不建议使用乘数作为参数,因为它会降低应用程序中的感觉。

如果您发现它有用,请不要忘记接受作为答案!干杯:)

顺便说一句,此示例在鼠标光标单击测试中测试逐像素精度。要检查区域点击,请检查 (x,y) 是否位于您的按钮/点击区域内。

于 2013-10-31T20:55:29.877 回答