python pygame - 如何创建包含多个图像的拖放?
python pygame - how to create a drag and drop with multiple images?
所以我一直在尝试使用 python.The 中的 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:\Users\Yonatan\Desktop\imgres.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
属性:
Draws the contained Sprites to the Surface argument. This uses the Sprite.image attribute for the source surface, and Sprite.rect for the position.
所以我一直在尝试使用 python.The 中的 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:\Users\Yonatan\Desktop\imgres.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
属性:
Draws the contained Sprites to the Surface argument. This uses the Sprite.image attribute for the source surface, and Sprite.rect for the position.