代码如下:
import pygamepygame.init()
screen = pygame.display.set_mode([640, 480])
screen.fill([255, 255, 255])
pygame.display.flip()while True:pass
前面可以显示一个最简单的白色屏幕内容,但整个窗口无法操作了,是因为我们没有设置窗口的响应事件,一般每个pygame程序都有一个无限循环用来处理各种窗口事件:
while True:for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit(0)
以上代码只是处理了当窗口收到退出事件时,整个程序退出
surface通常是screen
color表示的是颜色,即rgb的值,红色为[255, 0, 0]
center:表示圆心坐标,平面上的坐标通常是两个值,比如窗口中心[320, 240]
radius:表示直径,我们可以指定为100
width:默认为0,表示画的为实心圆,不是0时表示画的是空心圆
surface通常是screen
color表示颜色
rect表示矩形大小,一般为4个值,前两个值表示矩形左上角坐标,第3个值表示矩形宽度,第4个值表示矩形高度, 如[100, 100, 120, 60], 表示坐标为[100, 100]的位置画一个宽度为120,高度为60的长方形
width:与前面的用法一致
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])
解决一组坐标画直线的难题
closed:为True表示假如组成的图形有缺口,则封口,False表示不主动封口
points即为连续的点坐标
还是上面的点,画这个图只需一行代码:
pygame.draw.lines(screen, [0, 255, 0], False, lines)
比如我们利用点画一条直线
代码:
for i in range(50):x = iy = 10 * x + 5pygame.draw.rect(screen, [255, 0, 0], [x, y, 1, 1], width=1)
代码:
for i in range(50):x = iy = 10 * x + 5screen.set_at([x, y], [255, 0, 0])
my_ball = pygame.image.load("beach_ball.png")
screen.blit(my_ball, [x, y])
pygame.draw.rect(screen, [255, 255, 255], [x, y, 90, 90], 0)
screen.blit(my_ball, [x, y])
pygame.time.delay
import sysimport pygamepygame.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 += 10screen.blit(ball, [x, y])pygame.time.delay(100)pygame.display.flip()
"""
显示一个左右弹的球
"""
import sysimport pygamepygame.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 += xspeedy += yspeedif x + 90 > 640:xspeed = -xspeedif x < 0:xspeed = -xspeedif y + 90 > 480:yspeed = -yspeedif y < 0:yspeed = -yspeedscreen.blit(ball, [x, y])pygame.time.delay(100)pygame.display.flip()
"""
显示一个上下左右弹的球
"""
import sysimport pygamepygame.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 += xspeedy += yspeedif x + 90 > 640:xspeed = -xspeedif x < 0:xspeed = -xspeedif y + 90 > 480:yspeed = -yspeedif y < 0:yspeed = -yspeedscreen.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, syspygame.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_speedif x > screen.get_width():x = 0 - 90# 显示图片,每次显示组中的一张,显示完后再显示下一张,依次显示screen.blit(balls[index], [x, y])index += 1if index > 3:index = 0pygame.display.flip()
上一篇:美国知名商界思想家:想要孩子往上走,就别想着给孩子“无悔”的一生 美国知名商界思想家:想要孩子往上走,就别想着给孩子“无悔”的一生
下一篇:315调查|在抖音买的商品拼多多发货,价差5倍!“无货源店铺”收割了谁? 315调查|在抖音买的商品拼多多发货,价差5倍!“无货源店铺”收割了谁?