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.

Tvůrce

Zobrazeno 11 zpráv z 11.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
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.