小甲鱼python系列pygame----pygame介绍

pygame功能

  1. 绘制图形
  2. 显示图片
  3. 实现动画效果
  4. 与键盘、鼠标、游戏手柄这些外设交互
  5. 播放声音
  6. 碰撞检测

前提

首先为了方便理解首先要搞清楚几点问题。

  1. 什么是Surface对象?
    Surface对象就是pygame里面用来表示图像的对象。

  2. 将一个图像绘制到另一个图像上是怎么一回事?
    pygame里并不是将一个图像复制到另一个图像上,这里我们分为目标图像A和画布B,实际上是将画布B上一个矩形范围的颜色变成图像A的颜色,这样就像是A覆盖到了B上。

  3. 移动图像是怎么一回事?
    图像的移动涉及到一个概念:帧。通常一副图像指一帧,帧率就是一秒钟切换多少图像。
    移动图像分三步理解:
    第一步,将要移动的目标图像A的矩形移动到目的位置。
    第二步,刷新画布,再将目的位置的矩形填充为A的颜色。(此步在内存中进行)
    第三步,将内存中做好的图片展示。
    以上三步完成一帧变换,帧率高了以后就是图像的移动。

  4. 如何控制游戏的速度?
    可以通过time模块设置帧率。

  5. pygame的效率高不高?
    python简洁却效率不高,但是pygame里面许多模块是C语言编写优化的,可达到40~200帧,一般30帧是可接受的流畅度。

代码

import pygame
import sys #退出程序需要

#初始化pygame
pygame.init()

clock = pygame.time.Clock()
size =  (width,height) = (600,400)
#一帧移动速度
speed = [2,1]
#三原色值都为255时为白色
bg = (255,255,255)

#设置窗口为size大小,返回的是Surface对象
screen = pygame.display.set_mode(size)
#设置窗口标题
pygame.display.set_caption("小乌龟")

#加载图片,返回的是Surface对象
turtle = pygame.image.load("turtle.jpg")
#获得图像位置矩形
position = turtle.get_rect()

while True:
        #事件循环
        for event in pygame.event.get():
                #如果事件为点了窗口的关闭
                if event.type ==pygame.QUIT:
                        sys.exit()

        #以speed速度移动图像
        position = position.move(speed)

        #如果位置矩形左右碰到边界
        if position.left < 0 or position.right > width:
                #图像水平方向翻转,垂直方向不变
                turtle = pygame.transform.flip(turtle,True,False)
                #反方向移动,碰到左边界往右移动,碰到右边界往左移动
                speed[0] = -speed[0]

        #如果位置矩形上下碰到边界
        if position.top < 0 or position.bottom > height:
                #反方向移动就行了
                speed[1] = -speed[1]

        #填充背景
        screen.fill(bg)
        #绘制图像,此步和上一步在内存中完成,图做出来后再贴出来
        screen.blit(turtle,position)
        #更新界面
        pygame.display.flip()
        #帧切换延迟10毫秒
        #pygame.time.delay(10)
        #帧率不高于100帧
        clock.tick(100)

注意:这里有的小伙伴可能会有问题,要把准备好的素材turtle.jpg和py文件放在一个文件夹里。

效果图

在这里插入图片描述

改进

添加事件功能,实现键盘控制小乌龟。
在开头添加语句from pygame.locals import *,引用pygame所有变量
并在事件循环中添加以下代码

                #如果事件为按键盘
                if event.type == pygame.KEYDOWN:
                        if event.key == K_LEFT:
                                speed = [-1,0]
                                turtle = l_head
                        if event.key == K_RIGHT:
                                speed = [1,0]
                                turtle = r_head
                        if event.key == K_UP:
                                speed = [0,-1]
                        if event.key == K_DOWN:
                                speed = [0,1]
发布了49 篇原创文章 · 获赞 6 · 访问量 3687

猜你喜欢

转载自blog.csdn.net/weixin_46097280/article/details/104418839
今日推荐