pygame旋转图形核心原理例子_飞碟与外星人旋转与碰撞举例.py

""" pygame旋转图形核心原理例子_飞碟与外星人旋转与碰撞举例.py """

__author__ = "李兴球"
__date__ = "2019年1月"

import pygame
import random
 
# 定义颜色常量
BLACK  = (   0,   0,   0)
WHITE  = ( 255, 255, 255)
RED    = ( 255,   0,   0)
 
# 方块类
class Block(pygame.sprite.Sprite):
 
    def __init__(self, filename):
        # 调用基类的构造方法
        super().__init__() 
 
        # 创建源图,此图不画在screen上,只是用来旋转
        self.raw_image = pygame.image.load(filename).convert_alpha()
        self.image = self.raw_image  # 这是旋转后的图形,它是最终渲染的.
 
        # 获取矩形对象,用它代表图形的坐标与宽高
        self.rect = self.image.get_rect()
         
        self.angle = 0          # 角度
        self.angle_change = 0   # 角速度
         
    def update(self):
        """这里是旋转的核心原理代码,它是对源图进行旋转,然后注意新的矩形对象要获取老的
           矩形对象的中点值"""
        self.image = pygame.transform.rotate(self.raw_image, self.angle)
        center  = self.rect.center   # 原来的旋转中心  
        self.rect = self.image.get_rect()
        self.rect.center = center    # 保持和原来中心一致
        self.angle += self.angle_change
        self.angle = self.angle % 360
 
# 实始化pygame引擎
pygame.init()
 
# 设置屏幕宽高,然后创建屏幕
screen_width = 700
screen_height = 400
screen = pygame.display.set_mode([screen_width, screen_height])
pygame.display.set_caption("旋转核心原理_飞碟与外星人旋转_作者:李兴球")
 
# 方块“列表”,用Group类创建
block_list = pygame.sprite.Group()
 
# 所有角色“列表”
本文隐藏内容 登陆 后才可以浏览
# 创建一个红色的玩家方块 player = Block("ufo.png") player.angle_change = 0 all_sprites_list.add(player) # 当关闭窗口事件发生时,把下列变量值设为True,从而退出while done = False # 设定刷新率的时钟对象 clock = pygame.time.Clock() score = 0 # -------- 程序主循环----------- while not done: # 当没有结束时,就循环 for event in pygame.event.get(): # 迭代每个事件 if event.type == pygame.QUIT: # 如果单击了关闭按钮 done = True # 这个标志就会True了 # 清屏为白色 screen.fill(RED) # 获取鼠标指针坐标 ,玩家跟随鼠标指针坐标 player.rect.center = pygame.mouse.get_pos() all_sprites_list.update() # 检查是否玩家角色和其它方块有碰撞,返回所碰撞的方块列表 blocks_hit_list = pygame.sprite.spritecollide(player, block_list, True) # 遍历每个碰到的方块 for block in blocks_hit_list: score += 1 print( score ) # 重画所有的角色 all_sprites_list.draw(screen) # 设定刷新率为60 clock.tick(60) # 显示 pygame.display.flip() pygame.quit()