这是我试图为学校项目制作的基于目标的游戏的开始代码。对于上下文,游戏应该在目标出现在屏幕上的某个位置时工作,并且当点击时它移动到不同的位置。这部分工作我有它所以图像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)