Skip to content
  • English
  • Polski
Digital Karabela
Digital Karabela
Primary Navigation Menu
Menu
  • Strona główna
  • Produkty
  • DevBlog
  • Castle Engine
  • Kurs bash
  • O firmie

Jak sprawdzić co spowalnia moją grę?

Castle Game Engine Logo

Jeżeli twoja gra nie chodzi płynnie najpierw trzeba ustalić gdzie leży problem. Czy problemem jest kod wykonywany w funkcji Update? Czy może chodzi o rendering?

Często trudno określić położenie wąskiego gardła intuicyjnie, łatwo się też pomylić i stracić wiele godzin optymalizując kod, który tego nie wymagał. Na szczęście z pomocą przychodzi nam FrameProfiler.

Jak to działa?

FrameProfiler zapisuje zmierzone wartości w logu dla każdej ramki np.:

-------------------- FrameProfiler begin
Frame time: 0.02 secs (we should have 64.29 FPS based on this):
- BeforeRender: 0%
- Render: 94% (0.01 secs, we should have 68.38 "only render FPS" based on this)
  - TCastleTransform.Render transformation: 2%
  - TCastleScene.Render: 38%
    - ShapesFilterBlending: 2%
- Update: 5%
  - TCastleSceneCore.Update: 0%
- Other:
-------------------- FrameProfiler end

Czas tworzenia klatki podzielony jest na 4 etapy:

  • BeforeRender – czas przygotowania zasobów przed rozpoczęciem renderowania
  • Render – czas renderowania
  • Update – czas wykonywania funkcji Update (w tym fizyka, animacje, itp.)
  • Other – inne, w tym zakresie pojawiają się pomiary użytkownika wykonywane poza Update, BeforeRender, Render.

Uruchomienie FrameProfilera

Aby włączyć FrameProfiler wystarczy dodać moduł CastleTimeUtils do sekcji uses i skorzystać z singeltona FrameProfiler:

FrameProfiler.Enabled := true;

Mierzenie czasu wykonania kroku fizyki

Gdy PR #144 zostanie połączony, FrameProfiler będzie posiadał dodatkową linię „Update Kraft Physics” pokazująca czas wykonania kroku fizyki:

-------------------- FrameProfiler begin
Frame time: 0.02 secs (we should have 64.29 FPS based on this):
- BeforeRender: 0%
- Render: 94% (0.01 secs, we should have 68.38 "only render FPS" based on this)
  - TCastleTransform.Render transformation: 2%
  - TCastleScene.Render: 38%
    - ShapesFilterBlending: 2%
- Update: 5%
  - TCastleSceneCore.Update: 0%
  - Update Kraft Physics: 2% (0.00037 secs)
- Other:
-------------------- FrameProfiler end 

Własne pomiary w FrameProfiler

Informacje zwracane przez FrameProfiler dotyczą wszystkich obiektów, jeżeli chcemy mierzyć czas wykonania określonego typu/funkcji możemy to zrobić używając FrameProfiler.Start/FrameProfiler.Stop z identyfikatorem tekstowym np.:

Jeżeli mamy klasę gracza TMyPlayer zaimplementowaną jako klasa dziedzicząca z TCastleScene i chcemy sprawdzić czas wywołania funkcji Update możemy to zrobić w następujący sposób:

TMyPlayer.Update(const SecondsPassed: Single; var RemoveMe: TRemoveType);
begin
  FrameProfiler.Start('TMyPlayer.Update');
  // kod update TMyPlayer
  FrameProfiler.Stop('TMyPlayer.Update');
end;

Wtedy log będzie wyglądał następująco:

-------------------- FrameProfiler begin
Frame time: 0.01 secs (we should have 84.17 FPS based on this):
- BeforeRender: 0%
- Render: 13% (0.00 secs, we should have 655.95 "only render FPS" based on this)
  - TCastleTransform.Render transformation: 0%
  - TCastleScene.Render: 3%
    - ShapesFilterBlending: 0%
- Update: 86%
  - TCastleSceneCore.Update: 0%
  - TMyPlayer.Update: 85%
- Other:
-------------------- FrameProfiler end

Aktualnie silnik umożliwia prowadzenie do 16 własnych pomiarów co z pewnością wystarczy.

Optymalizacje

Gdy poznamy położenie wąskiego gardła, dokładnie wiemy co należy zoptymalizować. Wiele przydatnych informacji na temat optymalizacji możemy znaleźć tutaj.

2019-11-26
26 listopada, 2019
W Castle Engine (pl), Język Object Pascal, Tworzenie gier
Tagi: castleengine, freepascal, kraft
Poprzedni wpis: Lazarus 2.0.6 wydany
Następny wpis: Wypróbuj moją pierwszą grę – Bricks Color Pick (Free to Play)

Wypróbuj moją nową grę! Zupełnie za darmo!

Logo Bricks Color Pick

Bricks Color Pick to zupełnie nowe podejscie do klasycznego arkanoida! Brak dolnej belki! Zasady gry są bardzo proste: Twoim zadaniem jest zmienianie koloru piłki na kolor cegły, z którą piłka się zderzy. Gdy kolor będzie taki sam cegła zostanie zniszczona, w przeciwnym wypadku stracisz życie.

Pobierz z Google Play

Zrzut ekranu pozimu 37/40 5-6 kolorów

Dodatkowo można zmienić kierunek ruchu piłki, przez co nie musimy czekać wieczność aż trafi w ostatni blok.

QR Code Google Play Bricks Color Pick

Zrzut ekranu poziom 62/80 (Tryb relaks)

Ostatnie wpisy

  • Jak skompilować bibliotekę OpenAL z Oboe dla systemu Android
  • Lazarus 2.0.12 wydany
  • Jak naprawić zamrażanie GUI LMMS w systemie Linux?
  • Jak zaktualizować wine do wersji 5.0.0 w Linux Mint 19 / Ubuntu 18
  • Agile Commander 1.2.3 wydany!

Kategorie

  • DevBlog
  • Linux
    • Kurs bash
    • Narzędzie WoeUSB
  • Programowanie
    • Język D (dlang)
      • Kontrolki DlangUI
    • Język Object Pascal
      • Lazarus (pl)
    • Narzędzie make
  • Promocja
  • Tworzenie gier
    • Castle Engine (pl)
    • Godot
  • Windows 10
    • Narzędzie WoeUSB

Produkty:
Agile Commander
Bricks Color Pick

 

 

Digital Karabela – Andrzej Kilijański
76-015 Wyszebórz 32, Poland
https://digitalkarabela.com
Kontakt
Polityka prywatności