Форум сайта python.su
У меня возникла проблема, когда запустил свой скрипт на домашнем (более мощном) компе (код писал на рабочем). Pygame как таковой не виснет, но почему то ВНЕЗАПНО окно pygame не рисует анимацию. Тупо рисует первую картинку и все. Дальше окно обновляется только при щелчке на заголовок окна. На рабочем компе такого не было (все отрисовывалось и обновлялось в режиме реального времени), хотя питоны и софт (портабельные) скопированы с одной папки.
На всякий случай прикладываю DxDiag домашнего компа
Прикреплённый файлы: DxDiag.txt (36,4 KБ)
Офлайн
И у меня возникла проблема, когда подъехал по дороге домой(дорога лучше), машина перестала работать. Как бы работает, но не заводится. Возле работы машина ездила нормально.
На всякий случай прикладываю фото дороги возле дома.
Офлайн
sp3Охренеть как остроумно!!! Ответь по существу, когда мозг включится.
И у меня возникла проблема, когда подъехал по дороге домой(дорога лучше), машина перестала работать. Как бы работает, но не заводится. Возле работы машина ездила нормально.На всякий случай прикладываю фото дороги возле дома.
Офлайн
caufman
Не обижайтесь. Шутка достаточно оригинальная :)
sp3 имел ввиду, что DxDiag не иформативен. Информативен код. Как минимум, его запустят на своих машинах другие форумчане и Вы сможете узнать как этот код работает у них.
Если код представляет тайну, предварительно упростите его “до немогу” и потом выкладывайте.
P.S. Я вообще не работаю с pygame, просто рекомендую :)
Отредактировано 4kpt (Авг. 17, 2013 18:44:18)
Офлайн
4kptтри разных программера сказали, что дело не может быть в коде. Да это и логично. при всех равных (софт, версия языка, код, ос) тормоза только на одной машине. ==> проблема в машине, а не в коде. Вернее в окружении. Либо драйвер, либо видео, либо что-то из стороннего, что пользует pygame. Но что именно потыкать? Ибо pygame знаю поверхностно, а уж тем более его взаимоотношения с внешним окружением.
Информативен код.
#!/usr/bin/env python # -*- coding: utf-8 -*- #-------------------------- # !!! Python 3.2 import pygame from pygame.locals import * from math import modf white = (255, 255, 255 ) black = (0, 0, 0 ) red = (255, 0, 0 ) blue = (0, 0, 255 ) green = (0, 255, 0 ) yellow = (255, 255, 0 ) purple = (255, 0, 255 ) grey = (128, 128, 128 ) pygame.init () mainloop = True # initial screen screen_size = (640, 480) screen = pygame.display.set_mode (screen_size, 0, 32) pygame.display.set_caption('PyGame Project') # initial clock clock = pygame.time.Clock() milli = 0.0 sec = 0.0 # initial data osn = 32 shag_osn = 1 pers = Rect (osn*3, osn*3, osn, osn) pers_color = blue pers_speed = osn*8 new_pos = (pers.x, pers.y) dest = Rect (0, 0, 30, 30) dm = 0 while mainloop: for event in pygame.event.get(): # "if-else" events if event.type == KEYDOWN: if event.key == K_w: pers.move_ip (0, osn) new_pos = (pers.x, pers.y) if event.type == KEYDOWN: if event.key == K_s: pers.move_ip (0, -osn) new_pos = (pers.x, pers.y) if event.type == KEYDOWN: if event.key == K_a: pers.move_ip (-osn, 0) new_pos = (pers.x, pers.y) if event.type == KEYDOWN: if event.key == K_d: pers.move_ip (osn, 0) new_pos = (pers.x, pers.y) if event.type == MOUSEBUTTONDOWN: if event.button == 1: new_pos = (int((modf(event.pos[0]/osn))[1]*osn),int((modf(event.pos[1]/osn))[1]*osn)) print (new_pos, new_pos[0]/osn, new_pos[1]/osn) if event.type == QUIT: mainloop = False if event.type == KEYDOWN: if event.key == K_ESCAPE: mainloop = False # calc clock -------------------------------------- milli = clock.tick() sec = milli / 1000.0 # ------------------------------------------------- screen.fill(white) # create frame ------------------------------------ dm = pers_speed*sec if pers.x != new_pos[0]: if (new_pos[0]-pers.x)>0: pers.move_ip(dm, 0) if (new_pos[0]-pers.x)<0: pers.move_ip(-dm, 0) if pers.y != new_pos[1]: if (new_pos[1]-pers.y)>0: pers.move_ip(0, dm) if (new_pos[1]-pers.y)<0: pers.move_ip(0, -dm) pygame.draw.rect(screen, pers_color, pers) pygame.display.update() pygame.quit()
Офлайн
milli = clock.tick()
milli = clock.tick(50)
Отредактировано sp3 (Авг. 17, 2013 22:31:55)
Офлайн
sp3привет от программистов. Нихрена не изменилось
ps передавай привет трем программистам
Офлайн
milli = clock.tick() - не ограничивая фпс на мощном компе и минимуме расчетов milli стремится к 0
sec = milli / 1000.0 - 0 разделить на 1000 будет 0
dm = pers_speed*sec - 0 умножить на что то будет 0
pers.move_ip(dm, 0) - передвинуть рект на 0 => оставить на месте
при тыкании в заголовок окна, движок приостанавливается, отдавая управление оси и поэтому получается задержка.
решение:
1. занизить производительность системы, понизить частоту проца или поменять на менее быстрый
2. загрузить какими либо расчетами каждый тик
3. поставить ограничение фпс
4. написать грамотно механизм анимации
Офлайн
sp3Вот за такой ответ - честь и хвала.
решение:
1. занизить производительность системы, понизить частоту проца или поменять на менее быстрый
2. загрузить какими либо расчетами каждый тик
3. поставить ограничение фпс
4. написать грамотно механизм анимации
Офлайн
caufmanЯ уже писал
Вариант 3
caufmanИщи исходники игр. Скорее всего там будет грамотная реализация.
Вариант 4
Офлайн