系列文章目录

一、Pygame的安装与项目规划

二、开始游戏项目:创建pygame窗口及响应用户输入

三、开始游戏项目:设置背景色和创建设置类


目录

系列文章目录

前言

添加飞船图像

创建ship类

Pygame.surface模块

1.1rect属性

1.2get_rect( )方法

1.3blit()方法

在屏幕上绘制飞船



前言

现在我们可以在屏幕上添加新的元素了,比如飞船,那么肯定要有飞船的图像、大小、等等,我们或许要设置两种飞船比如外星飞船或我方飞船,那么这就需要创建一个ship类来进行定义。


添加飞船图像

下面将飞船加入游戏中。为了在屏幕上绘制玩家的飞船,我们将加载一幅图像,再使用Pygame方法blit( )绘制它。

在游戏中,我们可以使用所认识的许多类型的图像文件,但是使用位图(.bmp格式)文件最为简单,因为Pygame默认加载位图。虽然可配置Pygame以使用其他文件类型,但有些文件类型要求你在计算机上安装相应的图像库。

选择图像时,我们要特别注意背景色。请尽可能选择背景为透明或者与图片颜色兼容的图像,便于使用图像编辑器将其背景替换为任意颜色。

在我们游戏《飞机大战》中,可以使用某bmp图片,该文件需要我们在项目文件夹中新建一个名为images的文件夹并且放入以便于我们使用。

创建ship类

选择用于表示飞船的图像后,我们需要将其显示到屏幕上。我们创建一个名为ship的模块,其中包含Ship类,负责管理飞船的大部分行为。

import pygame
class ship:"""管理飞船的类"""def __init__(self,ai_game):"""初始化飞船并设置其初始位置"""self.screen = ai_game.screenself.screen_rect = ai_game.screen.get_rect()#加载飞船图像并获取其外界矩形self.image = pygame.image.load('images/ship.bmp')self.rect = self.image.get_rect()#对于每搜新飞船,都将其放在屏幕底部的中央self.rect.midbottom = self.screen_rect.midbottomdef blitme(self):"""在指定位置绘制飞船"""self.screen.blit(self.image,self.rect)

Pygame之所以高效,是因为它让你能够像处理矩形(rect对象)一样处理所有的游戏元素,即便其形状并非矩形。像处理矩形一样处理游戏元素之所以高校,是因为矩形是简单的几何形状。

例如,通过将游戏元素视为矩形,Pygame能够更快的判断出它们是否发生了碰撞。

定义这个类之前,我们导入了模块pygame。ship的方法__init__( )接受两个参数:引入self和指向当前AlienInvasion实例的引用。折让ship能够访问AlienInvasion 中定义的所有的游戏资源。

self.screen定义赋予(self.screen = ai_game.screen处)了ship的一个属性,以便于在这个类的所有方法中轻松访问。

以下将会介绍上述代码所用到的方法:

Pygame.surface模块

1.1rect属性

可以参考本人的另外一篇文章:Pygame中rect的参数属性讲解——两分钟学会它

1.2get_rect( )方法

可以参考本人的另外一篇文章:Pygame中get_rect( )方法——一首歌的时间学会

1.3blit()方法

可以参考本人的另外一篇文章:pygame中blit方法

在屏幕上绘制飞船

下面更新alien_invasion.py,创建一艘飞船并且调用其方法blitme( ):

import sys
from settings import Settings
from ship import Ship
import pygame
class AlienInvasion:"""管理游戏资源和行为的类"""def __init__(self):"""初始化游戏并创建游戏资源"""pygame.init()self.settings = Settings()self.screen = pygame.display.set_mode((self.settings.screen_width, self.settings.screen_height))pygame.display.set_caption("ALien Invasion")self.ship = Ship(self)#设置背景色self.bg_color = (230, 230, 230)def run_game(self):"""开始游戏的主循环"""while True:self._check_events()self._update_screen()def _check_events(self):"""响应鼠标和按键事件"""for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit()def _update_screen(self):"""让最近绘制的屏幕可见"""self.screen.fill(self.settings.bg_color)self.ship.blitme()pygame.display.flip()if __name__ == '__main__':#创建游戏实例并运行游戏ai = AlienInvasion()ai.run_game()

添加飞船图像:创建ship类与在屏幕上绘制飞船相关推荐

  1. Python小游戏——外星人入侵(保姆级教程)第一章 03设置飞船图片 04创建Ship类

    系列文章目录 第一章:武装飞船 03:设置飞船图片 04:创建Ship类--管理飞船行为的类 目录 系列文章目录 第一章:武装飞船 03:设置飞船图片 04:创建Ship类--管理飞船行为的类 一.设 ...

  2. 12-1 蓝色天空 : 创建一个背景为蓝色的Pygame窗口 12-2 游戏角色 : 找一幅你喜欢的游戏角色位图图像或将一幅图像转换为位图。 创建一个类, 将该角色绘制到屏幕中央, 并将该图像的背景色

    12-1 蓝色天空 : 创建一个背景为蓝色的Pygame窗口 import sys import pygame def run_game():pygame.init()screen = pygame. ...

  3. 使用Python,OpenCV加载图像并将其显示在屏幕上?

    这篇博客展示了如何使用OpenCV从磁盘上读取图像,在屏幕上显示它,然后等待按键关闭窗口并终止脚本. cv2.imread() cv2.imwrite() cv2.imshow() cv2.imrea ...

  4. python实战游戏开发——添加飞船图像

    1.创建Ship类 import pygame # -*- coding: utf-8 -*- class Ship():       def __init__(self,screen):       ...

  5. python外星人入侵游戏rect报错_Python外星人入侵游戏开发—添加飞船图像

    用法分析 下面将飞船加入到游戏中.为了在屏幕上绘制玩家的飞船,我们将加载一幅图像,再使用Pygame方法blit() 绘制它. 选择用于表示飞船的图像后,需要将其显示到屏幕上.我们将创建一个名为shi ...

  6. 使用Python元类(metaclass)创建Python类

    Python类的定义再简单不过了.不过你有想过动态定义一个Python类吗?What?动态定义,是动态解析Python代码吗?不,这仍然是静态定义.我是说,干预类的创建过程,在类的创建过程中,对类中的 ...

  7. python外星人入侵飞船上下移动_Python 项目练习1 外星人入侵(武装飞船)

    Python 项目练习1 外星人入侵(武装飞船) 2020年07月30日 | 萬仟网IT编程 | 我要评论 本项目具体步骤在书本<Python编程:从入门到实践>第十二章中安装pygame ...

  8. java制作风车图像的main方法_创意图形的绘制 会转的风车

    要想绘制图形,就会用到Graphics类,Graphics类是所有图形上下文的抽象基类,允许应用程序在组件(已经在各种设备上实现)以及闭屏图像上进行绘制. 首先我们应该声明一个Graphics的变量, ...

  9. 图像绘制到屏幕上的原理。

    转载文章: 文章原地址:http://objccn.io/issue-3-1/ 一个像素是如何绘制到屏幕上去的?有很多种方式将一些东西映射到显示屏上,他们需要调用不同的框架.许多功能和方法的结合体.这 ...

最新文章

  1. hibernate和jdbc的优缺点,概述
  2. 推荐几款热门的敏捷开发工具
  3. IntelliJ IDEA 设置代码检查级别
  4. C语言当中int,float,double,char这四个有什么区别?
  5. 50 - 算法- LeetCode 104 -二叉树
  6. 【心灵鸡汤】谁的青春不迷茫
  7. php函数讲解,php函数进阶讲解
  8. 【Pytorch神经网络理论篇】 40 Transformers中的词表工具Tokenizer
  9. Java实习生的标准是什么
  10. SAP SHIFT语法注意
  11. 中软防水坝 怎么卸载_卸载中软防水墙软件
  12. 巴菲特致股东的一封信:1990年
  13. 不喜欢学计算机专业怎么办,录取到不喜欢的专业怎么办?说说我有所不同的“转系生活”...
  14. OSS(一):OSS工具类
  15. 鸿蒙大陆罪恶深渊哪里出,库库马力
  16. 【Spring Security】Spring Boot + Spring Security 实现自动登录功能
  17. 英语NLP词汇类别列表
  18. 安卓8.1系统SDK去掉系统设置中的自动调节亮度
  19. 快速提高点击率的办法
  20. 什么是ftp,什么是ftp?以及具体使用教程

热门文章

  1. KMeans聚类 K值的确定以及初始类簇中心点的选取
  2. js中的遍历和jquery中的遍历
  3. 3D坐标系、矩阵变换、视景体与裁剪
  4. 带你薅“云”羊毛:定个小目标,先薅他一年
  5. 基于云开发创建(小程序云商城,基本页面的创建及动态代码的编写)
  6. HTML 渲染组件出错,这个问题可以通过安装某个缺失组件来解决。您是否想要了解详细信息? 的解决办法
  7. 用Arcgis生成Shp的Xml格式
  8. macOS 开发 - XPC
  9. 计算机课程设计局域网广域网,计算机网络课程设计报告组建小区局域网
  10. 牛刀:房价泡沫的破灭只是人性的回归