Анимированное изображение с питоном

поэтому я пытаюсь изучить 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()

Я думаю, ваш основной цикл должен быть while running?

Aemyl 20.03.2019 13:03

да, я не использовал основной цикл, это проблема?

gugliver 21.03.2019 00:24

вы вообще не использовали running поэтому я немного запутался... как выйти из программы? Похоже, что целью running является управление игровым циклом, но я не вижу никакого его использования.

Aemyl 21.03.2019 07:08

Я заканчиваю его контролем времени, но он "ручной", я использовал его только для того, чтобы попробовать. Но главная проблема - медленное выполнение, не знаю как решить

gugliver 21.03.2019 08:39
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
4
92
0

Другие вопросы по теме