Анимированное изображение с питоном - PullRequest
0 голосов
/ 20 марта 2019

, поэтому я пытаюсь изучать Python, используя его, и я начал кодировать знаменитую анимацию DVD_logo с постоянно меняющимся цветом фона.В первый раз, когда я сделал это, я использовал библиотеку "Pygame", но она работает немного медленнее.Я не знаю, как искать лучшую библиотеку для моей цели, может быть, как улучшить мою программу.Я на самом деле изменил его, обрабатывая освежающий фон с ограниченной поверхностью, но, похоже, он не работает.Это код, просто имейте в виду, это моя первая попытка, так что, может быть, есть что-то странное или какое-то закомментированное утверждение (я просто пытался)

import random
import sys
import os
import pygame
import random
from PIL import Image


time_exit = 3000

pygame.init()
pygame.display.init()

win_width = 800#1440#817#980
win_height = 420#855#417#500#
logo_s_w = 134
logo_s_h = 67
logo_w = random.Random()
logo_h = random.Random()
logo_w = logo_w.uniform(0 + logo_s_w, win_width - logo_s_w)
logo_h = logo_h.uniform(0 + logo_s_h, win_height - logo_s_h)
logo_w = int(logo_w)
logo_h = int(logo_h)
back_w = logo_w
back_h = logo_h
past_h = 0
past_w = 0

moving_pixel = 3
coverage_pixel_w = logo_s_w + moving_pixel * 10
coverage_pixel_h = logo_s_h + moving_pixel * 10
mov_cov = moving_pixel * 2

red = (
    255, 0, 0)

rgb = random.Random()

rgb = [
    0, 100, 0
    ]
r = random.Random()
b = random.Random()
g = random.Random()

x_flag = bool(random.getrandbits(1))
y_flag = bool(random.getrandbits(1))

hit = False

def logo(x,y):
   win.blit(dvdImg, (x,y))

def back(x,y):
   win.blit(back_rec, (x,y))

black = (
    0, 0, 0)

#clock = pygame.time.Clock()
win = pygame.display.set_mode((win_width, win_height))
#win = pygame.Surface((win_width, win_height)).convert_alpha()

dvdImg = pygame.transform.scale(pygame.image.load('DVD_logo.gif'),[logo_s_w, logo_s_h])


pygame.display.set_caption('DVD')

background_colour = (rgb)
win.fill(background_colour)
#bg_image = pygame.Surface((logo_s_w, logo_s_h))
#win.fill(black)
bg_image = pygame.Surface((logo_s_w, logo_s_h))
logo(logo_w, logo_h)
back_rec = pygame.Surface((coverage_pixel_w, coverage_pixel_h))
pygame.display.flip()


time = 0

running = True

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    hit = False
    #bg_image = pygame.Surface((logo_s_w, logo_s_h))
    #pygame.draw.rect(bg_image, background_colour, [logo_w, logo_h, logo_s_w, logo_s_h])
    #pygame.draw.rect(bg_image, (255,192,0), [200, 0, 200, 200])
    #win.fill(background_colour)


    back_rec.fill(rgb)
    back(back_w, back_h)
    logo(logo_w, logo_h)
    pygame.display.update()
    #clock.tick(60)
    back_w = logo_w - past_w
    back_h = logo_h + past_h

    if logo_w < win_width and not x_flag:
        logo_w = logo_w + moving_pixel
        past_w = + moving_pixel + mov_cov

    if logo_w > 0 and x_flag:
        logo_w = logo_w - moving_pixel
        past_w = - moving_pixel + mov_cov

    if logo_w <= 0:
        x_flag = False
        hit = True

    if logo_w >= (win_width - (logo_s_w)):
        x_flag = True
        hit = True

    if logo_h < win_height and not y_flag:
        logo_h = logo_h + moving_pixel
        past_h = + moving_pixel - mov_cov

    if logo_h > 0 and y_flag:
        logo_h = logo_h - moving_pixel
        past_h = 0 - moving_pixel - mov_cov

    if logo_h <= 0:
        y_flag = False
        hit = True

    if logo_h >= (win_height - (logo_s_h)):
        y_flag = True
        hit = True

    #change color
    if hit:
        rgb[0] = r.uniform(0, 255) 
        rgb[1] = g.uniform(0, 255) 
        rgb[2] = b.uniform(0, 255) 
        background_colour = tuple(rgb)
        win.fill(background_colour)
        #background_colour = background_colour(rgb)
        #rgb = list(rgb)
        hit = False

    #pygame.time.delay()
#    time = time + 1
    if time > time_exit:
        sys.exit()

#running = True
#while running:
#  for event in pygame.event.get():
#    if event.type == pygame.QUIT:
#      running = False

pygame.quit()
quit()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...