day11 Pygame的一些事件

必须导入pygame后才能使用pygame

Up = 273
Down = 274
Left = 276
Right = 275
import pygame

if __name__ == '__main__':
    pygame.init()
    screen = pygame.display.set_mode((600, 400))
    screen.fill((255, 255, 255))
    # 设置窗口标题
    pygame.display.set_caption('游戏事件')

    pygame.display.flip()

    """
    QUIT:关闭按钮被点击事件
    MOUSEBUTTONDOWN: 鼠标按下事件
    MOUSEBUTTONUP: 鼠标按下弹起
    MOUSEMOTION:鼠标移动
    鼠标相关事件关心事件产生的位置
    
    KEYDOWN: 键盘按下
    KEYUP: 键盘弹起
    """
    while True:
        # 每次循环检测有没有事件发生
        for event in pygame.event.get():
            # 不同类型的事件对应的type值不一样
            if event.type == pygame.QUIT:
                exit()

            # 鼠标相关事件
            # pos属性,获取鼠标事件产生的位置
            if event.type == pygame.MOUSEBUTTONDOWN:
                print('鼠标按下', event.pos)

            if event.type == pygame.MOUSEBUTTONUP:
                print('鼠标弹起', event.pos)

            if event.type == pygame.MOUSEMOTION:
                print('鼠标移动', event.pos)

            # 键盘相关事件
            # key属性,被按的按键对应的值的编码
            if event.type == pygame.KEYDOWN:
                print('键盘按键被按下',chr(event.key))

            if event.type == pygame.KEYUP:
                print('键盘按钮弹起', chr(event.key))

鼠标事件

import pygame
from random import randint


def rand_color():
    """
    产生随机颜色
    """
    return randint(0, 255), randint(0, 255), randint(0, 255)

def draw_ball(screen, pos):
    pygame.draw.circle(screen, rand_color(), pos, randint(10, 20))
    # 只要屏幕上的内容有更新,都需要调用下面这两个方法中的一个
    # pygame.display.flip()
    pygame.display.update()


# 写一个函数,判断指定的点是否在指定的矩形范围中
def is_in_rect(point, rect):
    x, y = point
    rx, ry, rw, rh = rect
    if (rx <= x <= rx+rw) and (ry <= y <= ry+rh):
        return True
    return False


# 写一个函数,画一个按钮
def draw_button(screen, bth_color, title_color):
    # 画个按钮
    """矩形框"""
    pygame.draw.rect(screen, bth_color, (100, 100, 100, 60))
    """文字"""
    font = pygame.font.SysFont('Times', 30)
    title = font.render('clicke', True, title_color)
    screen.blit(title, (120, 120))

# 按钮坐标

if __name__ == '__main__':
    pygame.init()
    screen = pygame.display.set_mode((600, 400))
    screen.fill((255,255,255))
    pygame.display.set_caption('鼠标事件')

    # 画个按钮
    draw_button(screen, (0, 255, 0), (255, 0, 0))
    # """矩形框"""
    # pygame.draw.rect(screen,(0, 255, 0),(100, 100, 100, 60))
    # """文字"""
    # font = pygame.font.SysFont('Times', 30)
    # title = font.render('clicke',True,(255, 0, 0))
    # screen.blit(title, (120, 120))



    pygame.display.flip()

    while True:
        for event in pygame.event.get():
            # 退出
            if event.type == pygame.QUIT:
                exit()

            if event.type == pygame.MOUSEBUTTONDOWN:
                # 在指定的坐标处画一个球
                # draw_ball(screen, event.pos)
                if is_in_rect(event.pos, (100, 100, 100, 60)):
                    draw_button(screen, (0, 100, 0), (100, 0, 0))
                    pygame.display.update()

            if event.type == pygame.MOUSEBUTTONUP:
                if is_in_rect(event.pos, (100, 100, 100, 60)):
                    draw_button(screen, (0, 255, 0),(255, 0, 0))
                    pygame.display.update()

            if event.type == pygame.MOUSEMOTION:
                screen.fill((255, 255, 255))
                draw_button(screen, (0, 255, 0), (255, 0, 0))
                draw_ball(screen, event.pos)

动画原理

"""
动画原理:不断的刷新界面上的内容(一帧一帧的画)
"""
import pygame
from random import randint
def static_page(screen):
    # 静态文字
    """
    页面上的静态内容
    """
    font = pygame.font.SysFont('Times', 40)
    title = font.render('Welcome', True, (0, 0, 0))
    screen.blit(title, (200, 200))

def animation_title(screen):
    """
    字体颜色发生改变
    """

    font = pygame.font.SysFont('Times', 40)
    title = font.render('Welcome', True, (randint(0, 255), randint(0, 255), randint(0, 255)))
    screen.blit(title, (100, 100))



if __name__ == '__main__':
    pygame.init()
    screen = pygame.display.set_mode((640, 480))
    screen.fill((255, 234, 219))
    static_page(screen)

    pygame.display.flip()
    while True:
        # for 里面的循环只有相应的事件发生后,才会执行

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                exit()

        #  在下面写变化的内容
        """程序执行到这个位置,Cpu休息一段时间再执行后面的代码(线程阻塞指定的时间)
        单位:毫秒  1000ms == 1s
        """
        pygame.time.delay(500)
        # 动画前要将原来的内容全部清空
        screen.fill((255, 234, 219))
        static_page(screen)
        animation_title(screen)
        # 内容展示完成后,要更新到屏幕上
        pygame.display.update()

你可能感兴趣的:(day11 Pygame的一些事件)