С Новым годом! Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22

Почему от текстур GraphABC лагает?

27.07.2017, 13:36. Показов 2447. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Почему от движущихся спрайтов GraphABC ужасно лагает? Как избавиться от этого?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.07.2017, 13:36
Ответы с готовыми решениями:

Почему при создании игры Lode Runner потребовалось 19 000 текстур? почему так много?
Почему при создании игры Lode Runner потребовалось 19 000 текстур? почему так много? ...

Почему оперативка лагает!?
сегодня купил оперативную память на 1 гб кингстон, но когда я его вставляю в комп, то комп не включается и издаёт гудки, не прикращаемые....

Почему же так лагает IntelliJ IDEA?
del , короче решил я познакомится с языком Java. Скачал среду разработки IntelliJ IDEA, но она лагает. Просто жуткие лаги в интерфейсе, но...

17
20 / 19 / 14
Регистрация: 25.03.2015
Сообщений: 68
27.07.2017, 20:34
Лучший ответ Сообщение было отмечено Volobuev Ilya как решение

Решение

Тоже сталкивался с тем, что GraphABC при казалось бы небольшой нагрузке начинает тормозить. Можно попробовать прорисовку в реальном времени через Milliseconds. Тогда не придётся прорисовывать каждый кадр. Например:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
uses GraphABC;
begin
  SetWindowSize(300,300);
  var x:=10.0;
  var y:=10.0;
  
  /// Горизонтальная скорость
  var xd:=10;
  /// Вертикальная скорость
  var yd:=20;
  
  // Будем рисовать круг, движущийся по диагонали
  // с заданными скоростями (в п/с)
  LockDrawing;
  MillisecondsDelta;
  repeat
    ClearWindow;
    var d:=MillisecondsDelta;
    x+=xd*d/1000;
    y+=yd*d/1000;
    Circle(round(x),round(y),10);
    Redraw;
  until False;
end.
(это не спрайты, но их тоже можно рисовать функцией с координатами)
1
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
28.07.2017, 09:09  [ТС]
Я через таймеры делаю прорисовку кадров.

Добавлено через 35 секунд
Мне надо, чтобы вообще приложение на лагало. Такое возможно?

Добавлено через 59 секунд
Потому, что при заливке текстурой фона окна начинает лагать все - даже объектов если не больше 3-х.
0
Эксперт Pascal/Delphi
6812 / 4568 / 4820
Регистрация: 05.06.2014
Сообщений: 22,434
28.07.2017, 10:06
Цитата Сообщение от Volobuev Ilya Посмотреть сообщение
Почему от движущихся спрайтов GraphABC ужасно лагает?
Постарайтесь не забывать, что pabc/pabc.net - это всё-таки среда, разработанная для учебных целей прежде всего.
Цитата Сообщение от Volobuev Ilya Посмотреть сообщение
Как избавиться от этого?
Перейти на нечто, изначально разработанное для преодоления "лагания".
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33369 / 21495 / 8234
Регистрация: 22.10.2011
Сообщений: 36,892
Записей в блоге: 12
28.07.2017, 10:10
Может, в конце концов, ты приложишь проект, который можно запустить и посмотреть на лаги? Вместе со спрайтами, разумеется, а то у тебя есть привычка выкладывать код, который ссылается на какие-то неизвестные файлы, лежащие где-то у тебя на дисках.

Добавлено через 3 минуты
pabc.net - это всё-таки среда, разработанная для учебных целей прежде всего.
pabc.net - это среда, использующая фреймворк .net, и если этот фреймворк не способен отобразить спрайт без лагов - то грош ему цена, и это не проблема Паскаля ни разу.
0
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
28.07.2017, 11:07  [ТС]
Если запустить просто с градиентным фоном - в 90% будет нормально работать. А вот если запустить с фоном в виде картинки, а еще хуже - еще и назначить движущимуся объекту картинку - то лаги обеспечены.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
uses GameEngine2DS,GraphABC;
const
  n = 15;
 
var
  scn, scnBG, scnOverlay: Scene;
  a: Sprite; // Движущийся объект
  BGghosts, OVERLAYghosts: List<GameRectangle>;
  
function NewRect(x, y: integer): GameRectangle;
var
  a: GameRectangle;
begin
  a := new GameRectangle();
  a.CenterX := x;
  a.CenterY := y;
  a.Width := Random(100);
  a.Height := Random(100);
  a.FillColor := clRandom;
  a.Visible := true;
  a.UserStringSize := 1;
  Result := a;
end;
 
begin 
  a := NewRect(100, 100);
  a.VelocityX := 2;
  a.Image:=new Picture(1,1);
  a.Image.Load({путь к картинке спрайта});
  
  BGghosts := new List<GameRectangle>();
  for var i := 0 to n - 1 do
    BGghosts.Add(NewRect(Random(Window.Width), Random(Window.Height)));
  
  OVERLAYghosts := new List<GameRectangle>();
  for var i := 0 to n - 1 do
    OVERLAYghosts.Add(NewRect(Random(Window.Width), Random(Window.Height)));
  
  scnBG := new Scene();
  for var i := 0 to BGghosts.Count - 1 do
    scnBG.SceneObjects.Add(BGghosts[i]);
  
  scnOverlay := new Scene();
  for var i := 0 to OVERLAYghosts.Count - 1 do
    scnOverlay.SceneObjects.Add(OVERLAYghosts[i]);
  
  scn := new Scene();
  {scn.HorizonColor := clCyan;
  scn.ZenithColor := clBlue;}
  scn.SceneObjects.Add(a);
  scn.BackgroundImage:=new Picture(1,1);
  scn.BackgroundImage.Load({тут впишите путь к любой картике});
  scn.BackgroundScenes.Add(scnBG);
  scn.OverlayScenes.Add(scnOverlay);
  scn.GhostColor := GHOST_COLOR;
  scn.AsGhosts := true;
  
  MainFunctions.SetCaption(1);
  GameStarter.ActiveScene := scn;
  
  GameStarter.Start();
end.
Код файла. А в архиве - сам движок.
Вложения
Тип файла: rar GameEngine2DS.rar (9.6 Кб, 4 просмотров)
0
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
28.07.2017, 11:08  [ТС]
В качестве пути к файлу пропишите путь к любому изображению.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33369 / 21495 / 8234
Регистрация: 22.10.2011
Сообщений: 36,892
Записей в блоге: 12
28.07.2017, 11:41
Цитата Сообщение от Volobuev Ilya Посмотреть сообщение
В качестве пути к файлу пропишите путь к любому изображению.
Вот о чем я и говорил. Мне неинтересно прописывать путь к своему изображению, ибо оно возьмет и не начнет лагать. Мне нужно воспроизвести те же лаги, что есть у тебя, чтобы с ними бороться, поймешь ты это когда-нибудь, или нет? А я не могу, ибо не знаю ни размера изображения, ни формата. Ничего.
0
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
28.07.2017, 11:53  [ТС]
Вот архив
Вложения
Тип файла: rar Игровой движок.rar (84.0 Кб, 2 просмотров)
0
20 / 19 / 14
Регистрация: 25.03.2015
Сообщений: 68
28.07.2017, 12:47
Лучший ответ Сообщение было отмечено Volobuev Ilya как решение

Решение

А почему именно прорисовка по таймерам? В большинстве таких движков есть возможность загрузить программу так, что на один кадр будут уходить секунды, и таймеры тут совершенно неуместны. Даже если решить проблему, она будет лишь отложена. Я бы переписал всё это дело на прорисовку в реальном времени.
1
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
28.07.2017, 13:34  [ТС]
Хм, а возможно ли то, что "лаги" - это всего лишь движок не успевает дорисовать все объекты и уже вызывается новая отрисовка кадра с нуля?
0
20 / 19 / 14
Регистрация: 25.03.2015
Сообщений: 68
28.07.2017, 13:36
В таком случае обычно возникает Runtime error: попытка доступа к занятой области. GraphABC обычно ругается при многопоточном рисовании.
1
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
28.07.2017, 13:39  [ТС]
Хм, странно - поставил у таймеров промежуток рисования через 50 милисекунд и уже при 840 частицах не лагает.
0
20 / 19 / 14
Регистрация: 25.03.2015
Сообщений: 68
28.07.2017, 13:51
Я бы сам проверил, но в коде висит непреодолимый 'C:\Ilya\Ground.jpg'.
0
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
28.07.2017, 13:54  [ТС]
Вот, тут можете посмотреть.
Вложения
Тип файла: rar Output.rar (61.5 Кб, 4 просмотров)
0
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
28.07.2017, 14:01  [ТС]
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
uses GameEngine2Ds, GraphABC;
var
  scn: Scene;
 
procedure NewParticles();
begin
  ParticleSystem.ParticlesBorderColor := clRed;
  ParticleSystem.ParticlesFillColor := clRandom;
  ParticleSystem.Radius := Random(5);
  ParticleSystem.SpeedCoeff := Random(100);
  ParticleSystem.NewParticleSystem();
end;
 
begin
  scn := new Scene();
  scn.HorizonColor := clCyan;
  scn.ZenithColor := clBlue;
  
  ParticleSystem.ParticlesCount := integer.MaxValue;
  ParticleSystem.ParticlesAngleCount := 150;
  ParticleSystem.AngleCount := 6;
  ParticleSystem.RandomAngle := 15;
  ParticleSystem.CenterX := Window.Width div 2;
  ParticleSystem.CenterY := Window.Height div 2;
  ParticleSystem.MinLifeTime := 1;
  ParticleSystem.MaxLifeTime := 3;
  ParticleSystem.ParticlesMinWidth := 10;
  ParticleSystem.ParticlesMaxWidth := 20;
  ParticleSystem.ParticlesMinHeight := 10;
  ParticleSystem.ParticlesMaxHeight := 20;
  ParticleSystem.ParticlesList := scn.SceneParticles;
  ParticleSystem.MinDecSpeed := 1;
  ParticleSystem.MaxDecSpeed := 20;
  
  for var i := 0 to 3 do
    NewParticles();
  
  MainFunctions.SetCaption(1);
  GameStarter.ActiveScene := scn;
  
  GameStarter.Start();
end.
Добавлено через 5 минут
Кстати вот так лагать гораздо меньше стало (почти не лагает):
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
uses GameEngine2Ds, GraphABC;
var
  scn: Scene;
 
procedure NewParticles();
begin
  ParticleSystem.ParticlesBorderColor := clRed;
  ParticleSystem.ParticlesFillColor := clRandom;
  ParticleSystem.Radius := Random(5);
  ParticleSystem.SpeedCoeff := Random(100);
  ParticleSystem.NewParticleSystem();
end;
 
begin
  scn := new Scene();
  scn.HorizonColor := clCyan;
  scn.ZenithColor := clBlue;
  
  ParticleSystem.ParticlesCount := integer.MaxValue;
  ParticleSystem.ParticlesAngleCount := 450;
  ParticleSystem.AngleCount := 6;
  ParticleSystem.RandomAngle := 15;
  ParticleSystem.CenterX := Window.Width div 2;
  ParticleSystem.CenterY := Window.Height div 2;
  ParticleSystem.MinLifeTime := 1;
  ParticleSystem.MaxLifeTime := 3;
  ParticleSystem.ParticlesMinWidth := 10;
  ParticleSystem.ParticlesMaxWidth := 20;
  ParticleSystem.ParticlesMinHeight := 10;
  ParticleSystem.ParticlesMaxHeight := 20;
  ParticleSystem.ParticlesList := scn.SceneParticles;
  ParticleSystem.MinDecSpeed := 1;
  ParticleSystem.MaxDecSpeed := 20;
  
  for var i := 0 to 3 do
    NewParticles();
  
  MainFunctions.SetCaption(1);
  repeat
    ClearWindow();
    scn.Draw();
    Redraw();
  until false;
end.
0
20 / 19 / 14
Регистрация: 25.03.2015
Сообщений: 68
28.07.2017, 14:03
Работает. В начале быстро разлетаются частицы, и чем их меньше, тем чаще screen freezes. Возможно из-за вычислений с быстро растущими числами координат. Не лучший тест; нужно что-то, что не задаёт всем частицам гигантские координаты, вызывающие такие тормоза.

Второй модуль не компилируется. Какая версия компилятора?

Да и первый тоже.
0
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
28.07.2017, 17:36  [ТС]
Версия 3.2.

Добавлено через 2 минуты
Как центр частицы вылетает за границы окна или скорость равна 0 она удаляется.

Добавлено через 2 часа 37 минут
Без таймеров работает гораздо быстрее.

Добавлено через 33 минуты
Кстати, рисование в реальном времени дало свои результаты - не лагает как было.

Добавлено через 2 минуты
Pascal
1
2
3
4
5
6
    procedure ApplyForce();
    begin
      var T := ObjectData.GetTimeDelta() / 1000;
      CenterX := CenterX + VelocityX * T;
      CenterY := CenterY + VelocityY * T;
    end;
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.07.2017, 17:36
Помогаю со студенческими работами здесь

Почему так лагает при рисовании градиентов?
uses GraphABC; var M: array of Color; C: Color; ///Функция линейной интерполяции. function Intr(a, b: byte; p: byte):...

Почему иногда лагает панель задач и кпопка пуск?
Бывает, что кнопка пуск просто при нажатии никак не реагирует.

Fuser -s ./ или почему лагает сервер шо аж кони рыгают?
Добрый день. Ох пофиксиш одно вылезет другое :) И так всю жизнь как я понимаю. Скажите мне пожалуйста, кто может объяснить не...

Почему при запуске любого приложение ЦП перегружается и все лагает
Добрый вечер! Я уже во 2 раз столкнулся с такой проблемой, как сильное &quot;лагание&quot; игр и т. д. Впервый раз на это я не обратил внимания...

В hellblade падает фпс до 30 лагает фризит.ризен 1600 и 5700 .почему?
ризен 1600\ рх5700 \крушл 3000 16 хмр \550 сеасоник\ 7200 wd в других играх нет такого хоть и мультиплеер батлы например. в хелблейд...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru