Python pygame-Ball Silky Movement【小球丝滑移动】demo
需要有python3.6及以上的环境和 安装 pygame库 : pip install pygame
import sys import pygame
print(pygame) pygame.init() # init() 用来对python进行初始化, 因为pygame是跨平台的所以需要先根据所在系统与环境初始化 # pygame.display 该对象负责游戏窗口的显示 # set_mode(resolution=(0,0)) -> Surface 表面/图层 # 该方法用来设置游戏窗口的大小,调用该方法,会立即显示一个游戏窗口 # 需要一个元组作为参数,元组中有两个参数 # 第一个 是屏幕的宽度 # 第二个 是屏幕的高度 # 该方法会返回一个surface对象,该对象表示画面中的一个基本元素,游戏中的所有元素都是一个一个图层组成 screen = pygame.display.set_mode((800, 600)) # print(screen) # <Surface(800x600x32 SW)> 代表整个窗口 # set_caption 用来设置游戏窗口的标题 pygame.display.set_caption('小球丝滑移动') # 设置窗口的背景颜色 给screen设置颜色,设置颜色值,使用的是RGB值【光的三原色】 0-255 表示一个字节 screen.fill((220, 220, 220)) # 使用fill,来为surface设置背景颜色 # image 对象专门用来加载图片 # pygame.image.load(img_path) -> surface ball = pygame.image.load('intro_ball.gif') # print(ball) # <Surface(111x111x8 SW)> # Rect 表示矩形,即每一个图层在窗口中,所占的位置实际上都是一个矩形 ball_rect = ball.get_rect() screen_rect = screen.get_rect() # print(ball_rect) # <rect(0, 0, 111, 111)> # 【坐标与我们数学中的,在y轴方向是向下的,x轴一样】 通过改变矩形对象的x 和 y来影响 矩形的位置 # ball_rect.x = 100 # ball_rect.y = 100 # centerx 和 centery 用来设置图层中心位置坐标 --> 去到窗口的中心位置 ball_rect.centerx = screen_rect.centerx ball_rect.centery = screen_rect.centery # blit(source, dest, area=None, special_flags = 0) -> Rect # 这是surface的方法,可以将一个其他的图层绘制到当前图层中 # 参数: # 1.要绘制的图层 # 2.绘制图层的位置 <rect(0, 0, 111, 111)> screen.blit(ball, ball_rect) # flip 对整个窗口进行渲染 # Update the full display Surface to the screen pygame.display.flip() # 创建一个存储小球移动方向的变量 ball_dir = 0 # 创建一个存储小球移动速度的变量 ball_speed = 1 # 创建一个游戏主循环【任何一个游戏都有一个无限循环在运行着】 while 1: # event 是pygame中的事件对象,通过event可以获取事件信息 # lst = pygame.event.get() # 列表中都是当前所发生的事件对象 for event in pygame.event.get(): # 判断用户是否点击关闭 if event.type == pygame.QUIT: sys.exit() # 检查用户是否敲击键盘 elif event.type == pygame.KEYDOWN: # 获取用户按下的按键, key 用来在键盘按下时,会获取按键的编号 # print(event.key) ball_dir = event.key # 只控制方向 elif event.type == pygame.KEYUP: # 按键松开停止移动 【这里注意有个按住多个方向键问题】 # 注意 这里要解决一个问题:即我们按住左键球向左移动,但是我们同时按住右键,再松开左键就停止了 if ball_dir == event.key: ball_dir = 0 if ball_dir == pygame.K_UP: # 小球向上移动,y值减小 ball_rect.y -= ball_speed elif ball_dir == pygame.K_DOWN: ball_rect.y += ball_speed elif ball_dir == pygame.K_LEFT: ball_rect.x -= ball_speed elif ball_dir == pygame.K_RIGHT: ball_rect.x += ball_speed # else: # # 回到初始位置 # ball_rect.centerx = screen_rect.centerx # ball_rect.centery = screen_rect.centery # 控制小球的位置是否超过左右边界 if ball_rect.left < 0: # 也可以是 ball_rect.x ball_rect.left = 0 elif ball_rect.right > screen_rect.width: ball_rect.right = screen_rect.width # 控制小球的位置是否超过上下边界 if ball_rect.top < 0: # 也可以是 ball_rect.y ball_rect.top = 0 elif ball_rect.bottom > screen_rect.height: ball_rect.bottom = screen_rect.height # 需要先盖一层,防止画完小球一直存在无法体现移动 screen.fill((220, 220, 220)) screen.blit(ball, ball_rect) pygame.display.flip()
源码和图片获取源:链接: https://pan.baidu.com/s/1uGgWcqWtlDLXeqIPl1-KQQ 提取码: y9zb