XNA - Texture2D podruhe!!!   otázka

C#, XNA

Chtel bych poradit. Jde v XNA si udelat z vice Texture2D udelat novou jednu Texturu2D ???

Jako, ze bych si z vic obrazku udelal jeden novy, abych to pokazde nemusel slozite vykreslovat.

Konkretne pozadi hry se bude vykreslovat z zpousty stejne se opakujicich se casti ....

PS pro pana Tomáše Hercega: A mohl by jste mi prosim napsat jak to lze udelat.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tak po prvé, prečo zakladáte dve vlákna kvôli jednej otázke.

Ak by ste mal tu ochotu pozrieť sa do Object Browseru na definície metód triedy Texture2D, zistil by ste, že obsahuje metódy GetData a SetData. Ako datový typ dáte <Color> a ako parameter dáte už nadeklarovaé pole s toľko položkami, ako je súčin jednotlivých rozmerov textúry.Teda tex.Width * tex.Height .Pozíciu v poli spočítate ako x + y * width . Takže jedno pole pre zdrojovú textúru, druhé pole pre cieľovú textúru. Najprv si vytiahnete obrazové dáta zdrojovej textúry do poľa. Potom prejdete jedným for cyklom celé pole zdrojovej textúry, index prevediete na dve súradnice, pripočítate súradnice udávajúce polohu ľavého horného rohu zdrojovej textúry na cieľovej textúre, naspäť prevediete na index v cieľovej textúre a zapíšete do poľa pre cieľovú textúru. Po takomto vykreslení textúr do jednej si vytvoríte novú inštanciu Texture2D, ktorá bude cieľová textúra a na nej zavoláte SetData a odkaz na pole, kde máte obrazové dáta pre cieľovu textúru. Ak si kód neviete spraviť sám, môžem urobiť aj kód, ale skúste to aspoň. A hlavne si zmerajte FPS pri oboch možných postupoch a takto najlepšie zistíte, či sa oplatí to preklesľovať do jednej textúry. FPS zistíte ako 1 / čas medzi snímkami.ten máte zahrabaný v parametri metódy Update.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ahoj,

pro zjednoduseni jsem si zkusil napsat priklad, kdy jsem chtel jen zkopirovat jednu Texturu2D do druhe. Viz. nasledujici kod:

ball = Content.Load<Texture2D>("ball");

Color[] colors2D = new Color[80 * 80];

ball.GetData(colors2D);

copyball = new Texture2D(GraphicsDevice, 80, 80);

copyball.SetData<Color>(colors2D);

Pri zpusteni program zahlasi na radku ball.GetData(colors2D); vyjimku:

An InvalidOperationException exception is thrown when the failure to invoke a method is caused by a reason other than an invalid argument. This might be thrown by .NET Framework methods when the underlying Win32 method cannot be invoked.

Muzes mi s tim pomoct?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Nie je tam určený typ a tá metéda je generická.Taktiež neviem či to bude chcieť nahádzať dáta do 2D poľa, do 1D poľa by malo.

ball.GetData<Color>(olors);

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback