pygame移动图形
上篇说到绘制图形,今天我们把绘制的图形进行移动!
说起移动图形,我们需要了解下相关的知识!
绘制的参数里面第一个是绘制的 “表面”;
水平是X轴,
垂直是Y轴,
这个“表面”我们可以当做一个画布,我们在上面绘制我们需要的形状;
绘制完成后,我们更新下画板图像就展现在我们面前了。
要我们图像动起来,那么就一次次的绘制我们想要移动的图形,并且更新画面就可以了!
我们想象中的效果:
但是 如果我们只是在pygame中重新移动方块则实际效果不是我们看到的效果。
其实就是我们在绘制一个一个的方块,并没有清除上一个方块,这样就形成了图上我们看到的场景。
就如下图,绘制一个个方块,原来的方块还在。
怎么解决这个问题呢?
我们都见过这样的翻页画。
在一张新的纸上绘制与上一张不一样的画面,然后我们翻动纸张,那样画面就动了起来;那在我们pygame上,我们也在一张新的纸上绘制不就可以了吗?
# 定义的画布对象,中使用fill方法绘制新的背景screen.fill((255,255,255)) # 传递背景颜色的参数
再次运行就达到我们要的效果了!
我们还有个事情考虑下,就是我们看翻页画的时候看到纸张一页一页的翻动,在pygame里面也可以指定翻页的速度!
这个速度在动态效果里面的单位是‘帧’;
所谓的‘帧’就是在1秒内我们翻动了多少页纸,
帧率越大,我们看到方块移动的速度就越快,反之就越慢。
定义刷新的帧率:
# 定义频率clock = pygame.time.Clock()
然后我们在循环事件中设置刷新的帧率:
# 设定刷新帧率clock.tick(60) # 越大刷新的越快
说了上面这么多话,到底怎么移动呢?
其实,我们在绘制的时候使用一个变量,放在绘制的图形参数内。
每次对变量进行操作就可以让形状动起来!
绘制的图形,会返回一个 rect(x轴,Y轴,宽,高)
我们可以接收这个参数,来获取绘制图形的位置,来进行重新绘制移动的方向或者大小!
有了这些知识,我们就可以让形状简单的动起来了。
全部代码:
import pygame
def rungame(): # 分辨率 800 * 600 win = (100, 100)
# 一般情况我们都只是设置一个固定大小的窗口 screen = pygame.display.set_mode(win) # 设置当前窗口标题 pygame.display.set_caption('绘制基础图像!') # 设置窗口的背景色 screen.fill((255, 255, 255)) # 设置游戏时钟 clock = pygame.time.Clock()
x, y = 0, 0 # 方块的起点 width, height = 20, 20 # 方块的宽,高
print(screen)
# b = pygame.draw.rect(screen, (0,255,0), [20, 20, 20, 20], 0) # 开启一个事件循环处理发生的事件 while True: clock.tick(60) # 从消息队列中获取事件并对事件进行处理 for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() exit(0) # 重绘背景 screen.fill((255,255,255))
# 画方块 a = pygame.draw.rect(screen, (255,0,0), (x, y, width, height)) print(a) # print(a.x, a.y) if a.x + a.size[0] < 100 and a.y == 0: # 方块右移 x += 1 # y += 1 elif a.y + a.size[1] < 100 and a.x + a.size[0] == 100: # 方块下移 y += 1 elif a.y + a.size[1] == 100 and a.x > 0: # 方块左移 x -= 1 elif a.y > 0 and a.x == 0: y -= 1
pygame.display.update()
# clock.
def main(): # 初始化导入的pygame中的模块 pygame.init() rungame()
if __name__ == "__main__": main()