无法使用碰撞点(event.pos)移动图像?

时间:2018-01-25 06:28:21

标签: python pygame

我最近对 pygame 感兴趣,事情是我的代码没有像我想的那样工作:我想用鼠标移动的图像没有&# 39;一点都不动。所以这是我的(包含我之前提到的问题的代码):

import pygame,sys,os

WHITE = (255,255,255)
BLACK = (0,0,0)
GREY = (128,128,128)

class SilverGeneral:
    def __init__(self,rect):
        self.click = False
        self.rect = pygame.Rect(rect)
    def update(self,screen):
        if self.click:
            self.rect.center = pygame.mouse.get_pos()

pygame.init()

screen=pygame.display.set_mode([1000,600])

pygame.display.set_caption("Test")
silv = SilverGeneral((5,5,40,20))
silv.rect.center=screen.get_rect().center
clock = pygame.time.Clock()        
image = pygame.image.load("c:\game\silvergeneral.bmp").convert()

while 1:    
    screen.fill(WHITE)
    for event in pygame.event.get():
        if event.type == pygame.MOUSEBUTTONUP:
            print(silv.rect.collidepoint(event.pos))
            if silv.rect.collidepoint(event.pos):
                print("True")
                silv.click=True
        elif event.type == pygame.MOUSEBUTTONDOWN:
            print("False")
            silv.click=False
        elif event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
    print (pygame.mouse.get_pos())
    print (silv.rect.center)
    silv.update(screen)        
    screen.blit(image,silv.rect)
    clock.tick(10)
    pygame.display.update()

我一直想着整整一个小时,不知道为什么collidepoint(event.pos)不起作用。即使经过测试,控制台也不会打印True

1 个答案:

答案 0 :(得分:2)

collidepoint(event.pos)效果很好。

您似乎希望能够在点击图像后移动图像 我想你的问题是你希望它可以点击该图像上的任何地方,但你实际上检查鼠标位置是否在图像的左上角40x20像素框中。

您可以通过更改

轻松验证
screen.blit(image,silv.rect)

pygame.draw.rect(screen, pygame.color.THECOLORS['blue'], silv.rect, 0)

一个很好的起点是使用pygame的Sprite类并将代码更改为:

class SilverGeneral(pygame.sprite.Sprite):
    def __init__(self, *groups):
        pygame.sprite.Sprite.__init__(self, *groups)
        self.click = False
        self.image = pygame.image.load("image.jpg").convert()
        self.rect = self.image.get_rect()

    def update(self):
        if self.click:
            self.rect.center = pygame.mouse.get_pos()

pygame.init()

screen=pygame.display.set_mode([1000,600])

pygame.display.set_caption("Test")
sprites = pygame.sprite.Group()
silv = SilverGeneral(sprites)
silv.rect.center = screen.get_rect().center
clock = pygame.time.Clock()

while 1:    
    screen.fill(WHITE)
    for event in pygame.event.get():
        if event.type == pygame.MOUSEBUTTONUP:
            silv.click = silv.rect.collidepoint(event.pos) and not silv.click
        elif event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
    sprites.update()        
    sprites.draw(screen)
    clock.tick(60)
    pygame.display.update()

重要的是rect设置为图像的矩形,因此它的大小合适。

enter image description here