Diskuze: C# rychlost vykreslování
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 14 zpráv z 14.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Nevím jak dalece to máš optimalizované , ale základní rady jsou :
1/ nevykreslovat zbytečně to co je mimo canvas
2/ je možné vytvořit to pozadí jako statický obrázek, který bude o kousek
přesahovat mimo scénu, a při posunu tedy jen posuneš tento obrázek, na
který budeš vykreslovat jen nové změny, a ne všechno odznovu
1/ nic mimo nevykresluju
2/ četl jsem si http://www.itnetwork.cz/…-ve-2d-hrach a všechno co šlo
už jsem použil
A není možnost že někde před vykreslením provádíš nějaké složité
výpočty, které ti to brzdí ? jelikož podle screenshotu to nevypadá ,že by
to mělo být až tak náročné,aby to zatrhávalo 
private void control(int x, int y, int plus_x, int plus_y)
{
if (!(x < 0) & !(y < 0))
{
if (dohled[1, x + plus_x, y + plus_y] & position[x + plus_x, y + plus_y] != "zed")
{
dohled[1, x, y] = true;
}
}
}
private void control2(int x, int y, int plus_x1, int plus_y1, int plus_x2, int plus_y2)
{
if (!(x < 0) & !(y < 0))
{
if (!dohled[1, x, y])
{
if (dohled[1, x + plus_x1, y + plus_y1] & position[x + plus_x1, y + plus_y1] != "zed" || dohled[1, x + plus_x2, y + plus_y2] & position[x + plus_x2, y + plus_y2] != "zed")
{
dohled[1, x, y] = true;
}
}
}
}
}
private void kontrola_dohledu()
{
dohled[1, player_x, player_y] = true;
for (int i = 1; i <= 4; i++)
{
//nahoru
control(player_x, player_y - i, 0, 1);
//dolu
control(player_x, player_y + i, 0, -1);
//doprava
control(player_x + i, player_y, -1, 0);
//doleva
control(player_x - i, player_y, 1, 0);
}
for (int i = 1; i <= 3; i++)
{
//nahore vlevo doleva
control2(player_x - i, player_y - 1, 1, 0, 0, 1);
//nahore vlevo nahoru
control2(player_x - 1, player_y - i, 1, 0, 0, 1);
//nahore vpravo doprava
control2(player_x + i, player_y - 1, -1, 0, 0, 1);
//nahore vpravo nahoru
control2(player_x + 1, player_y - i, -1, 0, 0, 1);
//dole vlevlo doleva
control2(player_x - i, player_y + 1, 1, 0, 0, -1);
//dole vlevo dolu
control2(player_x - 1, player_y + i, 1, 0, 0, -1);
//dole vpravo doprava
control2(player_x + i, player_y + 1, -1, 0, 0, -1);
//dole vpravo dolu
control2(player_x + 1, player_y + i, -1, 0, 0, -1);
}
//nahore vlevo
control2(player_x - 2, player_y - 2, 1, 0, 0, 1);
//nahore vpravo
control2(player_x + 2, player_y - 2, -1, 0, 0, 1);
//dole vlevo
control2(player_x - 2, player_y + 2, 1, 0, 0, -1);
//dole vpravo
control2(player_x + 2, player_y + 2, -1, 0, 0, -1);
}
private void panel1_Paint(object sender, PaintEventArgs e)
{
Graphics gr = e.Graphics;
for (int y = 0; y < 18; y++)
{
for (int x = 0; x < 18; x++)
{
if (dohled[1, x, y] || dohled[0, x, y])
{
if (position[x, y] == "nic")
{
gr.FillRectangle(Brushes.Gray, x * 25, y * 25, 25, 25);
}
else if (position[x, y] == "zed")
{
gr.FillRectangle(Brushes.Orange, x * 25, y * 25, 25, 25);
}
else if (position[x, y] == "player")
{
gr.FillRectangle(Brushes.Blue, x * 25, y * 25, 25, 25);
}
if (dohled[0, x, y] & !dohled[1, x, y]) gr.DrawImage(bit, x * 25, y * 25, 25, 25);
}
}
}
}
nic slozitejsiho tam nemam
Chápu to dobře, že ta mapa je o velikosti XY, kde vidíš její část a
tam kde je hráč tak se vykresluje extra povrch (jakoby viditelnost)? To tvoje
mi přijde celkem zbytečně složité 
No, už jsem C# nějakou dobu neviděl,ale podle zběžného pohledu tam
nevidím nic, co by mělo nějak extra způsobovat lagy 
A když přihlídnu k tomu že skoro stejně jsem měl napsaný i vykreslovací engine pro isometrickou mapu i s texturami a korekcemi úhlů pohledu, tak se mi nezdá že by C# dělal takovéhle problémy...
ne lagy, ale že se to pomalu vykresluje
kde jsem byl a uz tam nevidim se vykresli mapa a extra povrch (jakoby viditelnost),kam vidim vykresli jen povrch a kam nevidim nevykresli se nic
Asi jsem to špatně zformuloval, ale hýbe se s hráčem i mapa? Nebo je to jen platforma? Jestli je mapa statická tak já řešil vykreslování tak, že jsem měl uloženou scénu a vykresloval na ní jen nové změny (prošel jsem celou scénu a jestli potřeboval daný prvek vykreslit, tak jsem ho vykreslil). Ale to bys tam trošku musel zapojit třídy a měl bys to i celkem hezky napsané.
asi zkusim to vykreslování jen nové změny - to by mohlo fungovat
Můžeš si klidně udělat frontu (Queue) a házet mu tam jednotlivé políčka, které se mají vykreslit. Ty je vždycky vezmeš, vykreslíš a vyhodíš. A házet je tam budeš tak, že když pohneš tou figurkou, tak prohlídneš okolí a naházíš tam ty nové (na které vidíš po novém kroku) a ty staré (na které už nevidíš). Pak zavoláš znovu vykreslení mapy a opakuješ to od mé druhé věty.
Možností máš dost, ale to vše záleží na kontextu hry.
Zobrazeno 14 zpráv z 14.
