Diskuze: 2D camera a vše kolem ní
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 11 zpráv z 11.
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.
Jo a ještě posílám kód kamery 
public class Camera
{
public Matrix Transform { get; private set; }
Viewport view;
Vector2 origin;
public Camera(Viewport view)
{
this.view = view;
}
public void Update(Rectangle rectangle)
{
this.origin=new Vector2(rectangle.X + (rectangle.Width / 2 - view.Width/2), rectangle.Y + (rectangle.Height / 2 - view.Height/2));
Transform = Matrix.CreateScale(new Vector3(1, 1, 0)) * Matrix.CreateTranslation(new Vector3(-origin.X, -origin.Y, 0));
}
}
Tohle jsem také nedávno řešil a mám to udělané tak, že s pohybem hráče ověřuji jeho souřadnice, jestli není v okrajové zóně, pokud ne, tak posunu hráčem a nastavím posunutí kamery podle jeho souřadnic, pokud je v okrajové zóně, tak jen posunu hráčem.
Tohle je ověřování souřadnice Y.
if(hrac.y >= obrazovka.vyska/2 - hrac.vyska/2 && hrac.y + hrac.vyska <= mapa.vyska - obrazovka.vyska/2 + hrac.vyska/2)
posunuti.y = hrac.y + hrac.vyska/2 - obrazovka.vyska/2;
A tohle je vykreslení hráče.
vykreslit(hrac.obrazek, hrac.x - posunuti.x, hrac.y - posunuti.y);
Doufám, že jsem to dobře popsal a že to k něčemu bude.
Zjišťuju že jsem ve stavu kdy nevnímám ani sám sebe
.. musím asi na chvilku na
vzduch.
posunuti = posunuti kamery ?
No přiznám se že ta kamera je tak nějak splácaná podle internetu.Ten origin je střed posunutí kamery, tedy zaměřená na hráče, problém je že to vlastně není uprostřed obrazovky. POtřeboval bych aby ta kamera byla opravdu uprostřed obrazovky, ted když chodím bludištěm hráč je jakoby furt na kraji obrazovky a svět se hýbe. Dokud nejsi na okraji tka to vypadá celkem dobře.
Takže vždy kontrola zda se neblíží ke kraji a zastavím posun kamery ale pouze posunu hráče ? Jo to by šlo. Jinak vykreslování mám přes ten Matrix takto
g.spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, null, null, null, null, camera.Transform);
g.spriteBatch.End();
Už dneska asi nemůžu pokračovat -> brain.Dispose() 
Díky 
Ano, posunutí asi znamená posunutí kamery. Ale nevím jak je to v C# se souřadnicemi. Já mám X = 0 a Y = 0 v levém horním rohu.
No to je tne problém, standartně je souřadnice také [0,0] ale kvůli těm
Matrix transformacím to mám jinak a já tomu nerozumím
. Někdo, kdo dělá v XNA a
tohle řešil ?
Dokázal by mě někdo navést správným směrem jak udělat jednoduchou
kameru z ptačí perspektivy ? Peru se s tím a nemůžu to nějak dát dokupy

Kdokoliv
už jsem
bezradnej...
Tak jsem se nakonec ponížil vykrást cizí kód, vcelku chápu funkčnost, ale jedna věc mi nefunguje. Potřebuju vykreslovat pouzey ty objekty, které jsou vidět na obrazovce. V tom kódu tam už je metoda, která by měla pravděpodobně fungovat ale nefunguje korektně (kod je zde http://stackoverflow.com/…llows-sprite). Nasměroval by mě někdo kudy kam ? Už z toho blbnu a ani pořádně už neuvažuju. Kvůli tomuhle jsem se zasekl.
To urcovani toho, co videt bude a co ne je ve 2D proste jen kolize dvou obdelniku - pokud se obdelnik obrazovky a obdelinik odpovidajici boundingboxu objektu protnou, pak objekt vykreslis, jinak ne, musis samozrejme do toho zahrnout veci jako zvetseni obrazku, pripadne rotaci.
Jinak to s tim posunem kamery - pres matice nevim, ale jinak bych to resil proste posunem a kraje pres min/max, neco jako
view.x = player.x-(screen.width/2)
a s tema krajema
view.x = min(map.width-screen.width,max(0,player.x-(screen.width/2)))
Zobrazeno 11 zpráv z 11.