如何在pygame中获取图像的坐标

时间:2016-04-27 03:36:12

标签: python pygame

我刚刚开始学习Pygame并且我正在做一个小游戏(学校项目),在那里使用鼠标我可以点击图像并拖动它。有很多图像,所以我的问题是我如何识别选择的图像。谢谢!

以下是一些代码:

def Transformation(element):
    element = pygame.transform.scale(element,(50,75))

fire = pygame.image.load("ElementIcon/fire.png").convert_alpha()
Transformation(fire)
fire.set_colorkey(BLACK)
fire_rect = fire.get_rect()
earth = pygame.image.load("ElementIcon/earth.png").convert_alpha()
Transformation(earth)
earth.set_colorkey(BLACK)
earth_rect = earth.get_rect()


while not done:
screen.fill(WHITE)

#Update the screen with drawings
screen.blit(fire,(408,450))
screen.blit(earth,(419, 350))

mouse_pos = pygame.mouse.get_pos()
for event in pygame.event.get():
    if event.type == pygame.QUIT:
        done = True
        print("User quits the game :(")
    if event.type == pygame.KEYDOWN:
        if event.key == pygame.K_ESCAPE:
            done = True
            print("Game stopped early by user :( ")
    if event.type == pygame.MOUSEBUTTONDOWN:            
        print mouse_pos
        print fire_rect
        if fire_rect.collidepoint(mouse_pos):
            print "over fire"
        if earth_rect.collidepoint(mouse_pos):
            print "mama"

当我尝试打印fire_rect时,我得到< 0,0,62,75>

2 个答案:

答案 0 :(得分:0)

你可以获得鼠标pos和图像rect并检查碰撞:

pos = pygame.mouse.get_pos()

if image.rect.collidepoint(pos)
    # move it

如果您想使用鼠标移动图像,可以使用pygame.mouse.get_rel()获取相对x / y移动,并使用它来更改图像位置。

答案 1 :(得分:0)

玩这个代码:

import pygame
from pygame.locals import *

pygame.init()

screen = pygame.display.set_mode((600,600))
clock = pygame.time.Clock()
FPS = 60

class MovableImage(pygame.Surface):
    def __init__(self, image, xpos=0, ypos=0):
        self.image = image
        self.xpos = xpos
        self.ypos = ypos
        self.width =  image.get_width()
        self.height = image.get_height()
        self.selected = False
        self.rect = pygame.Rect(xpos, ypos, image.get_width(), image.get_height())

    def move(self, move):
        self.xpos += move[0]
        self.ypos += move[1]
        self.rect = pygame.Rect(self.xpos, self.ypos, self.width, self.height)

def Transformation(element):
    element = pygame.transform.scale(element,(50,75))

def init():
    global ImageList
    fire = pygame.Surface((50,50))
    fire.fill((255,0,0))
    #fire = pygame.image.load("ElementIcon/fire.png").convert_alpha()
    #Transformation(fire)
    #fire.set_colorkey(BLACK)
    #fire_rect = fire.get_rect()

    earth = pygame.Surface((50,50))
    earth.fill((255,255,0))
    #earth = pygame.image.load("ElementIcon/earth.png").convert_alpha()
    #Transformation(earth)
    #earth.set_colorkey(BLACK)
    #earth_rect = earth.get_rect()

    fire_obj = MovableImage(fire, 408, 450)
    earth_obj = MovableImage(earth, 419,350)

    ImageList =[]
    ImageList.append(fire_obj)
    ImageList.append(earth_obj)

def run():

    global done
    done = False
    while not done:
        check_events()
        update()
        clock.tick(60)      

def check_events():
    global done
    global ImageList

    mouse_pos = pygame.mouse.get_pos()

    for event in pygame.event.get():

        if event.type == pygame.QUIT:
            done = True
            print("User quits the game :(")
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_ESCAPE:
                done = True
                print("Game stopped early by user :( ")

        if event.type == pygame.MOUSEBUTTONDOWN:
            for im in ImageList:
                if im.rect.collidepoint(mouse_pos):
                    im.selected = not im.selected

        if event.type == pygame.MOUSEBUTTONUP:
            for im in ImageList:
                if im.rect.collidepoint(mouse_pos):
                    im.selected = False

        if event.type == pygame.MOUSEMOTION:
            for im in ImageList:
                if im.rect.collidepoint(mouse_pos) and im.selected:
                    xmv = event.rel[0]
                    ymv = event.rel[1]

                    if event.buttons[0]:
                        if xmv < 0:
                            if im.xpos > 0:
                                im.move((xmv,0))

                        elif event.rel[0] > 0:
                            if im.xpos < screen.get_width():
                                im.move((xmv,0))

                        elif event.rel[1] < 0:
                            if im.ypos > 0:
                                im.move((0,ymv))

                        elif event.rel[1] > 0:
                            if im.ypos < screen.get_height():
                                im.move((0,ymv))

def update():
    global ImageList
    screen.fill((255, 255, 255)) #WHITE)

    #Update the screen with drawings
    for im in ImageList:
        screen.blit(im.image, (im.xpos, im.ypos))

    pygame.display.update() 

if __name__=="__main__":
    init()
    run()