目录
(一)创建的屏幕是何时存在何时关闭的
(二)死循环防止屏幕自裁
(三)创造和接收事件
(四)下面给屏幕上个色
(五)为了更好地理解过程之屏幕颜色渐变
(一)创建的屏幕是何时存在何时关闭的
第一点:运行后,800 * 400的屏幕先出现,经过3秒后就自动关闭了(尽管我们没有关闭它的语句),屏幕是自己关闭的。
第二点:只要构造屏幕的语句下面还有语句要执行,它就不会自裁,所以,我们在它下面造个死循环(变相的让它下面
有无数语句)就能拯救这个轻生的屏幕,请看(二)
def run_game():
pygame.init()
screen = pygame.display.set_mode((800, 400)) # 只要我下面没有语句或者我下面的语句都执行完了,我才自我关闭。所以
# 能留住我的只有死循环
print(1)
time.sleep(1)
print(2)
time.sleep(1)
print(3)
run_game()
(二)死循环防止屏幕自裁
这次运行,屏幕就会一直存在,不过是无响应状态,因为我们还没有创造和接收事件。
def run_game():
pygame.init()
screen = pygame.display.set_mode((800, 400)) # 只要我下面没有语句或者我下面的语句都执行完了,我才自我关闭。所以
# 能留住我的只有死循环
# print(1)
# time.sleep(1)
# print(2)
# time.sleep(1)
# print(3)
while True:
pass
run_game()
(三)创造和接收事件
屏幕虽然不自裁了,但我们也要适时关闭它吧?这时候就要用事件了。其实屏幕创建后,我们的屏幕每时每刻都在接收事件。
print(pygame.event.get())可以直接打印事件列表 (下面这个代码只做解释pygame.event.get()用,不参与全局构成)
def run_game():
pygame.init()
screen = pygame.display.set_mode((800, 400)) # 只要我下面没有语句或者我下面的语句都执行完了,我才自我关闭。所以
# 能留住我的只有死循环
print(1)
time.sleep(1)
print(2)
time.sleep(1)
print(3)
print(pygame.event.get())
run_game()
结果(部分):
好了,我们继续。事件包括鼠标和键盘操作,我们在屏幕上的任何操作,都会由pygame.event.get()收集在一个列表,我们用循环died迭代出来进行判断,并由print(event)打印在控制台,pygame.QUIT就相当于右上角红色叉叉。
def run_game():
pygame.init()
screen = pygame.display.set_mode((800, 400)) # 只要我下面没有语句或者我下面的语句都执行完了,我才自我关闭。所以
# 能留住我的只有死循环
while True:
for event in pygame.event.get():
print(event)
if event.type == pygame.QUIT:
sys.exit()
run_game()
我在屏幕上移动了几下鼠标就有如下输出:
(四)下面给屏幕上个色
以下代码运行后,然而并没有上色成功。因为有这么个规定!每次对屏幕做出动作,都要执行pygame.display.flip(),功能是将你对屏幕做的那种事(就如我们这次上色)显示出来。
def run_game():
pygame.init()
screen = pygame.display.set_mode((800, 400)) # 只要我下面没有语句或者我下面的语句都执行完了,我才自我关闭。所以
# 能留住我的只有死循环
bg_color = (230, 230, 230)
while True:
for event in pygame.event.get():
# print(event)
if event.type == pygame.QUIT:
sys.exit()
screen.fill(bg_color)
run_game()
下面代码就能上色成功了(就多了一句pygame.display.flip()):
(五)为了更好地理解过程之屏幕颜色渐变
之前我只是给屏幕上了一次色,现在每一次循环,我都让每一帧的颜色都上升0.05。
注意:pygame.display.flip() 是最重要的。
死循环中每一次循环我给下标为二的参数加0.05,然后用pygame.display.flip()展示出来,没有pygame.display.flip(),屏幕颜色根本不变。
pygame.display.flip()一共执行了 255/0.05 + 1= 5101次!!每一帧改变颜色后显示出来都要靠他!!
import pygame
import sys
def run_game():
pygame.init()
screen = pygame.display.set_mode((800, 400)) # 只要我下面没有语句或者我下面的语句都执行完了,我才自我关闭。所以
# 能留住我的只有死循环
bg_color = [0, 0, 0]
while True:
for event in pygame.event.get():
# print(event)
if event.type == pygame.QUIT:
sys.exit()
screen.fill(tuple(bg_color))
pygame.display.flip()
# 因为在循环内,所以只要不是exit我就一直flip。任何屏幕上的变动都要flip一下,否则,即使
# 屏幕元素发生改变你也看不到
bg_color[2] += 0.05
if bg_color[2] > 255:
sys.exit()
run_game()