pygame常用代码整理

常用代码整理:
最小游戏系统
显示图片、文字、画线
动画原理、移动和缩放
鼠标键盘事件、按钮点击效果

1、pygame简介:

Pygame最初是由Pete Shinner编写的,该项目于2000年10月启动,六个月后,pygame版本1.0发布。pygame是一个利用SDL(Simple DirectMedia Layer)写就的游戏库。SDL 是一个用于控制多媒体的跨平台C库,与DirectX相当,它已被用于数百种商业和开源游戏。Pete Shinner对Python和SDL两个项目的简洁与优雅印象深刻,他决定将Python和SDL结合起来,组建一个真正利用Python的项目,目标是让做简单的事情变得容易,让困难的事情变简单。

2、最小游戏系统:

import pygame

pygame.init()

win = pygame.display.set_mode((600,400))
pygame.display.set_caption('www.ai8py.com')

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            exit()
# pygame 面向对象最小框架

import pygame

# 全局变量

class MyGame:
    def __init__(self):
        self.__game_init_()
        
    # 游戏初始化
    def __game_init_(self):
        pygame.init()
        window = pygame.display.set_mode((600,400))
        pygame.display.set_caption('www.ai8py.com')
    
    # 游戏开始,事件循环
    def start(self):
        while True:
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    exit()
            pygame.display.update()


if __name__ == '__main__':
    app = MyGame()
    app.start()

3、显示图片:

import pygame

pygame.init()

win = pygame.display.set_mode((600,400))
pygame.display.set_caption('www.ai8py.com')
# 设置背景颜色
win.fill((255,255,255))

# ======================================

# 1.加载图片
image = pygame.image.load('1.jpg')

# 2.渲染图片
# blit(渲染对象,坐标)
win.blit(image,(0,0))

# 3.操作图片
# 1) 获取图片大小
w,h = image.get_size()
# print(w,h)
win.blit(image,(400-w,600-h))
# 2) 旋转和缩放
# scale(缩放对象,目标大小)
new1 = pygame.transform.scale(image,(100,200))
win.blit(new1,(210,0))
# 3) rotozoom(缩放/旋转对象,旋转角度,缩放比例)
new2 = pygame.transform.rotozoom(image,90,1)
win.blit(new2,(0,200))

# 4.刷新显示页面
# flip()                   第一次刷新
# pygame.display.update()  第一次以后的刷新
pygame.display.flip()

# ======================================

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            exit()

4、显示文字:

import pygame

pygame.init()

win = pygame.display.set_mode((600,400))
pygame.display.set_caption('www.ai8py.com')
# 设置背景颜色
win.fill((255,255,255))

# ======================================
# 1、创建字体对象
# Font(字体文件路径,字号)
# font = pygame.font.Font('files/aa.ttf',30)
font = pygame.font.SysFont("arial",30)

# 2、创建文字对象
# render(文字内容,True,文字颜色,背景颜色)
text = font.render('ai8py',True,(255,0,0))

# 3、渲染到窗口上
win.blit(text,(0,0))

# 4、操作文字对象
# 1) 获取大小
w,h = text.get_size()
win.blit(text,(400-w,600-h))

# 2) 缩放和旋转
new_t1 = pygame.transform.scale(text,(200,50))
win.blit(new_t1,(0,60))

new_t2 = pygame.transform.rotozoom(text,90,2)
win.blit(new_t2,(0,120))

# 刷新
pygame.display.flip()
# ======================================

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            exit()

5、画线:

import pygame

pygame.init()

win = pygame.display.set_mode((600,400))
pygame.display.set_caption('www.ai8py.com')
# 设置背景颜色
win.fill((255,255,255))

# ======================================
# 1、画直线
# line(画在哪儿,线的颜色,线的起点,线的终点,线宽=1)
pygame.draw.line(win,(255,0,0,),(10,20),(200,20))

# 2、画折线
# lines(画在哪儿,线的颜色,是否闭合,多个点)
points = [(10,300),(100,160),(180,260),(300,100)]
pygame.draw.lines(win,(0,255,0),True,points,3)

pygame.display.flip()
# ======================================

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            exit()

6、其他图形:

import pygame
from math import pi

pygame.init()

win = pygame.display.set_mode((600,400))
pygame.display.set_caption('www.ai8py.com')
# 设置背景颜色
win.fill((255,255,255))

# ======================================
# 1、画直线
# line(画在哪儿,线的颜色,线的起点,线的终点,线宽=1)
pygame.draw.line(win,(255,0,0,),(10,20),(200,20))

# 2、画折线
# lines(画在哪儿,线的颜色,是否闭合,多个点)
points = [(10,300),(100,160),(180,260),(300,100)]
pygame.draw.lines(win,(0,255,0),True,points,3)

# 3、画圆
# circle(画在哪儿,线的颜色,圆心坐标,半径,线宽=0)
pygame.draw.circle(win,(0,0,255),(200,250),100,2)

# 4、画矩形
# rect(画在哪儿,线的颜色,矩形范围,线宽=0)
pygame.draw.rect(win,(120,20,60),(30,70,100,200),3)

# 5、画椭圆
# ellipse(画在哪儿,线的颜色,矩形范围,线宽=0)
pygame.draw.ellipse(win,(255,0,0),(30,70,100,200),3)

# 6、画弧线
# arc(画在哪儿,线的颜色,矩形范围,起始弧度,终止弧度,线宽=1)
pygame.draw.arc(win,(0,0,0),(30,70,100,200),0,pi/2,4)

pygame.display.flip()
# ======================================

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            exit()

7、动画原理:

Pygame移动就是帧动画,每一帧将移动对象向一个方向移动,移动速度足够快就可以形成动画,下面是PPT模拟。

帖动画

这就是移动的原理,对象也可以向任何方向移动,这就是动画原理

刚才PPT的球对应的每一个页面就是一帧,将图片连接起来称为视频,一般视频再12帧以上才能说是流畅的,一般的视频都是24帧动画,否则太低无法流畅,看到的就是卡的,今天这一讲没什么难的,就是原理,顺便玩玩Scratch,体验一下帧动画

最后说一个软件叫做:ScreenToGIF,很好用,可以录制一个Gif,还可以打开一个现有的GIF,并拆分出每一帧,这不是最重量的GIF工具,但是很强大而且轻便,还能添加字幕





8、移动和缩放动画:

import pygame
from math import pi

pygame.init()

win = pygame.display.set_mode((600,800))
pygame.display.set_caption('www.ai8py.com')
# 设置背景颜色
win.fill((255,255,255))

# ======================================
# 1、显示静态球
y = 100
pygame.draw.circle(win,(255,0,0),(100,y),50)
pygame.display.update()
# ======================================

num = 1
r = 100
while True:
    num += 1
    # 2、移动动画
    #if num % 10 == 0:
        # 覆盖
        #pygame.draw.circle(win,(255,255,255),(100,y),50)
        #y += 1
        #pygame.draw.circle(win,(255,0,0),(100,y),50)
        #pygame.display.update()

    # 3、缩放动画
    if num % 10 == 0:
        pygame.draw.circle(win,(255,255,255),(100,y),r)
        #r += 1
        if r != 0:
            r -= 1
            pygame.draw.circle(win,(255,0,0),(100,y),r)
            pygame.display.update()
    # 检测事件
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            exit()

9、动画的灵活控制:





10、鼠标事件:





11、键盘事件:





12、按钮点击效果:





13、封装好的按钮:





14、坦克控制:




	

发表评论

邮箱地址不会被公开。 必填项已用*标注