pygame4 练习课

1 显示一个pygame窗口

1)初始化

2)  设置窗口(缓存)大小

3)将窗口(缓存)中的内容显示出来

代码如下:

import pygame

pygame.init()
screen = pygame.display.set_mode([640, 480])
screen.fill([255, 255, 255])
pygame.display.flip()

while True:
    pass

2 pygame的窗口消息

前面可以显示一个最简单的白色屏幕内容,但整个窗口无法操作了,是因为我们没有设置窗口的响应事件,一般每个pygame程序都有一个无限循环用来处理各种窗口事件:

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

以上代码只是处理了当窗口收到退出事件时,整个程序退出

3 pygame画图

1)画圆:pygame.draw.circle(surface, color, center, radius,width=0)

surface通常是screen

color表示的是颜色,即rgb的值,红色为[255, 0, 0]

center:表示圆心坐标,平面上的坐标通常是两个值,比如窗口中心[320, 240]

radius:表示直径,我们可以指定为100

width:默认为0,表示画的为实心圆,不是0时表示画的是空心圆

2)画矩形:pygame.draw.rect(surface, color, rect, width=0)

surface通常是screen

color表示颜色

rect表示矩形大小,一般为4个值,前两个值表示矩形左上角坐标,第3个值表示矩形宽度,第4个值表示矩形高度, 如[100, 100, 120, 60], 表示坐标为[100, 100]的位置画一个宽度为120,高度为60的长方形

扫描二维码关注公众号,回复: 15055685 查看本文章

width:与前面的用法一致

3) 画一条线段:pygame.draw.line(surface, color, start_pos, end_pos)

start_pos表示起点坐标

end_pos表示终点坐标

示例用4根线段画一个矩形的代码:

lines = [[200, 200], [400, 200], [400, 400], [200, 400], [200, 200]]
for i in range(len(lines)-1):
    pygame.draw.line(screen, [255, 0, 0], lines[i], lines[i+1])

4)画一组线段:pygame.draw.lines(surface, color, closed, points)

解决一组坐标画直线的难题

closed:为True表示假如组成的图形有缺口,则封口,False表示不主动封口

points即为连续的点坐标

还是上面的点,画这个图只需一行代码:

pygame.draw.lines(screen, [0, 255, 0], False, lines)

5)画点有几种方法:

1 利用矩形画点:矩形宽度和高度均为1,width也设为1

比如我们利用点画一条直线

代码:

for i in range(50):
    x = i
    y = 10 * x + 5
    pygame.draw.rect(screen, [255, 0, 0], [x, y, 1, 1], width=1)

2 利用set_at直接改变像素的颜色

代码:

for i in range(50):
    x = i
    y = 10 * x + 5
    screen.set_at([x, y], [255, 0, 0])

4 pygame动画

1、加载图片

my_ball = pygame.image.load("beach_ball.png")

2、显示图片

screen.blit(my_ball, [x, y])

3、动画显示的几个关键点:

1)、擦除之前的图片(覆盖)

pygame.draw.rect(screen, [255, 255, 255], [x, y, 90, 90], 0)

2)、在新位置上显示图片

screen.blit(my_ball, [x, y])

3)、延迟恰当的时间

pygame.time.delay

4、显示动画

1)显示一个简单的动画

import sys

import pygame

pygame.init()
screen = pygame.display.set_mode([640, 480])
screen.fill([255, 255, 255])
ball = pygame.image.load("beach_ball.png")

x = 0
y = 100
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit(0)
    pygame.draw.rect(screen, [255, 255, 255], [x, y, 90, 90])
    x += 10
    screen.blit(ball, [x, y])
    pygame.time.delay(100)
    pygame.display.flip()

2)显示左右弹的动画:

"""
显示一个左右弹的球
"""
import sys

import pygame

pygame.init()
screen = pygame.display.set_mode([640, 480])
screen.fill([255, 255, 255])
ball = pygame.image.load("beach_ball.png")

x = 0
y = 100
xspeed = 10
yspeed = 10
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit(0)
    pygame.draw.rect(screen, [255, 255, 255], [x, y, 90, 90])
    x += xspeed
    y += yspeed
    if x + 90 > 640:
        xspeed = -xspeed
    if x < 0:
        xspeed = -xspeed
    if y + 90 > 480:
        yspeed = -yspeed
    if y < 0:
        yspeed = -yspeed

    screen.blit(ball, [x, y])
    pygame.time.delay(100)
    pygame.display.flip()

3)显示上下左右弹的动画

"""
显示一个上下左右弹的球
"""
import sys

import pygame

pygame.init()
screen = pygame.display.set_mode([640, 480])
screen.fill([255, 255, 255])
ball = pygame.image.load("beach_ball.png")

x = 0
y = 100
xspeed = 10
yspeed = 10
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit(0)
    pygame.draw.rect(screen, [255, 255, 255], [x, y, 90, 90])
    x += xspeed
    y += yspeed
    if x + 90 > 640:
        xspeed = -xspeed
    if x < 0:
        xspeed = -xspeed
    if y + 90 > 480:
        yspeed = -yspeed
    if y < 0:
        yspeed = -yspeed

    screen.blit(ball, [x, y])
    pygame.time.delay(100)
    pygame.display.flip()

4)显示一个翻滚的球的动画

前面球的移动过程一直像是平移的过程,不够真实,实际球在运动过程中应该是翻滚的动作,这时一幅图显示起来就不行了,需要连续的图片依次显示,关键代码如下:

# 加载图片一次加载一组
balls = []
for i in range(4):
    ball = pygame.image.load(f"beach_ball{i}.png")
    balls.append(ball)
# 显示图片,每次显示组中的一张,显示完后再显示下一张,依次显示
screen.blit(balls[index], [x, y])
index += 1
if index > 3:
    index = 0

完整代码:

import pygame, sys

pygame.init()
screen = pygame.display.set_mode([640, 480])
screen.fill([255, 255, 255])
# 加载图片一次加载一组
balls = []
for i in range(4):
    ball = pygame.image.load(f"beach_ball{i}.png")
    balls.append(ball)
x = 50
y = 50
x_speed = 10
index = 0
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()

    pygame.time.delay(100)
    pygame.draw.rect(screen, [255, 255, 255], [x, y, 90, 90])
    x = x + x_speed
    if x > screen.get_width():
        x = 0 - 90
    # 显示图片,每次显示组中的一张,显示完后再显示下一张,依次显示
    screen.blit(balls[index], [x, y])
    index += 1
    if index > 3:
        index = 0
    pygame.display.flip()

猜你喜欢

转载自blog.csdn.net/luhouxiang/article/details/128163197