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

 28 2019-09-03 11:20:59 字数 1445 阅读 28 评论 0 喜欢 0

下一篇:pygame教程实例(二)模拟三体


本教程使用python3

推荐一个python基础教程


1.导入pygame

import pygame
import os

如果你没有安装pygame


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

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教程实例(二)模拟三体

喜欢 0

发表我的评论

Hi,您需要填写昵称和邮箱!

  • 必填项

网友评论0