Python——项目-小游戏2-动画绘制
实现游戏循环还有事件的监听
在上一讲中 你需要完成这样的这样的效果, 如果你还没有完成,请不要继续往下阅读!!切记切记切记。,重要的事情说三遍

我们来看一下什么是游戏循环
所谓的游戏循环很好的理解 就是 ,什么时候游戏会退出,注意啊,我们是反向的理解 游戏不退出,那么游戏就没有结束,没有结束,就说明游戏正在运行中,是运行的状态
- 它保证游戏持续的运行 不会直接的退出
- 对图像的绘制有很大的帮助
- 不断的检查用户交互的事件...
把我们的游戏循环写出来
++++
# 游戏循环
while True:
print(i)
i += 1
++++
我们看一下目前的游戏模块

我们一步一步的来,现在我们去设置游戏的时钟
所谓的游戏时钟 实际上指的就是刷新率
- 在python中定义了一个专门的类 '
pygame.time.Clock可以非常方便的设置屏幕绘制速度 —— 刷新帧率' - 如何使用它?你只需要两步
- 在 游戏初始化 创建一个 时钟对象
- 在 游戏循环 中让时钟对象调用
tick(帧率)方法 - 说明:
tick方法会根据 上次被调用的时间,自动设置 游戏循环 中的延时
你可以这样的来搞它
# 1. 创建游戏时钟对象-你不需要导入包,这个是python自带的,就像js里面的定时器
clock = pygame.time.Clock()
i = 0
# 游戏循环
while True:
# 设置屏幕刷新帧率
clock.tick(60)
print(i)
i += 1
现在我们来实现第一个主战飞机的动画
需求分析:我们需要让飞机动起来。实现的原理就是在每一次的绘制中。把图片的位置进行变化,这样就完成了我们的 动 的效果
代码逻辑分析
- 在 游戏初始化 定义一个
pygame.Rect的变量记录英雄的初始位置 - 在 游戏循环 中每次让 英雄 的
y - 1—— 向上移动 y <= 0将英雄移动到屏幕的底部- 注意:每一次调用
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号的时候退出游戏
- 代码分析:
- 这里需要我们用到事件(event);
- 游戏一旦启动我们就需要不断的去监听发生的交互事件
- 一旦判断到有 ‘退出’事件的时候就结束我们的游戏 卸载我们的包
pygame中通过pygame.event.get()可以获得 用户当前所做动作 的 **事件列表,我们在可以写一个函数获取到这些事件其中的一个 ‘退出’事件 ,根据它来退出游戏- 注意以下的代码非常的固定,几乎每一个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-动画绘制的更多相关文章
- Python——项目-小游戏
开始我们的项目 飞机大战 1 项目的初体验 以及前期准备 游戏初体验画面 验证一下本地第三方包有没有导入 python3 -m pygame.examples.aliens 如果没有出现游戏画面请先安 ...
- 12岁的少年教你用Python做小游戏
首页 资讯 文章 频道 资源 小组 相亲 登录 注册 首页 最新文章 经典回顾 开发 设计 IT技术 职场 业界 极客 创业 访谈 在国外 - 导航条 - 首页 最新文章 经典回顾 开发 ...
- python 金币小游戏
我最近用python的pygame做了一个金币小游戏 游戏规则:移动挡板接住金币 游戏截图: 代码如下: import pygame.freetype import sys import random ...
- python 打字小游戏
最近随便用python的pygame编了这个打字小游戏 只要有字母调到窗口底部就结束 上代码: import pygame.freetype import sys import random pyga ...
- python学习 小游戏
基于python3.4 while循环 #!/usr/bin/python3 #-*- coding=utf-8 -*- import random import sys import os luck ...
- 把川普射上太阳—如何用python制作小游戏
1.准备 开始之前,你要确保Python和pip已经成功安装在电脑上噢,如果没有,请访问这篇文章:超详细Python安装指南 进行安装. Windows环境下打开Cmd(开始—运行—CMD),苹果系统 ...
- Python hangman小游戏
hangman # words.py 使用pickle永久性存储数据 import pickle filename = 'words.pk' data = ['cat', 'dog', 'perro' ...
- python做小游戏——做个马里奥分分钟解决
一.前言 嗨喽,大家好呀!这里是小熊猫 在你的童年记忆里,是否有一个蹦跳.顶蘑菇的小人已经被遗忘? 马里奥是靠吃蘑菇成长,闻名世界的超级巨星.特征是大鼻子.头戴帽子.身穿背带工作服.还留着胡子.帽子加 ...
- Python小游戏 -- 猜单词
Python初学者小游戏:猜单词 游戏逻辑:就像我们曾经英语学习机上的小游戏一样,电脑会从事先预置的词库中抽取单词,然后给出单词的字母数量,给定猜解次数,然后让玩家进行猜测,并给出每次猜测的正确字母与 ...
随机推荐
- The entity "nbsp" was referenced, but not declared
翻译 实体""被引用,但没有声明 问题 使用xhtmlrenderer将网页转成PDF时报The entity "nbsp" was referenced, b ...
- Train Problem II (卡特兰数+大数问题)
卡特兰数: Catalan数 原理: 令h(1)=1,h(0)=1,catalan数满足递归式: h(n)= h(1)*h(n-1) + h(2)*h(n-2) + ... + h(n-1)h(1) ...
- Google是如何做测试的?
Google是如何做测试的?(一.二) 导读:本文译自 James Whittaker 在 Google 测试官方博客发表的文章<How Google TestsSoftware >. 在 ...
- kafka&&kafka-manager部署安装
一.zk集群部署 二.kafka部署安装 1.创建kafka用户和日志路径,(直接执行) groupadd kafka useradd -g kafka kafka mkdir -p /web/kaf ...
- How to Write a README on GitHub
最近在寫 GitHub 上的 README,發現這個東西好像每個人的寫法都不太一樣,於是稍微整理了一下自己覺得大概要包含哪些內容. Motivation 顧名思義就是簡介一下為什麼會有這個專案,以及這 ...
- 在博客中显示图片_Mac版
主要是防止自己忘掉 为了解决一开始自己想在写入的博客中添加本地图片,直接链接的话在自己的电脑倒是可以显示图片,但是在别人的电脑上就没办法加载图片了,问各路大神也没人愿意解答,百度也没有想要的答案,只好 ...
- datatables异步获取数据、简单实用
IKC项目总结 一.认证难题管理模块 1. 如何使用datatables进行获取数据内容 datatables简介:Datatables是一款jquery表格插件.它是一个高度灵活的工具,可以将任何H ...
- 渗透之——MSF提权
在WEB渗透中当我们拿到webshell了,我们可以试试用MSF(metasploit)来进行提权,在MSF里meterpreter很强大的! 我们先用msfvenom生成一个EXE的木马后门. ms ...
- 并查集(不相交集)的Union操作
在并查集(不相交集)中附加操作\(Deunion\),它实现的功能是取消最后一次\(Union\)的操作. 实现思想 初始化一个空栈,将每一次的\(Union\)操作的两个集合的根和其值\(Push\ ...
- mac中如何复制拷贝文件或文件夹的路径
copy path in Mac 首先打开 automator(自动操作) 然后 最后command+s保存,命名为copy path. 然后随便找个文件右击,选择服务,再选择 copy path , ...