Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Problem z GDI+


Rekomendowane odpowiedzi

Opublikowano

Witam, robię grę 2D w AutoIt. Obecnie jest ona zrobiona na silniku Irrlicht lecz postanowiłem przerobić grę na zwykłe GDI+. Podczas testowania rysowania obrazków przez GDI+ napotkałem problem. Mianowicie jeżeli rysuję dużą ilość tekstur małych rozmiarów (32x32) na dużym oknie (800x448) rysują się one prawidłowo lecz podczas rysowania widać tak jakby "etapy rysowania" tzn. GUI gry trochę miga. Poniżej kod:

 

#include <GDIPlus.au3>
#include <GUIConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
$hGUI = GUICreate("GDI+", 800, 448)
GUISetState(@SW_SHOW)
_GDIPlus_Startup()
Global $hBitmap = _GDIPlus_BitmapCreateFromFile("Wood0.bmp")
Global $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
GUIRegisterMsg(0x0F, "WM_PAINT")
_GDIPlus_GraphicsClear($hGraphic,0xFF0099FF)
For $iX = 0 To 24
	For $iY = 0 To 13
		_GDIPlus_GraphicsDrawImageRect($hGraphic, $hBitmap, $iX * 32, $iY * 32,32,32)
	Next
Next
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_BitmapDispose($hBitmap)
_GDIPlus_Shutdown()
Func WM_PAINT($hWnd, $msg, $wParam, $lParam)
_GDIPlus_GraphicsClear($hGraphic,0xFF0099FF)
For $iX = 0 To 24
	For $iY = 0 To 12
		_GDIPlus_GraphicsDrawImageRect($hGraphic, $hBitmap, $iX * 32, $iY * 32,32,32)
	Next
Next
EndFunc

Wood0.bmp:
958441418611807674550.png

Prosiłbym o pomoc w przerobieniu kodu by GUI nie migało podczas rysowania tekstur. Gra jest oparta o gre Terraria więc musi rysować każdy blok osobno bo będą one różne

Cipka - Najlepszy silnik na świecie. Działa z tłokiem każdej średnicy, wbudowana funkcja samosmarowania, odpalasz jednym palcem i co miesiąc sam się wymienia olej. Szkoda tylko że ma taki pojebany komputer pokładowy.

Opublikowano

GDI+ to średni pomysł, użyj podwójnego buforowania albo nadpisuj tylko zmieniające się fragmenty - zrób porządny algorytm pod to.

Skoro GDI+ to średni pomysł masz jakiś inny pomysł na grę 2D w autoit żeby nie zamulało rysowania grafiki i nie migało. Nie mogę zrobić algorytmu ponieważ gra musi się dodatkowo odświeżać cała gdy zminimalizujesz i zmaksymalizujesz grę wtedy też miga.

Cipka - Najlepszy silnik na świecie. Działa z tłokiem każdej średnicy, wbudowana funkcja samosmarowania, odpalasz jednym palcem i co miesiąc sam się wymienia olej. Szkoda tylko że ma taki pojebany komputer pokładowy.

Opublikowano

Masz zrobiony przeze mnie tutek do Irrlichta(przez wojtek333314 tylko zbanowali mnie na tamtym koncie ...) i nie będzie zamulało :)
Po co chcesz to na GDI+ które jest wolniejsze przerabiać? :P 

 

Miga = problem z podówjnym buforowaniem tak jak wyzej kolega napisał. 

http://www.autoitscript.com/forum/topic/105866-gdi-doublebuffer/

 

w linku wyżej druga odpowiedź wydaje się sensowna, przeanalizuj i sprawdź ;) 

Opublikowano

Masz zrobiony przeze mnie tutek do Irrlichta(przez wojtek333314 tylko zbanowali mnie na tamtym koncie ...) i nie będzie zamulało :)

Po co chcesz to na GDI+ które jest wolniejsze przerabiać? :P

 

Miga = problem z podówjnym buforowaniem tak jak wyzej kolega napisał. 

http://www.autoitscript.com/forum/topic/105866-gdi-doublebuffer/

 

w linku wyżej druga odpowiedź wydaje się sensowna, przeanalizuj i sprawdź ;)

Ta gra jest już zrobiona w irrlicht ale brakuje mi irrlichu paru rzeczy dla tego chcę to zrobić na GDI+ nie ma przede wszystkim czegoś takiego że jak rysuje 2DElement to zwraca mi do niego handle i potem moge np zmieniac teksture zmieniac pozycje itp takto musze od nowa cala scene rysowac w kolko.

 

Ten link co dałeś to nie zrozumiem bo słabo znam angielski

Cipka - Najlepszy silnik na świecie. Działa z tłokiem każdej średnicy, wbudowana funkcja samosmarowania, odpalasz jednym palcem i co miesiąc sam się wymienia olej. Szkoda tylko że ma taki pojebany komputer pokładowy.

Opublikowano

Użyj innego języka w takim razie, bo AU3 jest ciulowy jeśli chodzi o wydajność skryptów, w nim odpowiednio zoptymalizownej gry nie napiszesz ;)

C++ i SFML mogę ci polecić, bardzo prosta i fajna biblioteka.

Znam podstawy C++ ale zrezygnowałem z dalszego programowania w nim bo składnia jest trudna i typy zmiennych mnie przerażają...

Cipka - Najlepszy silnik na świecie. Działa z tłokiem każdej średnicy, wbudowana funkcja samosmarowania, odpalasz jednym palcem i co miesiąc sam się wymienia olej. Szkoda tylko że ma taki pojebany komputer pokładowy.

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...