IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Win Form - Vykreslení tiles

V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Petr Nymsa
Tvůrce
Avatar
Petr Nymsa:19.4.2013 22:21

Zdravím, přes rok více méně dělám programy, které nepotřebovali moc grafiku a je to tak trochu chyba. Nemám zkušenosti ohledně práce s grafikou apod. K problému. Mám jednoduchý, zatím celkem hloupý, generátor bludiště. A samozřejmě chci bludiště nějak zobrazit. Mám připravené obrázky 30x30, které znázorňují cestu / zeď. Bludiště mi vygeneruje pole int a podle hodnoty v poli vykreslím patřičný typ obrázku (cesta, zed). Do formu jsem si hodil panel a přes metodu Paint vykreslím na něj obrázky.

Problémy mám dva. První a zásadnější, je to pomalé. Druhý, když si přidám scrollování, pomalu se to překresluje, což je vlastně problém 1.

Je vhodné vykreslovat větší počet obrázků přes Panel a třídu Graphics ? Jakým způsobem to optimalizovat ? Nebo mám do panelu naházet PictureBoxy ?

Na kódu není nic zvláštního, projedu pole a vykreslím obrázky

Graphics g = panel.CreateGraphics();
            if (arr != null)
            {
                for (int x = 0; x < arr.GetLength(0); x++)
                {
                    for (int y = 0; y < arr.GetLength(1); y++)
                    {
                        if (arr[x, y] == 0)
                        {
                            g.DrawImage(Properties.Resources.tilePath, new Point(x * 32, y * 32));
                        }
                        else
                        {
                            g.DrawImage(Properties.Resources.tileWall, new Point(x * 32, y * 32));
                        }
                    }
                }
            }

Jak tedy postupovat ? Děkuju moc za všechny rady :) V grafice mám veliký mezery a chci tyto mezery zčásti opravit.

Odpovědět
19.4.2013 22:21
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Odpovídá na Petr Nymsa
Michal Žůrek - misaz:19.4.2013 22:26

GDI je pomelá za každých okolností, 30*30 je na generátor map moc, dej to 10*10 nebo ještě míň 5*5. To to však sice neovlivní, ale vyhneš se scrolování. Místo toho použij XNU, ta je několikrát násobně rychlejší.

 
Nahoru Odpovědět
19.4.2013 22:26
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovídá na Michal Žůrek - misaz
Petr Nymsa:19.4.2013 22:27

XNU ? Myslel jsi XNA ? Dobře, zmenším to, ale stejně, viděl jsem editory map i s většími tiles a ungovalo jim to perfektně. Nebo tam měli použitý právě to XNA ?

Nahoru Odpovědět
19.4.2013 22:27
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Odpovídá na Petr Nymsa
Michal Žůrek - misaz:19.4.2013 22:29

Na velikosti nezáleží, jen jsem ti to poradil aby ses vyhnul scrolování.

  1. pád: XNA
  2. pád (vidím): XNU

"GDI je pomalé za každých okolností"

 
Nahoru Odpovědět
19.4.2013 22:29
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovídá na Michal Žůrek - misaz
Petr Nymsa:19.4.2013 22:31

Jo s tou velikostí souhlasím. Díky :). Podle mě se tyto názvy nikdy neskloňují nebo jo ? Přijde mi to dost divné :D.

Nahoru Odpovědět
19.4.2013 22:31
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Odpovídá na Petr Nymsa
Michal Žůrek - misaz:19.4.2013 22:33

To je asi jedno jestli se skloňují nebo ne. Já skloňuji.

To je název (nikoli zkratka: http://cs.wikipedia.org/…icrosoft_XNA ), takže si myslím, že by se to skloňovat mělo.

 
Nahoru Odpovědět
19.4.2013 22:33
Avatar
paanoik
Člen
Avatar
Odpovídá na Petr Nymsa
paanoik:19.4.2013 23:11

XNA je na grafiku rozhodně lepší, nicméně doporučuju zkusit si pohrát i v tom čistém C#, pomůže to přemýšlet o věcech jinak .. optimalizovat. Není to vždycky jen o tom vybrat nejjednodušší cestu, která zvládne bruteforcem práci rychleji (protože jednou stejně na ty hranice narazí), ale o tom popřemýšlet, co je na konceptu špatně a jak by se to dalo vylepšit.
Vzpomínám, že jsem viděl (tuším v pictureboxu) poskládaný tileset z celkem 5000x5000px, který podporoval zoomování i skrolování a bez nějakého pozorovatelného trhání (a to v době, kdy XNA neexistovalo). Sám jsem si tam kdysi dávno zobrazoval ručně generovaný ohňostroj, který pro každý snímek překresloval klidně několik set až tisíc particles. Hlavní problém je neresetovat scénu, ale vykreslovat pouze změny - tj. pokud mi např. particle padá k zemi, přemažu původní pozici barvou pozadí, a umístím na novou. Ve výsledku to nemusí být ani rychlé, ale jelikož se vlastně všechno vykresluje "pořád", není to poznat.

 
Nahoru Odpovědět
19.4.2013 23:11
Avatar
Odpovídá na Michal Žůrek - misaz
Luboš Běhounek Satik:19.4.2013 23:44

Skloňovat XNA mi přijde jako zrůdnost :D

Každopádně GDI není zase tak tragicky pomalé, v 1920x1080 by se dalo vytáhnout tak 50 fps z hodně primitivní scény na nějakém běžném PC.

Nahoru Odpovědět
19.4.2013 23:44
https://www.facebook.com/peasantsandcastles/
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 8.