pygame教程实例(一)小球弹跳

本教程使用python3

推荐一个python基础教程


1.导入pygame

import pygame
import os

如果你没有安装pygame

  • 使用pip安装:pip3 install pygame

  • 或使用国内镜像:

pip3 install pygame -i https://mirrors.aliyun.com/pypi/simple


2.创建pygame窗体

1.我们先定义一些必要的全局变量

WINDOW_W, WINDOW_H = 640, 480  # 窗体尺寸
FPS = 50  # 帧率,即每秒刷新多少次
g = 9.8 * 100  # 重力加速度(我们用的单位是像素每二次方秒)

2.创建窗体

pygame.init()  # 初始化pygame
# 设置窗口出现的位置
os.environ['SDL_VIDEO_WINDOW_POS'] = "%d,%d" % (200,100)
# 创建一个窗口
screen = pygame.display.set_mode((WINDOW_W, WINDOW_H), pygame.DOUBLEBUF, 32)
# 设置窗口标题
pygame.display.set_caption("hello,world!")
# 创建时钟对象 (可以控制游戏循环频率)
clock = pygame.time.Clock()
  • set_mode(resolution=(0,0), flags=0, depth=0)
    • resolution:窗体的宽和高

    • flags:附件选项的集合

      选项含义
      pygame.FULLSCREEN全屏显示
      pygame.DOUBLEBUF双缓冲模式(推荐和 HWSURFACE 或 OPENGL 一起使用)
      pygame.HWSURFACE硬件加速,只有在 FULLSCREEN 下可以使用
      pygame.OPENGL创建一个 OPENGL 渲染的显示
      pygame.RESIZABLE创建一个可调整尺寸的窗口
      pygame.NOFRAME创建一个没有边框和控制按钮的窗口
    • depth:使用的颜色深度

  • 更多pygame.display模块介绍见https://fishc.com.cn/thread-62164-1-1.html

3.游戏主循环

if __name__ == '__main__':
    x, y = WINDOW_W/2, 10   # 球的坐标
    vx, vy = 0, 0  # 球在x,y方向上的速度
    # 游戏主循环
    while True:
        # 遍历事件
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                # 接收到退出事件后退出程序
                exit()

        # 小球下一时刻的速度、位置计算
        vy += g * 1/FPS
        x += vx * 1/FPS
        y += vy * 1/FPS
        if y >= WINDOW_H-10:
            # 到达地面则是其竖直速度反向
            vy = -vy

        # 将背景图画上去(0,0,0)为RGB颜色
        screen.fill((0, 0, 0))
        # 根据球的坐标画圆
        pygame.draw.circle(screen, (255, 0, 0), (int(x), int(y)), 10)

        # 刷新画面
        pygame.display.update()
        # 设置FPS
        time_passed = clock.tick(FPS)

我们使用while True 来不断循环,每次循环都做三件事:响应事件、计算下一时刻状态、重画画面。

4.最终效果

这个gif看起来很卡,实际上运行很流畅
球.gif
下一篇:pygame教程实例(二)模拟三体

已标记关键词 清除标记
相关推荐
pygame实现的2d弹珠游戏. 主要框架如下图所示: Client 程序入口,从这里开始游戏。 resource 图片字体等资源 GameCtrl Gamelogic 对游戏的数据进行控制,例如球的下一个位置,是否发生碰撞,速度如何。 主要接口: update():对游戏数据更新,下一次Section的回调就知道应该在什么位置绘图 logic_start(): 游戏开始或者重新开始的时候初始化数据。 logic_end(): 游戏重新开始的时候销毁以前数据 save () : 保存游戏数据到文件,下次可以继续接着玩 load(): 读取文件信息, 重新开始上次的游戏 主要类: Ball(): 对球的数据和操作封装 Brick(): 对砖的行为封装 CtrlBar(): 对玩家控制的Bar进行封装 BrickCreator(): 对砖块的生成进行封装 GameCtrl 对游戏输入,控制调用Section。 主要接口: add_section(): 加入新的section,绘制新的东西 goto_section():被触发,游戏转移到绘制另一个section中,例如在游戏中鼠标右键,触发到一个右键界面出现。 start_main_loop(): 游戏的主循环 Section GameSection(): 定义所有Section的超类 主要接口: handle_key(): 处理用户键盘输入接口 handle_mouse(): 处理用户鼠标输入接口 update(): 从logic中获取更新的数据,用来下一步的绘图 render(): 根据所拥有的image等资源,绘制图像 menu Section:从GameSection继承,定义进入游戏的界面及按键行为。 主要函数: Render(): 画出menu ball section(): 游戏的主要的Section,绘制游戏过程中的元素 主要函数: update(): 从Logic中获取数据,用来绘图 render(): 绘图 handle(): 处理用户输入。
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页