Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
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í.
Avatar
magic44
Tvůrce
Avatar
magic44:25.6.2015 16:02

Ahoj, vytvářím hru a používám pixel collision (http://xbox.create.msdn.com/…_2d_perpixel).
Zde je potřeba získat data z obrázku (Texture2D):

Texture2D blockTexture = Content.Load<Texture2D>("Block");

Color[] blockTextureData = new Color[blockTexture.Width * blockTexture.Height];
blockTexture.GetData(blockTextureData);

Jenže problém je, že obrázky potřebuji vykreslovat v jiných rozměrech, než ve kterých jsou uložené (to není problém), ale potřebuji, aby data získaná z obrázku byla shodná s tím co vykresluji. Když to načtu v jedněch rozměrech (s těmi se bude počítat kolize) a ve druhých je budu vykreslovat, tak si to nebude odpovídat..
Pokoušel jsem se najít způsob, jak texture2d rovnou načíst s požadovanou šířkou a výškou (takovou, kterou budu obrázek vykreslovat), nebo je pak upravit, ale nic jsem nenašel..

Neví někdo co s tím?

Editováno 25.6.2015 16:03
Odpovědět
25.6.2015 16:02
Moudrý člověk nechce být lepší než ostatní, ale lepší, než byl sám včera.
Avatar
abushrek
Člen
Avatar
abushrek:25.6.2015 20:11
public SpriteBatch spriteBatch;
public Texture2D background;
protected override void LoadContent()
**{
spriteBatch = new SpriteBatch(GraphicsDevice);
background = Content.Load<Texture2D>(@"Cesta");
}**
protected override void Draw()
**{
spriteBatch.Draw(background,new Rectangle(poziceXova,poziceYova,background.Width/2,background.Height/2),Color.White);    //Zmenšení na polovinu
spriteBatch.Draw(background,new Rectangle(poziceXova,poziceYova,background.Width*2,background.Height*2),Color.White);    //Zvětšení 2x
}**
 
Nahoru Odpovědět
25.6.2015 20:11
Avatar
abushrek
Člen
Avatar
Odpovídá na magic44
abushrek:25.6.2015 20:15

Jinak to nevim v čem je problém, mi to načítá obrázky normálně ve velikosti jaké jsou.

 
Nahoru Odpovědět
25.6.2015 20:15
Avatar
magic44
Tvůrce
Avatar
Odpovídá na abushrek
magic44:25.6.2015 21:05

Problém je, že to co se vykresluje (když je to zmenšené) neodpovídá tomu z čeho se vypočítávají kolize:

Color[] blockTextureData = new Color[blockTexture.Width * blockTexture.Height];
blockTexture.GetData(blockTextureData);

Čili obrázek je vykreslen s poloviční velikostí, ale kolize se počítají z toho původního nezmenšeného. Tím pádem hra nefunguje.

Nahoru Odpovědět
25.6.2015 21:05
Moudrý člověk nechce být lepší než ostatní, ale lepší, než byl sám včera.
Avatar
abushrek
Člen
Avatar
Odpovídá na magic44
abushrek:25.6.2015 21:48

Aha tak to nevim jak to vyřešit zkus Stack Overflow třeba ti tam někdo poradí. Popř. zkus nahrát nějaký jiný obrázek a jestli ten nedělá to samé.

 
Nahoru Odpovědět
25.6.2015 21:48
Avatar
Odpovídá na magic44
Jakub Lásko[Saarix]:26.6.2015 8:14

Nejlepší řešení by bylo vyprdnout se na scale uvnitř hry a textury ukládat už v požadované velikosti. Ušetřil by sis tím práci.

Jinak by bylo potřeba zmenit velikost dané textury kódově a pak zní až tedy vytáhnout ty data aby odpovídaly.

Nahoru Odpovědět
26.6.2015 8:14
Časem je vše možné.
Avatar
magic44
Tvůrce
Avatar
Odpovídá na Jakub Lásko[Saarix]
magic44:26.6.2015 9:20

No to me taky napadlo, ale je to podle me dosti neprakticke mit vsechny objekty (obrazky) ze hry s danou velikosti.. pak bude potreba neco zmensit a budu muset zmensovat obrazek. Nevis, jak tu velikost zmenit kodove?

Nahoru Odpovědět
26.6.2015 9:20
Moudrý člověk nechce být lepší než ostatní, ale lepší, než byl sám včera.
Avatar
Odpovídá na magic44
Jakub Lásko[Saarix]:26.6.2015 11:10

Hele XNA mám doma, tak když dnes nezapomenu, tak si to otevřu amrknu se ti :-)

Nahoru Odpovědět
26.6.2015 11:10
Časem je vše možné.
Avatar
magic44
Tvůrce
Avatar
Odpovídá na Jakub Lásko[Saarix]
magic44:27.6.2015 18:10

Diky, rozhodne by mi to pomohlo :)

Nahoru Odpovědět
27.6.2015 18:10
Moudrý člověk nechce být lepší než ostatní, ale lepší, než byl sám včera.
Avatar
vodacek
Tvůrce
Avatar
Odpovídá na magic44
vodacek:27.6.2015 18:21

tady se nabízí nechat si to vykreslit se správným rozměrem do textury a tu pak používat pro detekci

a nebo použít jinou techniku pro kolize, ale záleží jak ten obrázek vypadá

 
Nahoru Odpovědět
27.6.2015 18:21
Avatar
magic44
Tvůrce
Avatar
Odpovídá na vodacek
magic44:27.6.2015 18:58

A to uložení/vykreslení do textury by se udělalo jak? Jinak bude se hrát za vlka (dejme tomu, že bude vypadat třeba takhle). Okolí (herní svět) by měla být prostě krajina, kopce atd..

Editováno 27.6.2015 18:59
Nahoru Odpovědět
27.6.2015 18:58
Moudrý člověk nechce být lepší než ostatní, ale lepší, než byl sám včera.
Avatar
vodacek
Tvůrce
Avatar
Odpovídá na magic44
vodacek:27.6.2015 19:07

a detekci po pixelech potřebuješ nač?

 
Nahoru Odpovědět
27.6.2015 19:07
Avatar
magic44
Tvůrce
Avatar
Odpovídá na vodacek
magic44:27.6.2015 19:15

No aby postava mohla chodila po kopci.. přeci potřebuji nějak ignorovat při kolizi plochy, které mají alba = 0.

Nahoru Odpovědět
27.6.2015 19:15
Moudrý člověk nechce být lepší než ostatní, ale lepší, než byl sám včera.
Avatar
vodacek
Tvůrce
Avatar
Odpovídá na magic44
vodacek:27.6.2015 19:18

aby chodila tak ti kolem ní stačí obdélník a nepotřebuješ dělat náročné kolize pixel po pixelu, pixel na pixel se používá třeba až když bys chtěl střílet, nebo něco co se nevyskytuje tak často

 
Nahoru Odpovědět
27.6.2015 19:18
Avatar
magic44
Tvůrce
Avatar
Odpovídá na vodacek
magic44:27.6.2015 19:29

Teď nějak nechápu. Potřebuji přeci nějak detekovat prostředí, třeba ten kopec..

Editováno 27.6.2015 19:30
Nahoru Odpovědět
27.6.2015 19:29
Moudrý člověk nechce být lepší než ostatní, ale lepší, než byl sám včera.
Avatar
vodacek
Tvůrce
Avatar
Odpovídá na magic44
vodacek:27.6.2015 19:30

copak to obdélník nesvede?

 
Nahoru Odpovědět
27.6.2015 19:30
Avatar
magic44
Tvůrce
Avatar
magic44:27.6.2015 19:34

jo vlk může být klidně obdélník, ale ten obdélník musí nějak přeci rozeznat "kulatý" kopec

Nahoru Odpovědět
27.6.2015 19:34
Moudrý člověk nechce být lepší než ostatní, ale lepší, než byl sám včera.
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 17 zpráv z 17.