Pygame图像移动但图像矩形不移动

时间:2017-10-03 09:46:00

标签: python-3.x pygame

这是我试图为学校项目制作的基于目标的游戏的开始代码。对于上下文,游戏应该在目标出现在屏幕上的某个位置时工作,并且当点击时它移动到不同的位置。这部分工作我有它所以图像blits到不同的位置,但我正在使用的图像的矩形似乎保持在同一个地方,并不随图像移动这意味着我的碰撞不起作用所以目标只移动一次。

我需要矩形的Xpos和Ypos移动到与新图像相同的位置,以便我可以看到十字线是否在新目标区域内,但我尝试的方式似乎不起作用。任何帮助将不胜感激。

import pygame
import random
from pygame.locals import *

pygame.init()

screen = pygame.display.set_mode((800,800))
clock = pygame.time.Clock()

class Targets(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.rect = pygame.Rect(xpos, ypos, image.get_width(), image.get_height())


def init():
    global target_obj
    target = pygame.image.load("target.png").convert_alpha()
    target_obj = Targets(target, xpos= random.randint(0, 672), ypos= random.randint(0, 672))


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

def check_events():
    global done
    global target_obj

    for event in pygame.event.get():
        mouse_pos = pygame.mouse.get_pos()

        if event.type == pygame.QUIT:
            done = True
            pygame.quit()
            quit()

        if event.type == pygame.MOUSEBUTTONDOWN:
            if target_obj.rect.collidepoint(mouse_pos):
                    target_obj.xpos = random.randint(0, 672)
                    target_obj.ypos = random.randint(0, 672)
                    screen.blit(target_obj.image, (target_obj.xpos, target_obj.ypos))
                    pygame.display.update()
                    print("Clicked")


        if event.type == pygame.MOUSEMOTION:
            if target_obj.rect.collidepoint(mouse_pos):
                print("collision")




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

    #Update the screen with drawing
    screen.blit(target_obj.image, (target_obj.xpos, target_obj.ypos))

    pygame.display.update() 

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

修改

通过更改

解决了这个问题
 screen.blit(target_obj.image, (target_obj.xpos, target_obj.ypos)) 

 screen.blit(target_obj.image, target_obj.rect) 

并改变

 target_obj.xpos = random.randint(0, 672)
 target_obj.ypos = random.randint(0, 672) 

target_obj.rect.x = random.randint(0, 672)
target_obj.rect.y = random.randint(0, 672) 

0 个答案:

没有答案