|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
请问怎么将图片绘制到指定位置上,就是我之前载入了一个按钮图片,然后想用户在点击“2048”这个按钮时,把窗口变大,可是当我点击的时候出了问题:
我为了测试,就如果点击了“2048”按钮,就打印1,如果按钮到了“小小贪吃蛇”按钮,就打印2。然后当我点击“小小贪吃蛇”按钮时,不能打印2。
请问怎么指定位置去绘制图片呢?
代码如下:
- import pygame
- import sys
- from pygame.locals import *
- #模块初始化
- pygame.init()
- pygame.mixer.init()
- #创建窗口
- bg_size = width,height = 800,500
- bg_size1 = width,height = 1000,1000
- screen = pygame.display.set_mode(bg_size)
- #背景图片
- background = pygame.image.load("images/background.png").convert()
- #创建窗口标题
- pygame.display.set_caption("GAME_OF_THE_ALL")
- BLUE = (0,0,255)
- #载入图片
- two_zero_four_eight = pygame.image.load("images/2048.png").convert_alpha()
- small_snake = pygame.image.load("images/小小贪吃蛇.png").convert_alpha()
- while True:
- for event in pygame.event.get():
- if event.type == QUIT:
- pygame.quit()
- sys.exit()
- #判断事件类型是不是鼠标
- if event.type == pygame.MOUSEBUTTONDOWN:
- #如果是的话,判断鼠标是否被按下
- if pygame.mouse.get_pressed()[0]:
- #如果被按下,则获取鼠标坐标
- pos = pygame.mouse.get_pos()
- #如果鼠标按键按到了“2048”的按钮上,则做出响应,并且打印1
- if two_zero_four_eight_rect.left < pos[0] < two_zero_four_eight_rect.right and two_zero_four_eight_rect.top < pos[1] < two_zero_four_eight_rect.bottom:
- screen = pygame.display.set_mode(bg_size1)
- print(1)
- #如果按到“小小贪吃蛇”按钮上,就打印2
- elif small_snake_rect.left < pos[0] < small_snake_rect.right and small_snake_rect.top < pos[1] < small_snake_rect.bottom:
- print(2)
- screen_rect = screen.get_rect()
- two_zero_four_eight_rect = two_zero_four_eight.get_rect()
- two_zero_four_eight_rect.centerx = screen_rect.centerx
- two_zero_four_eight_rect.centery = screen_rect.centery
- small_snake_rect = small_snake.get_rect()
- small_snake_rect.centerx = screen_rect.centerx
- small_snake_rect.centery = screen_rect.centery
- #绘制背景
- screen.blit(background,(0,0))
- #绘制图片
- screen.blit(small_snake,(40,30))
- screen.blit(two_zero_four_eight,two_zero_four_eight_rect)
- #刷新
- pygame.display.update()
-
- if __name__ == "__main__":
- try:
- main()
- except SystemExit:
- pass
- except:
- traceback.print_exc()
- pygame.quit()
- input()
复制代码
这种一般要用pygame.sprite.Sprite类(动画精灵),你再稍微改一下,即可:
- import sys
- import pygame
- class ImgSpite(pygame.sprite.Sprite):
- def __init__(self, img_obj, img_name, x, y):
- super().__init__()
- self.image = img_obj
- self.name = img_name
- self.rect = self.image.get_rect(center=(x,y))
- # self.clicked = False
-
- def clicked_test(self, event_list):
- for event in event_list:
- if event.type == pygame.MOUSEBUTTONDOWN: # 判断鼠标是否被按下(注:鼠标有三个键哦)
- # p1, p2, p3 = pygame.mouse.get_pressed()
- if self.rect.collidepoint(event.pos): # 判断点击区域是否在其区域内
- print(self.name, "被点击了!")
- # 初始化
- pygame.init()
- # 背景 与 屏幕大小
- bg = pygame.image.load("background.png")
- sw, sh = bg.get_width(), bg.get_height()
- screen = pygame.display.set_mode((sw, sh))
- # 元素图片精灵
- t2048 = ImgSpite(pygame.image.load("2048_0.1x.png"), 't2048', 100, 200)
- snake = ImgSpite(pygame.image.load("snake_0.1x.png"),'snake', 300, 200)
- group = pygame.sprite.Group([t2048, snake]) # 放到“精灵组”里,才方便监测碰撞
- # group.add() # 图片精灵可以单独添加进去
- while True:
- event_list = pygame.event.get() # 获取全部事件(事件清单)
- for event in event_list:
- if event.type == pygame.QUIT:
- pygame.quit()
- sys.exit()
-
- for sprite in group:
- sprite.clicked_test(event_list)
-
- #绘制背景
- screen.blit(bg,(0,0))
- #绘制图片
- screen.blit(snake.image, snake.rect)
- screen.blit(t2048.image, t2048.rect)
- #刷新
- pygame.display.update()
复制代码
|
|