目录

 

(一)创建的屏幕是何时存在何时关闭的

(二)死循环防止屏幕自裁

(三)创造和接收事件

 (四)下面给屏幕上个色

 (五)为了更好地理解过程之屏幕颜色渐变


(一)创建的屏幕是何时存在何时关闭的

第一点:运行后,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()

 结果(部分):

python绘制飞机尾焰 python画飞机代码_改变颜色

 

 好了,我们继续。事件包括鼠标和键盘操作,我们在屏幕上的任何操作,都会由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()

 我在屏幕上移动了几下鼠标就有如下输出:

python绘制飞机尾焰 python画飞机代码_死循环_02

 

 (四)下面给屏幕上个色

以下代码运行后,然而并没有上色成功。因为有这么个规定!每次对屏幕做出动作,都要执行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()):

python绘制飞机尾焰 python画飞机代码_改变颜色_03

 

 (五)为了更好地理解过程之屏幕颜色渐变

之前我只是给屏幕上了一次色,现在每一次循环,我都让每一帧的颜色都上升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()