1、引言
前面的文章中,咱们学习了如何画出一个方块,今天咱们来学习如何让方块运动起来。函数
2、让方块自行移动
咱们将前面文章出现的代码进行修改,咱们将方块的x坐标改为变量x,while循环语句里每次将x的变量值增长5,运行程序后仔细看屏幕,会看到有个红色方块一闪而过(第一次看不清,尝试多运行几回)。这里对前面代码的理解很重要,虽然咱们一直看到的图像是静止的,但实际上每次都是整个屏幕从新被填充成白色(代码SCREEN.fill((255, 255, 255))所作的事情),而后再从新画了个新的矩形(代码pygame.draw.rect(SCREEN, (255, 0, 0), (40, 30, 100, 50))所作的事情)。本节的代码也是相似,在每次循环中x的值都是不同,因此矩形的位置也一直在变化,但因为x的范围很快超过屏幕的坐标,因此后面就看不到红色方块了。oop
import pygame, sys # 初始化 pygame.init() # 设置屏幕的宽度,高度 SCREEN = pygame.display.set_mode((400, 300)) # 设置窗口的标题 pygame.display.set_caption('Hello World!') x = 10 # 游戏主循环 while True: # main game loop for event in pygame.event.get(): # 处理退出事件 if event.type == pygame.QUIT: pygame.quit() sys.exit() # 将屏幕的背景填充成白色,了解下RGB三原色 SCREEN.fill((255, 255, 255)) # 调用 pygame.display.update() 方法更新整个屏幕的显示 x = x + 5 pygame.draw.rect(SCREEN, (255, 0, 0), (x, 30, 100, 50)) pygame.display.update()
为了控制屏幕刷新的速度,咱们在每次屏幕刷新后, 用pygame.time.delay函数进行延时,使程序稍微停一小会,运行后,咱们就能够看到红色方块运行的速度比较慢些。学习
import pygame, sys # 初始化 pygame.init() # 设置屏幕的宽度,高度 SCREEN = pygame.display.set_mode((400, 300)) # 设置窗口的标题 pygame.display.set_caption('Hello World!') x = 10 # 游戏主循环 while True: # main game loop for event in pygame.event.get(): # 处理退出事件 if event.type == pygame.QUIT: pygame.quit() sys.exit() # 将屏幕的背景填充成白色,了解下RGB三原色 SCREEN.fill((255, 255, 255)) # 调用 pygame.display.update() 方法更新整个屏幕的显示 x = x + 5 pygame.draw.rect(SCREEN, (255, 0, 0), (x, 30, 100, 50)) pygame.display.update() pygame.time.delay(50)
pygame.time.delay() 暂停程序一段时间 delay(milliseconds) -> time, delay函数须要给一个int类型参数,表示延时多少毫秒ui
3、让方块来回移动
在上述代码里,目前的方块是永远往右边走的,咱们尝试增长这么个功能,让方块走到右边后,让方块改变方向,往左边走。写/看代码前必定先用本身的话把事情描述清楚,咱们用本身的话描述下要作的事情:code
- 开始后,方块一直在右走
- 走到右边边界后,方块一直在左走 咱们先看如何判断方块走到右边边界,整个屏幕的宽度应该是多少呢?前面的代码pygame.display.set_mode((400, 300))把屏幕的宽度设置为400。因此咱们能够看当x的坐标为400时,方块奇左边恰好跟屏幕右边重叠,咱们认为方块出界,咱们能够用x的坐标是否大于400来判断方块是否走出界。 接着咱们来解决方块向左走的功能。思考下方块向右走跟向左有什么区别?一个是x不断加5,一个是x减5。 咱们能够写成x = x + dx,当向右走时dx为5,当向左时,dx为-5。代码以下:
import pygame, sys # 初始化 pygame.init() # 设置屏幕的宽度,高度 SCREEN = pygame.display.set_mode((400, 300)) # 设置窗口的标题 pygame.display.set_caption('Hello World!') x = 10 dx = 5 # 游戏主循环 while True: # main game loop for event in pygame.event.get(): # 处理退出事件 if event.type == pygame.QUIT: pygame.quit() sys.exit() # 将屏幕的背景填充成白色,了解下RGB三原色 SCREEN.fill((255, 255, 255)) # 调用 pygame.display.update() 方法更新整个屏幕的显示 # 方块恰好走出左屏幕 if x >= 400: dx = -5 x = x + dx pygame.draw.rect(SCREEN, (255, 0, 0), (x, 30, 100, 50)) pygame.display.update() pygame.time.delay(50)
4、 练习题
- 原来的方块是要彻底走出屏幕右边后才反弹,尝试改为方块右边碰到屏幕右边就反弹。
- 目前方块走到左边不会反弹,增长代码,使方块回到左边后,碰到屏幕左边边界反弹往右走。
- 把方块横向运动改为上下移动。