实现游戏循环还有事件的监听

项目源码

在上一讲中 你需要完成这样的这样的效果, 如果你还没有完成,请不要继续往下阅读!!切记切记切记。,重要的事情说三遍

我们来看一下什么是游戏循环

所谓的游戏循环很好的理解 就是 ,什么时候游戏会退出,注意啊,我们是反向的理解 游戏不退出,那么游戏就没有结束,没有结束,就说明游戏正在运行中,是运行的状态

  • 它保证游戏持续的运行 不会直接的退出
  • 对图像的绘制有很大的帮助
  • 不断的检查用户交互的事件...

把我们的游戏循环写出来

++++
# 游戏循环
while True:
print(i)
i += 1
++++

我们看一下目前的游戏模块

我们一步一步的来,现在我们去设置游戏的时钟

所谓的游戏时钟 实际上指的就是刷新率

  • 在python中定义了一个专门的类 'pygame.time.Clock 可以非常方便的设置屏幕绘制速度 —— 刷新帧率'
  • 如何使用它?你只需要两步
    1. 游戏初始化 创建一个 时钟对象
    2. 游戏循环 中让时钟对象调用 tick(帧率) 方法
    3. 说明:tick 方法会根据 上次被调用的时间,自动设置 游戏循环 中的延时

      你可以这样的来搞它
# 1. 创建游戏时钟对象-你不需要导入包,这个是python自带的,就像js里面的定时器
clock = pygame.time.Clock()
i = 0 # 游戏循环
while True: # 设置屏幕刷新帧率
clock.tick(60) print(i)
i += 1

现在我们来实现第一个主战飞机的动画

需求分析:我们需要让飞机动起来。实现的原理就是在每一次的绘制中。把图片的位置进行变化,这样就完成了我们的 动 的效果

  • 代码逻辑分析

    1. 游戏初始化 定义一个 pygame.Rect 的变量记录英雄的初始位置
    2. 游戏循环 中每次让 英雄y - 1 —— 向上移动
    3. y <= 0 将英雄移动到屏幕的底部
    4. 注意:每一次调用 update() 方法之前,需要把 所有的游戏图像都重新绘制一遍而且应该 最先 重新绘制 背景图像,如果你不听我的建议,后果自负
  • 具体的实现

# 1. 定义英雄的初始位置
++++(在这之前我们已经定于了对象)
# 设置我们的初始化的绘制位置
hero_rect = pygame.Rect(150, 500, 102, 126) while True: # 可以指定循环体内部的代码执行的频率
clock.tick(60) # 2.更新英雄位置
hero_rect.y -= 1 # 3. 如果移出屏幕,则将英雄的顶部移动到屏幕底部
if hero_rect.y <= 0:
hero_rect.y = 700 # 4.绘制背景图片
screen.blit(bg, (0, 0))
# 5.绘制英雄图像
screen.blit(hero, hero_rect) # 6.更新显示//有关于整个窗口的更新 你需要放在最后
pygame.display.update()

咦?我们的游戏是不是 卡死 了?

你已经注意到了这一点,业务我们的循环好像是一个无限循环,它没有结束的条件,

  • 需求分析:我们需要在点击窗口上的x号的时候退出游戏
  • 代码分析:
    1. 这里需要我们用到事件(event);
    2. 游戏一旦启动我们就需要不断的去监听发生的交互事件
    3. 一旦判断到有 ‘退出’事件的时候就结束我们的游戏 卸载我们的包
    4. pygame 中通过 pygame.event.get() 可以获得 用户当前所做动作 的 **事件列表,我们在可以写一个函数获取到这些事件其中的一个 ‘退出’事件 ,根据它来退出游戏
    5. 注意以下的代码非常的固定,几乎每一个pygame游戏都有这样的一行代码,它们的实现原理都是一样的,别担心 这并不难
  • 代码的实现
+++++(上面还有好多代码就忽略了,我们专注我们的核心业务需求)
while True: # 设置屏幕刷新帧率
clock.tick(60) # 1.事件监听
for event in pygame.event.get(): # 2.判断用户是否点击了关闭按钮
if event.type == pygame.QUIT:
print("退出游戏...")
# 卸载所有的依赖包
pygame.quit() # 直接退出系统
exit()

Python——项目-小游戏2-动画绘制的更多相关文章

  1. Python——项目-小游戏

    开始我们的项目 飞机大战 1 项目的初体验 以及前期准备 游戏初体验画面 验证一下本地第三方包有没有导入 python3 -m pygame.examples.aliens 如果没有出现游戏画面请先安 ...

  2. 12岁的少年教你用Python做小游戏

    首页 资讯 文章 频道 资源 小组 相亲 登录 注册       首页 最新文章 经典回顾 开发 设计 IT技术 职场 业界 极客 创业 访谈 在国外 - 导航条 - 首页 最新文章 经典回顾 开发 ...

  3. python 金币小游戏

    我最近用python的pygame做了一个金币小游戏 游戏规则:移动挡板接住金币 游戏截图: 代码如下: import pygame.freetype import sys import random ...

  4. python 打字小游戏

    最近随便用python的pygame编了这个打字小游戏 只要有字母调到窗口底部就结束 上代码: import pygame.freetype import sys import random pyga ...

  5. python学习 小游戏

    基于python3.4 while循环 #!/usr/bin/python3 #-*- coding=utf-8 -*- import random import sys import os luck ...

  6. 把川普射上太阳—如何用python制作小游戏

    1.准备 开始之前,你要确保Python和pip已经成功安装在电脑上噢,如果没有,请访问这篇文章:超详细Python安装指南 进行安装. Windows环境下打开Cmd(开始—运行—CMD),苹果系统 ...

  7. Python hangman小游戏

    hangman # words.py 使用pickle永久性存储数据 import pickle filename = 'words.pk' data = ['cat', 'dog', 'perro' ...

  8. python做小游戏——做个马里奥分分钟解决

    一.前言 嗨喽,大家好呀!这里是小熊猫 在你的童年记忆里,是否有一个蹦跳.顶蘑菇的小人已经被遗忘? 马里奥是靠吃蘑菇成长,闻名世界的超级巨星.特征是大鼻子.头戴帽子.身穿背带工作服.还留着胡子.帽子加 ...

  9. Python小游戏 -- 猜单词

    Python初学者小游戏:猜单词 游戏逻辑:就像我们曾经英语学习机上的小游戏一样,电脑会从事先预置的词库中抽取单词,然后给出单词的字母数量,给定猜解次数,然后让玩家进行猜测,并给出每次猜测的正确字母与 ...

随机推荐

  1. 中心极限定理|z分布|t分布|卡方分布

    生物统计学 抽样分布:n个样本会得到n个统计量,将这n个统计量作为总体,该总体的分布即是抽样分布 根据辛钦大数定律,从一个非正态分布的总体中抽取的含量主n的样本,当n充分大时,样本平均数渐近服从正态分 ...

  2. javasc-正则表达式

    匹配中文字符的正则表达式: [\u4e00-\u9fa5]评注:匹配中文还真是个头疼的事,有了这个表达式就好办了 匹配双字节字符(包括汉字在内):[^\x00-\xff]评注:可以用来计算字符串的长度 ...

  3. Memcached笔记——(二)XMemcached&Spring集成

    今天研究Memcached的Java的Client,使用XMemcached 1.3.5,做个简单的测试,并介绍如何与Spring集成. 相关链接: Memcached笔记--(一)安装&常规 ...

  4. figure图像

    import matplotlib.pyplot as plt import numpy as np x=np.linspace(-3,3,50) y1=x*2+1 y2=x**2 plt.plot( ...

  5. iOS自建分发

    1.首先满足具有https证书的域名和空间.2.通常使用github或者国内第三方托管平台.3.上传ipa文件到空间内,获取ipa文件的下载地址.4.然后编辑plist文件(注意:ipa文件和plis ...

  6. RxJava学习笔记(操作符)

    前言 上一篇文章介绍了RxJava的基础知识和简单实现,篇幅已经比较多了,所以把操作符(Operators)相关的内容放在这一篇.有了上一篇文章的基础,相信会比较容易理解操作符相关的内容了. 操作符( ...

  7. frp端口映射穿透内网

    前言 frp 是一个高性能的反向代理应用,可以轻松地进行内网穿透,对外网提供服务,支持 TCP.UDP.HTTP.HTTPS 等协议类型,并且 web 服务支持根据域名进行路由转发. Github: ...

  8. 【bzoj3441】乌鸦喝水

    Source bzoj3441 Hint 请先思考后再展开 按被删除的顺序考虑每个点,然后按照题意模拟 Solution 请先思考后再展开 被删除的顺序一定是按照[能被操作的次数]为第一关键字,位置作 ...

  9. ubuntu 18.04 添加快快捷方式

    1. 创建启动软件的快捷方式的文件 # cd ~/桌面 # vim pycharm18.1.desktop # 注意文件的后缀是 .desktop [Desktop Entry] Version=1. ...

  10. 程序小白如何快速开发OA办公系统

    对于企业开发oa办公系统,成本高,周期长.有些企业花高价购买,购买后受制于软件商,很多功能只能按原来设计需求走,无法升级或者升级慢.这些由于软件商的开发效率低难以及时地响应企业的需求变化,所以就有可能 ...