pygame游戏背景的移动

文章目录

  • 前文
  • 运行环境
  • 效果
  • 原理
  • 代码实现
    • 垂直移动(背景往上移动)
    • 垂直移动(背景往下移动)
    • 水平移动(左)
    • 水平移动(右)
  • 结尾

前文

本文价绍用pygame实现背景的移动。游戏背景移动,如跑跑卡丁车、飞翔的小鸟等游戏,游戏背景移动带来的效果,相当于游戏人物一直在前进,而没有原地踏步。今天就带大家来实现一下。

运行环境

编译器:PyCharm 2021.2.1
解释器:Anaconda 3.8
安装模块
pip install pygame

效果

游戏背景移动效果

原理

背景移动的原理很简单,就是将将两张相同的图片紧紧的贴在一起,朝同一个方向移动,如第一张图片铺满整个屏幕,第二张图片在第一张图片的后面(屏幕中看不到),第一张图片往上移动,第二张图片就紧紧跟着移动。当第一张图片超过了屏幕的高度时,又重新回到屏幕的底部,如此反复就达到了游戏背景的移动。

代码实现

垂直移动(背景往上移动)

import pygame
import syspygame.init()class Background():def __init__(self):self.bgimage = pygame.image.load('background.png')self.rectBGimg = self.bgimage.get_rect()# 游戏画面左上角坐标self.bgY1 = 0self.bgX1 = 0# 游戏画面左下角坐标self.bgY2 = self.rectBGimg.heightself.bgX2 = 0# 画面移动速度self.moving_speed = 0.05# 更新坐标def update(self):self.bgY1 -= self.moving_speedself.bgY2 -= self.moving_speedif self.bgY1 <= -self.rectBGimg.height:self.bgY1 = self.rectBGimg.heightif self.bgY2 <= -self.rectBGimg.height:self.bgY2 = self.rectBGimg.height# 绘制背景图片def render(self):DISPLAYSURF.blit(self.bgimage, (self.bgX1, self.bgY1))DISPLAYSURF.blit(self.bgimage, (self.bgX2, self.bgY2))background = Background()
DISPLAYSURF = pygame.display.set_mode((512, 768))
while True:for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()sys.exit()background.render()background.update()pygame.display.update()

首先我们先初始化函数,并用pygame.image.load方法读取图片,再用get_rect()获取矩形对象。再定义两组坐标,分别为游戏画面的左上角坐标,游戏画面的左下角坐标。最后我们再定义一个背景的移动速度self.moving_speed,如果你希望加快移动速度,可以将它的值调大一点。

def __init__(self):# 读取图片self.bgimage = pygame.image.load('background.png')self.rectBGimg = self.bgimage.get_rect()# 游戏画面左上角坐标self.bgY1 = 0self.bgX1 = 0# 游戏画面左下角坐标self.bgY2 = self.rectBGimg.heightself.bgX2 = 0# 画面移动速度self.moving_speed = 0.05

update()方法是用来更新坐标,self.bgY1和self.bgY2不断减去移动速度,改变了两个点坐标,背景图片将往上移动,后面的俩个if语句保证俩个变量的值不能超过屏幕本身的高度,如果超过了就重新赋值,让图片回到屏幕的底部。保证游戏背景的持续移动。

 def update(self):self.bgY1 -= self.moving_speedself.bgY2 -= self.moving_speedif self.bgY1 <= -self.rectBGimg.height:self.bgY1 = self.rectBGimg.heightif self.bgY2 <= -self.rectBGimg.height:self.bgY2 = self.rectBGimg.height

最后将俩张图片绘制到游戏屏幕上。

 def render(self):DISPLAYSURF.blit(self.bgimage, (self.bgX1, self.bgY1))DISPLAYSURF.blit(self.bgimage, (self.bgX2, self.bgY2))

垂直移动(背景往下移动)

游戏背景向下移动

import pygame
import syspygame.init()class Background():def __init__(self):self.bgimage = pygame.image.load('background.png')self.rectBGimg = self.bgimage.get_rect()# 第一组坐标self.bgY1 = -self.rectBGimg.heightself.bgX1 = 0# 第二组坐标self.bgY2 = 0self.bgX2 = 0# 画面移动速度self.moving_speed = 0.05# 更新def update(self):self.bgY1 += self.moving_speedself.bgY2 += self.moving_speed# 超过原来了就回到原来if self.bgY1 >= self.rectBGimg.height:self.bgY1 = -self.rectBGimg.heightif self.bgY2 >= self.rectBGimg.height:self.bgY2 = -self.rectBGimg.height# 绘制背景图片def render(self):DISPLAYSURF.blit(self.bgimage, (self.bgX1, self.bgY1))DISPLAYSURF.blit(self.bgimage, (self.bgX2, self.bgY2))background = Background()
DISPLAYSURF = pygame.display.set_mode((512, 768))
while True:for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()sys.exit()background.render()background.update()pygame.display.update()

水平移动(左)

游戏背景向左移动

import pygame
import syspygame.init()class Background():def __init__(self):self.bgimage = pygame.image.load('background.png')self.rectBGimg = self.bgimage.get_rect()self.bgY1 = 0self.bgX1 = 0self.bgY2 = 0self.bgX2 = self.rectBGimg.width# 画面移动速度self.moving_speed = 0.05# 更新def update(self):self.bgX1 -= self.moving_speedself.bgX2 -= self.moving_speedif self.bgX1 <= -self.rectBGimg.width:self.bgX1 = self.rectBGimg.widthif self.bgX2 <= -self.rectBGimg.width:self.bgX2 = self.rectBGimg.width# 绘制背景图片def render(self):DISPLAYSURF.blit(self.bgimage, (self.bgX1, self.bgY1))DISPLAYSURF.blit(self.bgimage, (self.bgX2, self.bgY2))background = Background()
DISPLAYSURF = pygame.display.set_mode((512, 768))
while True:for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()sys.exit()background.render()background.update()pygame.display.update()

水平移动(右)

游戏背景向右移动

import pygame
import syspygame.init()class Background():def __init__(self):self.bgimage = pygame.image.load('background.png')self.rectBGimg = self.bgimage.get_rect()self.bgY1 = 0self.bgX1 = -self.rectBGimg.widthself.bgY2 = 0self.bgX2 = 0# 画面移动速度self.moving_speed = 0.05# 更新def update(self):self.bgX1 += self.moving_speedself.bgX2 += self.moving_speedif self.bgX1 >= self.rectBGimg.width:self.bgX1 = -self.rectBGimg.widthif self.bgX2 >= self.rectBGimg.width:self.bgX2 = -self.rectBGimg.width# 绘制背景图片def render(self):DISPLAYSURF.blit(self.bgimage, (self.bgX1, self.bgY1))DISPLAYSURF.blit(self.bgimage, (self.bgX2, self.bgY2))background = Background()
DISPLAYSURF = pygame.display.set_mode((512, 768))
while True:for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()sys.exit()background.render()background.update()pygame.display.update()

结尾

文章到此就结束了,主要介绍了pygame实现游戏背景的移动,最后再说几句,终有时,我们也会像那位登高望远的诗人一样,站在高处,俯视下方的一切,尽情享受那份自由与无邪。但不管我们站在哪个角度,重要的是我们要时刻保持朴素与谦卑!
——————2023.8.23 13.11

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/49961.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于灵动微MM32F3270微控制器的监护仪

监护仪是各类医用电子仪器中应用极为普遍的一种。监护仪不仅可以提高护理工作的效率&#xff0c;更重要的是&#xff0c;它为更全面、更准确的掌握患者病情&#xff0c;提高医疗服务质量提供了更可靠的保障。 基于灵动微MM32F3270微控制器的监护仪&#xff1a; -信号采集&…

【Java 动态数据统计图】动态数据统计思路Demo(动态,排序,containsKey)三(115)

上代码&#xff1a; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map;public class day10 {public static void main(String[] args) {List<Map<String,O…

神经网络基础-神经网络补充概念-61-单层卷积网络

概念 单层卷积网络是一种简单的神经网络结构&#xff0c;它仅包含一个卷积层&#xff0c;通常紧跟着一个激活函数以及可能的池化层和全连接层。这种结构可以用来提取输入数据的特征&#xff0c;适用于一些简单的任务。 代码实现 import tensorflow as tf# 创建一个卷积层 co…

Fabric.js 元素选中状态的事件与样式

本文简介 带尬猴&#xff01; 你是否在使用 Fabric.js 时希望能在选中元素后自定义元素样式或选框&#xff08;控制角和辅助线&#xff09;的样式&#xff1f; 如果是的话&#xff0c;可以放心往下读。 本文将手把脚和你一起过一遍 Fabric.js 在对象元素选中后常用的样式设置…

PyQt5 多线程和异步刷新UI

文章目录 一、基础程序二、Thread方式一方式二三、信号机制四、UI刷新五、moveToThread异步刷新UI一、基础程序 以下简介一个基本的PyQt程序。 需要导入的类主要来自三个包from PyQt5.QtWidgets import 常用的控件PyQt5.QtCore 核心功能类,如QT,QThread,pyqtSignalPyQt5.QtG…

Java IO流(五)Netty实战[TCP|Http|心跳检测|Websocket]

Netty入门代码示例(基于TCP服务) Server端 package com.bierce.io.netty.simple; import io.netty.bootstrap.ServerBootstrap; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import io.netty.channel.*; import io.netty.channel.nio.NioEventLoopGro…

激活函数总结(十七):激活函数补充(PELU、Phish)

激活函数总结&#xff08;十七&#xff09;&#xff1a;激活函数补充 1 引言2 激活函数2.1 Parametric Exponential Linear Unit&#xff08;PELU&#xff09;激活函数2.2 Phish激活函数 3. 总结 1 引言 在前面的文章中已经介绍了介绍了一系列激活函数 (Sigmoid、Tanh、ReLU、…

软考高级系统架构设计师系列论文八十二:论软件的可维护性设计

软考高级系统架构设计师系列论文八十二:论软件的可维护性设计 一、摘要二、正文三、总结一、摘要 随着软件大型化,复杂化的发展,软件维护所耗费的资源越来越多,软件可维护性设计日益得到重视。我单位近几年开发综合业务 ATM交换机,用户对交换机的可维护性要求很高。我参加…

自平衡性:保持数据结构稳定的关键

自平衡性是一种重要的数据结构属性&#xff0c;它确保在执行插入、删除等操作后&#xff0c;数据结构能够自动进行调整&#xff0c;以保持整体的平衡状态。平衡的数据结构可以提供更快的操作性能&#xff0c;避免极端情况下的低效操作&#xff0c;同时保持树或其他结构的整体稳…

Idea Maven 构建,运行Java程序,二次开发Jmeter

Idea Maven 构建 1. maven下载2. Idea 配置3. 配置Maven镜像4. 在Maven项目pom.xml中添加依赖5. 创建jar包&#xff0c;更新pom&#xff0c;执行代码 1. maven下载 【官网】https://maven.apache.org/download.cgi 【其他版本】https://dlcdn.apache.org/maven/maven-3/ 2. …

KubeSphere 社区双周报 | Java functions framework 支持 SkyWalking | 2023.8.4-8.17

KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书、新增的讲师证书以及两周内提交过 commit 的贡献者&#xff0c;并对近期重要的 PR 进行解析&#xff0c;同时还包含了线上/线下活动和布道推广等一系列社区动态。 本次双周报涵盖时间为&#xff1a;2023.08.04-2023.…

Ubuntu18.04安装编译ffmpeg库

0、安装相关依赖库 sudo apt-get update && sudo apt-get -y install \autoconf \automake \build-essential \cmake \git-core \libass-dev \libfreetype6-dev \libgnutls28-dev \libmp3lame-dev \libsdl2-dev \libtool \libva-dev \libvdpau-dev \libvorbis-dev \li…

PHP 高德地图,获取经纬度

function addresstolatlag($address){$abc "xxx学校(xx路店)";$key"24fb21b484f89f212dc3f4fd016e2b4d";//没有key$address $abc;$regeo_url"https://restapi.amap.com/v3/geocode/geo";$address_location$regeo_url."?outputJSON&a…

Vant 4.6.4发布,增加了一些新功能,并修复了一些bug

导读Vant 4.6.4发布,增加了一些新功能&#xff0c;并修复了一些bug等。 新功能 feat(area-data): 更新芜湖的县区数据&#xff0c;由 nivin-studio 在 #12122 中贡献feat(Locale): 添加塞尔维亚语到国际化&#xff0c;由 RogerZXY 在 #12145 中贡献feat(ImagePreview): 添加 c…

matlab使用教程(22)—非线性优化函数的设置

1.设置优化选项 可以使用由 optimset 函数创建的 options 结构体来指定优化参数。然后&#xff0c;可以将 options 作为输入传递给优化函数&#xff0c;例如&#xff0c;通过使用以下语法调用 fminbnd x fminbnd(fun,x1,x2,options) 或使用以下语法调用 fminsearch x f…

C#与西门子PLC1500的ModbusTcp服务器通信4--搭建ModbusTcp客户端

1、客户端选择 客户端可以是一个程序或一个设备&#xff0c;这里我以C#WINFORM程序来实现客户机与PLC的Modbustcp服务器通信&#xff0c;开发环境是VS2019&#xff0c;.NET Framework版本是4.7.2 2、创建winform程序 3、引入Nmodbus4协议 找到项目&#xff0c;找到引用&…

[k8s] 基于ubuntu22部署k8s1.28记录

k8s1.28部署已经不依赖docker了&#xff0c;所以不需要安装docker。同理&#xff1a;如果想查看镜像和运行容器&#xff0c;也不能用docker命令去查询了&#xff1a;需要使用crictl。不过crictl命令参数兼容docker&#xff0c;所以使用上手没有啥难度。 1. 配置安装源 根据k8…

IntelliJ IDEA maven配置,设置pom.xml的配置文件

IntelliJ IDEA项目&#xff0c;选择 文件 设置&#xff0c;弹窗 构建、执行、部署 构建工具 Maven就可以 maven配置好以后&#xff0c;在pom.xml的配置文件中就可以设置对应的jar包了&#xff0c;这样构建的时候自动需要的jar&#xff0c;在项目中导入即 需要的jar包设置在po…

大数据Flink(六十六):Flink的重要概念和小结

文章目录 Flink的重要概念和小结 一、​​​​​​​​​​​​​​数据流图(Dataflow Graph)

软考高级系统架构设计师系列论文七十二:论虚拟现实技术的应用与发展

软考高级系统架构设计师系列论文七十二:论虚拟现实技术的应用与发展 一、摘要二、正文三、总结一、摘要 本文介绍了虚拟现实技术的主要技术和应用,并结合作者本人参加的国家重点实验室的自然科学基金项目,重点讨论了基于图像的建模与绘制在虚拟现实中的重要地位与应用,详细…