Avatar
magic44
Redaktor
Avatar
magic44:

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:
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:

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
Redaktor
Avatar
Odpovídá na abushrek
magic44:

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:

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]:

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  +1 26.6.2015 8:14
Časem je vše možné.
Avatar
magic44
Redaktor
Avatar
Odpovídá na Jakub Lásko[Saarix]
magic44:

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]:

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
Redaktor
Avatar
Odpovídá na Jakub Lásko[Saarix]
magic44:

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
Redaktor
Avatar
Odpovídá na magic44
vodacek:

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
Redaktor
Avatar
Odpovídá na vodacek
magic44:

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
Redaktor
Avatar
Odpovídá na magic44
vodacek:

a detekci po pixelech potřebuješ nač?

 
Nahoru Odpovědět 27.6.2015 19:07
Avatar
magic44
Redaktor
Avatar
Odpovídá na vodacek
magic44:

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
Redaktor
Avatar
Odpovídá na magic44
vodacek:

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
Redaktor
Avatar
Odpovídá na vodacek
magic44:

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
Redaktor
Avatar
Odpovídá na magic44
vodacek:

copak to obdélník nesvede?

 
Nahoru Odpovědět 27.6.2015 19:30
Avatar
magic44
Redaktor
Avatar
magic44:

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.