我从.get_rect()得到一个不正确的位置?

时间:2016-10-24 08:45:04

标签: python click pygame mouse

我目前正在开展一个学校项目,我正在制作一个" hexcells"在pygame中的类似游戏,现在我试图在用户点击当前图像时尝试blit一个新图像。如果单击左上角区域,它将在左上角区域中显示图像,但如果单击任何现有图像则不会。我告诉程序在.get_rect()函数的帮助下从图像中打印坐标,但是在我点击的时候它仍然是相同的,即使图像在哪里,坐标也是如此。有人可以帮我理解这是如何工作的,并帮助我在现有图像之上显示新图像吗?下面的代码不是整个文档,但是有太多垃圾/垃圾/未使用的代码,所以我认为我没有时间查看不相关的代码。如果格式错误或信息不够,也很抱歉,我尽力了。

import pygame, sys
from pygame.locals import *


#Magic numbers
fps = 30
winW = 640
winH = 480
boxSize = 40
gapSize = 75
boardW = 3
boardH = 3
xMargin = int((winW - (boardW * (boxSize + gapSize))) / 2)
yMargin = int((winW - (boardW * (boxSize + gapSize))) / 2)
#Lil bit o' color R G B
NAVYBLUE = ( 60,  60, 100)
correctCords = [[175,275,375],[375,275,175]]
bgColor = NAVYBLUE

unC = pygame.image.load("unC.png")
cor = pygame.image.load("correct.png")
inc = pygame.image.load("wrong.png")
correct = "Correct"
inCorrect = "Incorrect"

def main():
    global FPSCLOCK, DISPLAYSURF
    pygame.init()
    FPSCLOCK = pygame.time.Clock()
    DISPLAYSURF = pygame.display.set_mode((winW, winH))
    mousex = 0 #stores x-coordinate of mouse event
    mousey = 0 #stores y-coordinate of mouse event
    pygame.display.set_caption("Branches")

    DISPLAYSURF.fill(bgColor)
    gridGame(inCorrect, correct,gapSize,xMargin,yMargin,boxSize)

while True:
    mouseClicked = False


    for event in pygame.event.get():
        if event.type == QUIT or (event.type == KEYUP and event.key == K_ESCAPE):
            pygame.quit()
            sys.exit()
        elif event.type == MOUSEMOTION:
            mousex,mousey = event.pos
        elif event.type == MOUSEBUTTONUP:
            mousex, mousey = event.pos
            pos = pygame.mouse.get_pos()
            mouseClicked = True
            unCa = unC.get_rect()
            corA = cor.get_rect()
            print unCa
            print corA
            print pos
            if unCa.collidepoint(pos):
                DISPLAYSURF.blit(cor,(mousey,mousex))

            """lada = unC.get_rect()
            lada = 
            if mousex and mousey == lada:
                for x in correctCords:
                    for y in x:
                        for z in x:
                            if mousey and mousex == z and y:

                                DISPLAYSURF.blit(cor,(mousey,mousex))
            print lada"""



    pygame.display.update()
    FPSCLOCK.tick(fps)


def gridGame(inCorrect, correct,gapSize,xMargin,yMargin,boxSize):
grid = []
cordX = []
cordY = []
correctRecs = []
#cordinates = []
#cordinates.append([])
#cordinates.append([])
#cordinates.append([])
#this is basically getBoard() all over again
#This part will arrange the actual backend grid
for row in range(3):
    grid.append([])
    #cordinates[0].append(gapSize+(row+1)*100)
    #cordinates[1].append(gapSize+(row+1)*100)
    #cordinates[2].append(gapSize+(row+1)*100)
    for column in range(3):
        grid[row].append(inCorrect)


for row in range(3):
    cordX.append([])
    for column in range(3):
        cordX[row].append(gapSize+(row+1)*100)

for row in range(3):
    cordY.append([])
    for column in range(3):
        cordY[row].append(gapSize+(column+1)*100)
#print cordX[0][0], cordY[0][0]



grid[0][2] = correct
grid[1][1] = correct
grid[2][0] = correct
#Y-AXEL SKRIVS FoRST ([Y][X])

#print cordinates[2][1]
DISPLAYSURF.blit(cor,(100,100)) 



#Let's draw it as well
for row in range(3):
    for column in range(3):
        DISPLAYSURF.blit(unC,(gapSize+(row+1)*100,gapSize+(column+1)*100))
main()

对于可怕的变量命名和偶尔的瑞典评论也很抱歉。

1 个答案:

答案 0 :(得分:1)

float&()仅为您提供图像尺寸 - 因此在开始时(auto之前)仅使用一次 - 之后始终使用相同的unCa = unC.get_rect()来保持图像位置并更改它

不过:更好地使用更易读的名称 - 比如while True

即。

unCa

然后使用此unC_rect来blit图像

 # move 10 pixel to the right
 unC_rect.x += 10

 # set new position
 unC_rect.x = 10

 unC_rect.right = 100

 unC_rect.topleft = (10, 200)

 unC_rect.center = (10, 200)

 # center on screen
 unC_rect.center = DISPLAYSURF.get_rect().center

并检查与其他rect

的碰撞
 blit(unC, unC_rect)

或点状鼠标位置

rect