• pygame游戏图像绘制及精灵用法


    1精灵文件 plane_sprites.py

     1 import pygame
     2 
     3 class GameSprite(pygame.sprite.Sprite):
     4     """飞机大战游戏精灵"""
     5     def __init__(self,plane_name,speed=1):
     6 
     7         # 调用父类方法 只要继承的不是object类 初始化的第一步都要调用父类方法
     8         super().__init__()
     9 
    10         # 定义对象的属性
    11         # 加载精灵图像
    12         self.image = pygame.image.load(plane_name)
    13         # 精灵大小
    14         # image的get_rect()方法,可以返回pygame.Rect(0,0,图像宽,图像高)的对象
    15         self.rect = self.image.get_rect()
    16         # 设置精灵移动速度
    17         self.speed = speed
    18 
    19     def update(self):
    20         """更新精灵位置"""
    21         # 在屏幕的垂直方向移动
    22         self.rect.y += self.speed

    2.绘制图像主页面

     1 import pygame
     2 from plane_sprites import *
     3 
     4 # 游戏初始化
     5 pygame.init()
     6 
     7 # 创建游戏窗口 480*700
     8 # 使用display.set_mode()创建的screen对象是一个内存中的屏幕数据对象,可以理解成是油画的画布
     9 screen = pygame.display.set_mode((480,700))
    10 
    11 # 绘制背景图像
    12 bg = pygame.image.load("./images/background.png")
    13 # 绘制背景图像在屏幕
    14 #screen.blit方法是在画布上绘制很多图像
    15 # blit方法接收两个参数,第一个参数是图像数据,第二个参数是图像的坐标
    16 screen.blit(bg,(0,0))
    17 
    18 # display.update()会将画布的最终结果绘制在屏幕上,这样可以提高屏幕绘制效率,增加游戏的流畅度
    19 # pygame.display.update()
    20 
    21 #hero1. 绘制英雄飞机
    22 hero = pygame.image.load("./images/me1.png")
    23 
    24 #hero2. 绘制图像在屏幕
    25 screen.blit(hero,(150,300))
    26 
    27 # 更新显示 只有调用update()方法 才能开到绘制在屏幕上的飞机
    28 pygame.display.update( )
    29 
    30 #hero3. 定义rect记录英雄飞机的初始位置
    31 # Rect(x坐标,y坐标,图片宽,图片高)
    32 hero_rect = pygame.Rect(150,300,102,126)
    33 
    34 
    35 # pygame.time.Clock 可以非常方便的设置屏幕绘制速度----刷新频率
    36 # clock1.初始化创建一个时钟对象
    37 clock = pygame.time.Clock()
    38 
    39 # 创建敌机的精灵
    40 enemy = GameSprite("./images/enemy1.png")
    41 enemy2 = GameSprite("./images/enemy1.png",2)
    42 
    43 
    44 # 创建敌机精灵组
    45 enemy_group = pygame.sprite.Group(enemy,enemy2)
    46 
    47 # 游戏循环
    48 while True:
    49     # clock2.在游戏循环中让时钟对象调用tick(频率)方法
    50     # 制定循环体内部的代码执行的频率
    51     clock.tick(60)  #每秒更新60次
    52 
    53     # hero4.修改英雄飞机的位置
    54     hero_rect.y -= 1
    55 
    56     if hero_rect.y <= 0-hero_rect.height:
    57         hero_rect.y = 700
    58 
    59     #刷新绘制背景图片 如果没有这一步 英雄飞机飞行时会有重影
    60     screen.blit(bg,(0,0))
    61     # hero5.重新绘制英雄图像
    62     screen.blit(hero,hero_rect) #blit第二个参数可以直接把Rect()放进去
    63 
    64     # 让精灵组调用两个方法才能显示敌机
    65     # 精灵组1.update
    66     enemy_group.update()
    67     # 精灵组2.draw(画布)
    68     enemy_group.draw(screen)
    69 
    70 
    71     # 更新显示
    72     pygame.display.update()
    73 
    74     # 捕获事件
    75     # event_list = pygame.event.get()
    76     # print(event_list)
    77 
    78 
    79     # 游戏循环中监听事件 pygame.event.get() 可以获得用户当前所做动作的事件列表
    80     for event in pygame.event.get():
    81 
    82         # 事件event
    83         # print(event)
    84 
    85         # 判断用户是否点击了关闭按钮
    86         if event.type == pygame.QUIT:
    87             print("游戏腿粗")
    88 
    89             # 退出游戏循环 卸载所有模块
    90             pygame.quit()
    91 
    92             # 直接退出系统
    93             exit()
  • 相关阅读:
    NoSql database——Redis
    node-inspector,is a debugger interface for Node.js applications
    《倡议书——节约用电,从我做起》
    祖国万岁——2
    祖国万岁——1
    台湾
    REST APIs must be hypertext-driven——Posted by Roy T. Fielding
    Microservice architecture
    3——A Journey into Microservices: Dealing with Complexity
    2——A Journey into Microservices: A Cloudy Beginning
  • 原文地址:https://www.cnblogs.com/yifengs/p/11358543.html
Copyright © 2020-2023  润新知