美文网首页
day11-pygame事件

day11-pygame事件

作者: 旧时初_2e8d | 来源:发表于2018-07-30 18:29 被阅读0次

    pygame事件

    """__author__zhangdong__"""
    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:鼠标按下弹起
        MOUSEMOTION:鼠标移动
        鼠标相关事件关心事件产生的位置
        
        
        """
    
        while True:
            #每次循环检测有没有事件发生
            for event in pygame.event.get():
                #不同类型的事件对应的type值不一样
                if event.type == pygame.QUIT:
                    exit()
                #鼠标相关事件
                #pos属性,获取鼠标事件产生的位置
                if event.type == pygame.MOUSEBUTTONDOWN:
                    print('鼠标按下')
                if event.type == pygame.MOUSEBUTTONUP:
                    print('鼠标弹起',event.pos)
                if event.type == pygame.MOUSEMOTION:
                    print('鼠标移动')
                #键盘相关事件
                #key属性,被按的按键对应的值的编码
                if event.type == pygame.KEYDOWN:
                    print('键盘按键被按下',chr(event.key))
                if event.type == pygame.KEYUP:
                    print('键盘按钮弹起')
    
    

    效果


    7.gif

    二、鼠标事件的应用

    """__author__zhangdong__"""
    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))
     #写一个函数,判断指定的点是否在指定的矩形范围内
    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
    #写一个函数,画一个按钮
    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('come on', 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('鼠标事件')
    
        #画个按钮
        # """矩形框"""
        # pygame.draw.rect(screen,(0,255,0),(100,100,100,60))
        # """文字"""
        # font = pygame.font.SysFont('Times',30)
        # title = font.render('come on',True,(255,0,0))
        # screen.blit(title,(120,120))
        draw_button(screen,(0,255,0),(255,0,0))
    
        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)
                    pygame.display.flip(
    

    结果


    5.gif

    三、鼠标事件应用2

    """__author__zhangdong__"""
    import pygame
    #写一个函数是否在某个范围内
    def is_rect(pos,rect):
        x,y = pos
        rx,ry,rw,rh = rect
        if rx<=x<=rx+rw and ry<=y<=ry+rh:
            return True
        return False
    
    
    
    
    
    if __name__ == '__main__':
        pygame.init()
        screen = pygame.display.set_mode((600,400))
        screen.fill((255,255,255))
        pygame.display.set_caption('鼠标事件')
    
    
        image = pygame.image.load('./飞机大战/photo1.jpg')
        image = pygame.transform.scale(image, (100, 80))
        image_x = 100
        image_y = 100
        screen.blit(image,(image_x,image_y))
    
    
    
    
    
        pygame.display.flip()
    
        #y用来存储图片是否可以移动
        is_move = False
        while True:
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    exit()
                # 鼠标按下,让状态变成可以移动
                if event.type == pygame.MOUSEBUTTONDOWN:
                    w,h = image.get_size()
                    if is_rect(event.pos,(image_x,image_y,w,h)):
                        is_move = True
                # 鼠标弹起,让状态变成不可以移动
                if event.type == pygame.MOUSEBUTTONUP:
                    is_move =False
    
    
    
    
    
                    # 鼠标移动对应的事件
                if event.type == pygame.MOUSEMOTION:
                    if is_move:
                        screen.fill((255,255,255))
                        x,y = event.pos
                        image_w,image_h = image.get_size()
                        #保证鼠标在图片中心
                        image_y = y-image_h/2
                        image_x = x-image_w/2
                        screen.blit(image,(image_x,image_y))
                        pygame.display.flip()
    
    

    结果


    4.gif

    四、动画效果

    """__author__zhangdong__"""
    """
    动画原理:不断的刷新界面上的内容(一帧一帧的画)
    """
    
    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 animtion_title(screen):
        font = pygame.font.SysFont('Times', 40)
        title = font.render('Python', 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((600,400))
        screen.fill((255,255,255))
        static_page(screen)
        pygame.display.set_caption('动画效果')
    
    
        pygame.display.flip()
    
        while True:
            #for里面的代码只有时间发生后才会执行
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    exit()
    
            #在下面去写每一帧要显示的内容
            """程序执行到这个位置,cpu休息一段时间再执行后面的代码
            线程在这儿阻塞指定的时间
            单位:毫秒 (1000ms = 1s
            """
            pygame.time.delay(60)
            #动画前要将原来的内容全部清空
            screen.fill((255,255,255))
            static_page(screen)
            animtion_title(screen)
            #内容展示完成后,要更新到屏幕上
            pygame.display.flip()
    
    

    结果


    3.gif

    五、ball

    """__author__zhangdong__"""
    import pygame
    
    
    def draw_ball(place,color,pos):
        """
        画球
        """
        pygame.draw.circle(place,color,pos,20)
    ##方向对应的key值
    up = 273
    down = 274
    left = 276
    right = 275
    if __name__ == '__main__':
        pygame.init()
        screen = pygame.display.set_mode((600,400))
        screen.fill((255,255,255))
        pygame.display.set_caption('ball')
    
    
    
        pygame.display.update()
        #保存初始坐标
        ball_x = 100
        ball_y = 100
        x_speed = 5
        y_speed = 5
    
    
        while True:
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    exit()
                if event.type == pygame.KEYDOWN:
                    if event.key == up:
                        y_speed = -5
                        x_speed = 0
                    elif event.key == down:
                        y_speed = 5
                        x_speed = 0
                    elif event.key == left:
                        x_speed = -5
                        y_speed = 0
                    elif event.key == right:
                        x_speed = 5
                        y_speed = 0
    
    
    
            #刷新屏幕
            pygame.time.delay(10)
            screen.fill((255,255,255))
            #每次循环让的x
            ball_x +=x_speed
            ball_y +=y_speed
            if ball_x+20>=600:
                ball_x = 600-20
                x_speed *= -1
            if ball_x<=20:
                ball_x=20
                x_speed *= -1
            if ball_y+20>=400:
                ball_y = 400-20
                y_speed *= -1
            if ball_y<= 20:
                ball_y = 20
                y_speed *= -1
            draw_ball(screen,(255,0,0),(ball_x,ball_y))
    
            pygame.display.update(
    
    

    结果


    2.gif

    相关文章

      网友评论

          本文标题:day11-pygame事件

          本文链接:https://www.haomeiwen.com/subject/zggfvftx.html