Python pygame -如何创建多个图像的拖放



所以我一直在尝试使用python中的pygame创建一个拼图游戏。唯一的问题是,我在创建带有多个图像的面板时遇到了麻烦,我可以在屏幕上拖动这些图像(不需要像拼图一样连接图像,所以只是简单的拖放)。我正在从电脑的本地文件夹中加载图像。有人能帮帮我吗?

这就是我到目前为止所尝试的,但是图像从相同的位置开始,pygame将它们都识别为一个图像

import socket
import os
import shutil
import pygame
from pygame.locals import*

def dragdrop(path):
    dirs = os.listdir(path)
    def load_image(name, colorkey=None):
        fullname=os.path.join("data", name)
        try:
            image=pygame.image.load(fullname)
        except pygame.error, message:
            print "Impossible de charger l'image:",name
            raise SystemExit, message
        image = image.convert()
        if colorkey is not None:
            if colorkey is -1:
                colorkey = image.get_at((0, 0))
            image.set_colorkey(colorkey, RLEACCEL)
        return image, image.get_rect()
    class Ichrom(pygame.sprite.Sprite):
        def __init__(self,image,initpos):
            pygame.sprite.Sprite.__init__(self)
            self.pos = initpos
            self.image, self.rect=image
            self.button=(0,0,0)#mouse buttons not pressed
            self.selected = 0
            self.mouseover=False
            self.focused=False
            print "init chrom at ",self.pos
        def rollover(self):
            """Test if the mouse fly over the chromosome 
            self.mouseover==True if mouse flying over the chrom,
            False if not"""
            mpos=pygame.mouse.get_pos()#mouseposition
            #test if mouse roll over the sprite
            if self.rect.collidepoint(mpos):
                self.mouseover=True
            else:
                self.mouseover=False
        def update(self):
            self.button=pygame.mouse.get_pressed()
            mpos = pygame.mouse.get_pos()
            self.selected=self.rect.collidepoint(mpos)
            #the mouse flies over a chromosome
            if (self.mouseover):
                #print "mouse pos:",mpos
                if self.button==(1,0,0):     # )  
                    pos = pygame.mouse.get_pos()
                    self.rect.midtop = pos
    def main():
        pygame.init()
        screen = pygame.display.set_mode((1000,1000))
        pygame.display.set_caption("Karyotyper")
        pygame.mouse.set_visible(True)
        background = pygame.Surface(screen.get_size())
        background = background.convert()
        background.fill((0, 0, 0))
        screen.blit(background,(0, 0))
        pygame.display.flip()

        """i1=load_image('C:/Users/Yonatan/Desktop/House.png', -1)
        i2=load_image('C:/Users/Yonatan/Desktop/US.jpeg', -1)
        i3=load_image('C:UsersYonatanDesktopimgres.jpg', -1)
        fuck= [i1, i2, i3]"""
        img=[]
        count=0
        for i in dirs:
            spr = Ichrom(load_image(path + "/" +i,-1),(count,count))
            count = count+30
            img.append(spr)
        allsprites = pygame.sprite.RenderPlain((fck))
        clock = pygame.time.Clock()
        while 1:
            clock.tick(60)
            for event in pygame.event.get():
                if event.type == QUIT:
                    return
                elif event.type == KEYDOWN and event.key == K_ESCAPE:
                    return
                if event.type ==pygame.MOUSEBUTTONDOWN:
                    #need to be modified to handle a list of chromosomes
                    for i in fck:
                        i.rollover()
            allsprites.update()
            screen.blit(background,(0,0))
            allsprites.draw(screen)
            pygame.display.flip()
    main()

将位置传递给精灵并将其存储在self.pos中,但要绘制Sprite,精灵组使用rect属性:

From pygame.sprite.Group.draw():

将包含的精灵绘制到Surface参数。这使用雪碧。image属性用于源表面,以及Sprite。Rect for position.

最新更新