Seznámení s XNA frameworkem

1. díl - Seznámení s XNA frameworkem

Tomáš Herceg       14.02.2008       VB.NET, XNA, Grafika       14931 zobrazení

Programování počítačových her je činností velmi zábavnou, a tak není divu, že vzniknul XNA framework, který tuto činnost usnadňuje a umožňuje snadno, rychle a zdarma vyvíjet hry. V tomto díle si vysvětlíme, co to XNA framework je, ukážeme si, co vše budete k vývoji potřebovat, a hned se naučíme načítat obrázky a vykreslovat je do okna.

Upozornění: Tento seriál je určen pokročilejším programátorům, které zajímá tvorba počítačových her. Pokud se teprve učíte programovat a nemáte moc zkušeností, nemá smysl, abyste se vrhli po hlavě přímo do vody, splácáním kousků kódu, které zkopírujete z tohoto seriálu, se nic nenaučíte a budete mít v hlavě zmatek. Můžete raději zkusit Seriál VB.NET pro úplné začátečníky.

Co je to XNA?

Pokud jste již zkoušeli napsat nějakou větší počítačovou hru, jejíž vývoj trvá déle než jedno či dvě odpoledne, pravděpodobně jste sáhli po technologii DirectX, případně OpenGL. Jestliže jste v těchto technologiích již něco naprogramovali, jistě mi dáte za pravdu, že občas musíme kvůli banálním věcem napsat poměrně dost kódu. Typickým příkladem je načtení obrázku ve formátu PNG tak, aby byla správně respektována průhlednost, nebo načtení 3D modelu, který nám poslal grafik.

Pokud například píšeme v DirectX, musíme hlídat i spoustu dalších potencionálních problémů - pokud nám uživatel během hry minimalizuje okno a po čase jej zase obnoví, když se vrací do hry, je třeba do paměti grafické karty načíst znovu všechny textury a data, která z ní mezitím vypadla. Na tuto a spoustu dalších maličkostí, které ale mají velký význam, musíme bohužel myslet, když hru programujeme.

Naše hra RoboEmpire anebo co všechno se v XNA dá napsat

Proto Microsoft vyvinul framework XNA. Velké komerční firmy, které tvoří gigantické hry typu Oblivion, asi "současné" XNA zajímat nebude (pro ně Microsoft plánuje speciální edici s pokročilými nástroji pro práci v týmu). XNA je totiž zatím určeno zejména pro studenty a menší herní vývojové týmy, tedy pro ty, které programování her baví, ale mají problém s komplexností DirectX, ve kterém si sice můžeme nastavit a přizpůsobit úplně vše, ale u jednodušších her tato rozsáhlost spíše vadí.

XNA framework nám dovoluje soustředit se pouze na naši herní logiku, tedy na to, co má hra dělat ve skutečnosti. Nemusí nás zajímat, na jakém hardware hra poběží, je nám jedno, jakou má hráč grafickou kartu a jestli tato karta umí to či ono, můžeme se plně soustředit na funkcionalitu hry. Hry napsané v XNA mohou běžet jak na PC s Windows XP a vyšším, tak i na herních konzolích XBox 360 (na to ale musíte mít zakoupené předplatné XNA Creators Club Subscription, které sice není drahé, ale nepodařilo se nám jej zakoupit z České republiky). Hry pro Windows můžete v XNA vyvíjet zcela zdarma, a to i komerčně.

Jinak ještě upozorňuji, že XNA je jednom nadstavba nad rozhraním DirectX, jeho výhodou je to, že spoustu funkcí, které bychom v DirectX museli složitě psát, už XNA obsahuje. Kromě podpory pro různé formáty obrázků a 3D modelů zde máme i spoustu funkcí pro počítání s maticemi a vektory, engine pro přehrávání zvuků a hudby, funkce pro komunikaci po síti atd.

Co budeme potřebovat?

Pro vývoj v XNA potřebujete stáhnout a nainstalovat několik produktů, všechny jsou k dispozici zdarma. XNA oficiálně podporuje pouze jazyk C#, ale to neznamená, že z jazyka Visual Basic .NET není možné XNA používat, i když to mnoho lidí tvrdí. Máme zde bohužel jistá omezení - knihovny XNA můžeme plně využívat z jakéhokoliv jazyka postaveného na .NET frameworku, ale pro pohodlný vývoj v XNA jsou k dispozici různé nástroje a doplňky do vývojového prostředí, které bohužel pro Visual Basic .NET dostupné nejsou. Musíme si tedy poradit jinak (je to trošku krkolomné a pokud toto řešení používáte, neobracejte se na oficiální technickou podporu, VB.NET oficiálně podporován není).

1) Jako první budete potřebovat vývojové prostředí Visual Basic 2005 Express Edition nebo libovolnou edici (placeného) Visual Studio 2005 s nainstalovanou podporou jazyka Visual Basic .NET. Pokud máte verzi 2008, budou v ní jisté odlišnosti, ale fungovat by měla také. Pokud nemáte nainstalované velké Visual Studio 2005, musíte si nainstalovat navíc ještě Visual C# 2005 Express (jinak vám XNA nepůjde nainstalovat; pokud máte C# verzi 2008, musíte nainstalovat i verzi 2005).

2) Stáhněte a nainstalujte všechny aktualizace, hlavně Service Pack 1 pro Express edice nebo pro velké Visual Studio.

3) Dále budete potřebovat XNA Game Studio Express 2.0, což je sada nástrojů pro vývoj v XNA spolu se samotnými knihovnami XNA Frameworku.

4) V neposlední řadě musíte stáhnout a nainstalovat tuto šablonu XNA projektu pro VB.NET a uložit ji (nerozbalovat!!!) do adresáře Dokumenty\Visual Studio 200X\Templates\ProjectTemplates\Visual Basic (kde X je buď 5 nebo 8 podle vaší verze Visual Studia). Tím se vám do nabídky pro výběr nového projektu přidá i nový typ Windows Game, což je náš projekt nastavený pro použití XNA.
Zatímco předchozí 3 body jsou oficiální downloady od Microsoftu, tato šablona ne. Našel jsem ji zde a upravil jsem ji pro potřeby tohoto tutoriálu (přeložil jsem některé komentáře a trochu ji pročistil).

Na co se můžete v rámci tohoto seriálu těšit?

Než se vám všechny balíčky stáhnou a nainstalují, budu chvíli psát o tom, na co se můžete těšit. Bude toho docela dost, samozřejmě bude chvíli trvat, než najdu čas na napsání všech dílů.

  • Základy XNA a práce s 2D grafikou
    • Vykreslování obrázků
    • Práce s fonty
  • 3D grafika
    • Trocha nutné (anebo nudné) teorie - matice, vektory, transformace
    • Načtení a vykreslení 3D modelu
    • Renderování terénu
    • Práce s Vertex a Pixel shadery

Tento seriál nebude o vytváření 3D modelů ani 2D textur, budeme používat volně dostupnou grafiku z Internetu nebo z XNA Starter Kitů.

Náš první projekt

Pokud již máte vše nainstalováno, spusťte svoje vývojové prostředí a vytvořte nový projekt typu Windows Game (VB.NET). V každé verzi Visual Studia to vypadá trochu jinak, ale věřím, že tento typ projektu bez problémů najdete.

Vytvoření nového projektu Windows Game

Pokud pracujete ve Visual Studio 2008 (včetně Express edition), musíte po vytvoření projektu nastavit ve vlastnostech projektu verzi .NET Frameworku na 2.0. Uložte tedy projekt stisknutím kláves Ctrl+Shift+S a otevřete vlastnosti projektu:

 Nastavení verze .NET Frameworku pro Visual Studio 2008

Po vytvoření projektu se nám vygeneruje několik souborů. Pro nás zatím bude nejdůležitější třída Game - je to kostra celé hry. Pokud nyní projekt zkompilujeme a spustíme, objeví se prázdné výchozí okno s XNA hrou:

Výchozí prázdné okno XNA hry

Jak to v XNA funguje?

To, že se po spuštění projektu zobrazilo prázdné okno, má za sebou poměrně složitou vnitřní režii. My se nyní podíváme na strukturu našeho projektu, abychom pochopili, jak to všecho funguje a kam budeme psát kód. Jak je vidět v podokně Solution Explorer, v našem projektu máme dvě třídy - Program a Game.

Třída Program obsahuje statickou metodu Main, která je vstupním bodem programu, tady se začíná provádět kód. Tato metoda je velmi jednoduchá, vytvoří jen novou instanci třídy Game a zavolá na ní metodu Run.

Třída Game reprezentuje naši hru a má několik základních metod, které mají svou funkci a do kterých budeme zapisovat náš kód.

Metoda Initialize

Tato metoda se spustí vždy na začátku ještě před načítáním herního obsahu. Uvnitř této metody budeme inicializovat některé herní objekty, např. SpriteBatch, který vykresluje 2D obrázky.

Metoda LoadContent

V každé hře používáme nějakou grafiku - obrázky, 3D modely s texturami, shadery. Tato data je třeba někde načíst, správné místo je právě uvnitř metody LoadContent. Tato metoda se totiž spustí vždy, když je načtení objektů potřeba.Typicky pokud uživatel minimalizuje okno aplikace, paměť grafické karty se vyprázdní, protože se musí vykreslovat okna ve Windows, a při návratu do hry je třeba do paměti opět načíst všechny textury atd. Ve všech těchto případech se zavolá metoda LoadContent, takže pokud načítání všeho umístíte sem, budete mít všechen obsah vždy načten.

Metody Update a Draw

Jakmile už hra běží, typicky se vždy přepočítají změny ve scéně a zareaguje se na vstup z klávesnice či z myši, a pak se celá scéna vykreslí. Tento cyklus se opakuje asi tak 60x za sekundu, aby byl pohyb plynulý, záleží samozřejmě také na výkonu počítače, kolikrát tyto náročné procesy stihne provést. Častěji než 60x za sekundu se zase většinou nepřepočítává, protože to je již zbytečné.

Dovnitř metody Update tedy napíšeme kód, kde budeme aktualizovat pozice objektů a modelů ve hře, a samozřejmě také reagovat na stisky kláves atd. V metodě Draw pak provádíme vykreslení celé scény.

Komentáře uvnitř třídy Game jsem přeložil do češtiny, takže by vám všem mělo být jasné, co se kde děje a co který řádek provádí.

Content Pipeline

XNA přineslo mimo jiné i revoluční myšlenku tzv. Content Pipeline. Jedná se o společné rozhraní pro načítání a práci s herním obsahem, tedy s texturami, modely, shadery atd. Pokud programujete s XNA v C#, můžete Content Pipeline využít velmi snadno, protože ji podporuje přímo vývojové prostředí Visual C#. Při kompilaci se všechen herní obsah zabalí a zkonvertuje do obecného formátu xnb. Je to mimo jiné i kvůli kompatibilitě s konzolemi XBox 360, protože ty třeba neumí pracovat pořádně s filesystémem tak, jak jej známe z .NET frameworku. Tímto způsobem jim všechno potřebné snadno zpřístupníme.

VB.NET má s Content Pipeline trochu problémy, ale řeší je naše šablona. Vše, co nahrajeme do složky Content a přidáme do projektu, se automaticky zkompiluje a přidá do Content Pipeline. Kvůli tomu je také v projektu složka VBContentManager se dvěma třídami, které se o tuto funkcionalitu starají (víceméně to funguje tak, že vygenerují fiktivní C# projekt a pomocí kompilátoru MSBuild zkompilují soubory ze složky Content jako obsah Content Pipeline) a přibalí je k tomuto projektu.

Vykreslení 2D obrázku a jednoduchá animace

Dost už bylo teorie, vrhneme se ještě na chvíli do programování. Nyní chceme přidat do projektu obrázek míčku a někam jej vykreslit. Pro obyčejný 2D obrázek se používá datový typ Texture2D, takže si nadeklarujeme proměnnou ball typu Texture2D. Tento řádek přidejte nahoru k deklaracím (ne do procedury!).

Private ball As Texture2D       ' obrázek míčku

Obrázek míčku

Nyní si stáhněte tento obrázek míčku (klikněte na něj pravým tlačítkem a vyberte možnost Uložit obrázek jako...) a přidejte jej do projektu do složky Content vybráním položky Add Existing Item z kontextového menu.

Přidání obrázku do projektu

Nyní musíme samotný obrázek načíst, abychom jej mohli použít ve hře. Načítání obsahu provedeme v metodě LoadContent, vložte do ní tedy tento kód (pod uvedený komentář):

' >> Zde následuje kód pro načtení herního obsahu
ball = Content.Load(Of Texture2D)("Content\ball")

Možná se pozastavujete nad zvláštní závorkou (Of Texture2D). Metoda Load se dá používat pro jakýkoliv datový typ a protože proměnná ball je typu Texture2D, musí i metoda Load vracet hodnotu datového typu Texture2D. Je to to samé, jako když pracujeme s generickým seznamem - Dim seznam As New List(Of String). Jako parametr předáme metodě Load cestu k danému souboru (bez přípony, ale i s názvem složky Content).

Tímto jedním řádkem jsme načetli obrázek do proměnné ball a můžeme jej použít pro vykreslování v metodě Draw. Dovnitř metody Draw tedy napište tento kód, který nám obrázek vykreslí:

' >> Zde následuje kód pro vykreslení scény
SpriteBatch.Begin()
SpriteBatch.Draw(ball, Vector2.Zero, Color.White)
SpriteBatch.End()

Jak jsem již podotknul na začátku, pro vykreslování 2D záležitostí používáme objekt SpriteBatch. Všechny 2D prvky musíme vykreslit mezi zavoláním metod SpriteBatch.Begin a SpriteBatch.End. Vykreslování obrázků je totiž časově náročnější operace a celé to probíhá podstatně rychleji, pokud vykreslujeme víc obrázků hned za sebou. Když to zjednoduším, tak SpriteBatch.Begin začne "střádat" vykreslované obrázky a SpriteBatch.End je všechny odešle na grafickou kartu najednou, aby to proběhlo rychleji. Všechno vykreslování tedy musíme provést mezi voláním těchto dvou metod.

Samotné vykreslování provedeme zavoláním SpriteBatch.Draw. Jako první parametr předáme obrázek, který chceme vykreslit, jako druhý parametr předáme pozici (datový typ Vector2, který nese souřadnice X a Y) a nakonec barvu světla (v našem případě bílá). Vector2.Zero reprezentuje horní levý roh, pokud bychom chtěli jinou pozici, jednoduše napíšeme např. New Vector2(30, 50), kde [30, 50] jsou požadované souřadnice. Jako barvu světla jsme použili bílou, pokud bychom použili např. zelenou, obrázek by byl zabarven do zelena. Bílá je neutrální, takže s jeho barevností nic neudělá.

Když nyní projekt spustíme, vykreslí se nám obrázek míčku:

Vykreslený míček

Jednoduchá animace

Do deklarací si přidáme dvě pole - ballX a ballY. Každé pole bude mít 6 prvků a budou v nich uloženy souřadnice jednotlivých míčků.

Private ballX(5), ballY(5) As Double   ' souřadnice míčků

Nyní musíme v metodě Update každý snímek přepočítávat pozice našich šesti míčků, které budeme vykreslovat. Vložte do ní tedy tento kód:

        ' >> Zde následuje kód pro přepočítání scény
For i As Integer = 0 To 5
ballX(i) = 400 + Math.Sin(gameTime.TotalGameTime.TotalMilliseconds * 0.01 + Math.PI / 3 * i) * 200
ballY(i) = 300 + Math.Cos(gameTime.TotalGameTime.TotalMilliseconds * 0.003 + Math.PI / 3 * i) * 200
Next

Tato metoda dostane jako parametr proměnnou gameTime, která nám poskytuje detailní informace o tom, jak dlouho trval poslední snímek, a jak dlouho již hra běží. V této proměnné máme 5 vlastností - ElapsedGameTime, ElapsedRealTime nám dávají informaci o délce trvání posledního snímku (přepočítání + vykreslení), vlastnosti TotalGameTime a TotalRealTime nás pak informují o čase, který uběhl od začátku hry. Vlastnosti *GameTime udává tzv. bezpečný čas (pokud by nějaký snímek trval příliš dlouho, neobsahuje tato hodnota skutečnou dobu trvání snímku, ale hodnotu asi 1/15 sekundy; je to kvůli tomu, aby nám např. při chvilkovém pozdržení najednou neposkočilo auto o 2 metry, protože vzdálenost, o jakou se za jeden snímek posuneme, závisí na délce trvání posledního snímku). Vlastnosti *RealTime udávají skutečný čas, takže pokud potřebujeme čas přesně, raději volíme tyto. Poslední je vlastnost IsRunningSlowly, která má hodnotu True, pokud počet snímků za sekundu klesne pod 15 fps. Můžeme tedy v takovém případě třeba vyhlásit, že počítač je příliš slabý na spuštění této hry, to už záleží na nás.

Pozici míčků vypočítávám pomocí funkcí Sin a Cos, jako úhel jim předávám něčím vynásobenou hodnotu gameTime.TotalGameTime.TotalMilliseconds, což je počet milisekund od začátku hry, a ještě k ní přičítám i-násobek třetiny pí, protože máme 6 míčků a potřebujeme je rovnoměrně rozvrstvit. Pokud nechápete, jak tento vzorec funguje, nic se neděje. Můžete si místo toho zkusit napsat odrážení míčků od stěn okna.

Aby se nám vykreslily všechny míčky, musíme také upravit kód, který jsme vložili do metody Draw. Vykreslíme všech 6 míčků na vypočítané souřadnice:

        ' >> Zde následuje kód pro vykreslení scény
SpriteBatch.Begin()
For i As Integer = 0 To 5
SpriteBatch.Draw(ball,
New Vector2(ballX(i), ballY(i)), Color.White)
Next
SpriteBatch.End()

Výsledek vypadá takto, míčky nám poletují v kruzích. Jen podotýkám, že není potřeba míček načítat šestkrát, pouze načtený obrázek míčku vykreslíme na 6 různých pozic.

Závěrem

Doufám, že se vám tento první díl o programování v XNA líbil a že vás navnadil začít si s XNA frameworkem hrát a poznávat jej. Programování her je v něm opravdu snadné a zábavné, to ostatně uvidíte u dalších dílů. Pro dnešek je to vše.

 

hodnocení článku

1 bodů / 1 hlasů       Hodnotit mohou jen registrované uživatelé.

 

Všechny díly tohoto seriálu

6. Trocha matematiky pro 3D 11.07.2008
5. Klávesnice a myš v XNA 30.03.2008
4. Textury a světla v XNA 24.02.2008
3. Generování terénu 20.02.2008
2. Vykreslujeme 3D model v XNA 17.02.2008
1. Seznámení s XNA frameworkem 14.02.2008

 

Mohlo by vás také zajímat

Řešené příklady v ASP.NET - díl 2.: Aplikace pro zamlouvání sedadel (část 2)

V této části si vysvětlíme základy používání LINQ to SQL a napíšeme si jednoduchou třídu, která bude vracet data, která potřebujeme ve stránce, a rezervovat jednotlivá sedadla.

Windows Presentation Foundation (WPF) - díl 4.: Architektura a objektový model WPF

Na jaké kompromisy museli architekti WPF frameworku přistoupit, aby nabídli vývojářům pohodlný vývoj ve vyšších programovacích jazycích a zároveň odpovídající výkon výsledného uživatelského prostředí? Tento článek se věnuje architektuře WPF frameworku.

Co je to .NET Framework 4.5?

V tomto článku se snažím nastínit rozdíl mezi .NET 4 a .NET 4.5 z pohledu zpětné kompatibility.

 

 

Nový příspěvek

 

Diskuse: Seznámení s XNA 2.0

stejne se s tim neda naprogramovat neco jako oblivion

nahlásit spamnahlásit spam -2 / 2 odpovědětodpovědět

Diskuse: Seznámení s XNA 2.0

mam VB.net 2010 a kdyz udelam novy projekt vyskočí mi tam plno chyb. Nevite co s tim?

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

Přesně to je i můj případ. Chyb to tam píše asi 45. Není to tím, že máme Visual Studio 2010?

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

Ano, to bude asi tím, XNA se od VS 2010 trochu změnilo.

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

Mám si teda stáhnout visual basic 2010?

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Co to píšu za blbosti, myslim visual basic 2008.

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

teda ne visual studio 2010 ale visual basic.NET 2010

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Diskuse: Seznámení s XNA 2.0

mam VB.net 2010 a kdyz udelam novy projekt vyskočí mi tam plno chyb. Nevite co s tim?

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

Diskuse: Seznámení s XNA 2.0

Mohl byste prosím aktualizovat tento článek pro VS 2010 a nejnovější XNA? Hlavně teda jak nainstalovat XNA pro Visual Basic.

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět

pls help kdyz to zapnu tak to vypize na tomhle radku : ball = Content.Load(Of Texture2D)("Content\ball") tohle : Error loading "Content\ball". File not found. A ten obrazek tam mam tak nevim co s tim je skousel jsem stim par veci ale nic nepomohlo. diky za odpoved

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

pls jak udelam ten .xna v csharp vubec s nim neumim proto delam s vb.

diky

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

Diskuse: Seznámení s XNA 2.0

mám takový menší problém s debugem, neustáme mi to vyhazuje tuto chybu (viz. screen)

http://screens.gold-files.cz/screen3.jpg

Používám Visual Basic 2008 Express Edition + XNA Game Studio 3.1

nahlásit spamnahlásit spam -2 / 2 odpovědětodpovědět

Diskuse: Seznámení s XNA 2.0

Dobrý den,

při pokusu o seznámení s XNA jsem se moc daleko nedostal :)

Postupoval jsem podle tohoto článku, ale ve finále se objeví chybová zpráva: "Error loading "Content\ball". File not found."

Místo "Content\ball" jsem zkoušel zadat "Content\ball.png" a dokonce ani úplná cesta nepomohla... stále "File not found!"

Nevíte proč?

Předem děkuji za pomoc

Josef F.

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

Tak jsem se ještě pokoušel přijít na problém a zjistil jsem,

že nelze najít soubor "Content\ball.xnb"

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

Tak vyřešeno.

soubor *.xnb si musím nejprve vytvořit v C(sharpu) a teprve poté ho nakopírovat do VB.

Řešení na lepší postup uvítám

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

Diskuse: Seznámení s XNA 2.0

Ahoj,

diky moc za navod, jen bych podotknul, ze pri zapnutem Option Strict hra nefunguje, v medode draw jsem musel upravit vykreslovani na

SpriteBatch.Draw(ball, New Vector2(Convert.ToSingle(ballX(i)), Convert.ToSingle(ballY(i))), Color.White)

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

Option Strict je zvrhlé nastavení, díkybohu že je standardně vypnuté.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Diskuse: Seznámení s XNA 2.0

Ahoj, je v XNA nějaká funkce na vykreslování čar, čtyřúhelníků atd.? Jak je třeba v normalni windows application:

e.graphics.drawline

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Diskuse: Seznámení s XNA 2.0

rad bych vedel jak mam zmenit barvu pozadi. jako aby tam nebyla modra ale treba bila.

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

V metode Draw upravis radek pod komentarem 'Smazat obrazovku na

Me.GraphicsDevice.Clear(Color.White)

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

Diskuse: Seznámení s XNA 2.0

1. Stáhněte Microsoft XNA Game Studio 2.0 (~103 MB)

http://www.microsoft.com/downloads/detai...

2. Rozbalte tento SFX archiv do dočasné složky (např. pomocí aplikace WinRAR, umí to i většina souborových manažerů)

3. Nainstalujte redists.msi a xnags_shared.msi

XNA Game Studio 2.0 je nyní připraveno k použití ve všech .NET jazycích. Stačí přidat reference na příslušné jmenné prostory (Microsoft.Xna.*) ve vývojovém prostředí. Mělo by bez problémů fungovat ve všech verzích Visual Studia 2005/2008 i Express verzích jednotlivých jazyků. Ušetříte přibližně 445 MB na stahování z Internetu a dalších X MB na instalaci Visual C# Express Edition.

Co se týče dokumentace, tak aktuální verzi naleznete zde:

http://msdn2.microsoft.com/en-us/library...

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět

Chyba: při spuštění se mi objeví obrazovka s kodem Program.

A je v ní napsáno, že mám chybu v tom:

NewVBGameInstance.Run()

a pod ní okno s titulkem: NoSuitableGraphicsDeviceException was unhandled

Jelikož nevím, co je to za chybu ani jak to opravit, takse vás ptám.

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

PRISÍM PORADTE

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

Co máte za grafickou kartu? Buď nemáte nainstalované všechno (zkuste poslední verzi DirectX 9), anebo máte nějakou hodně starou grafickou kartu. Minimální požadavky jsou myslím že Pixel Shadery 2.0 a Vertex Shadery 1.1 nebo opačně, teď nevím.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

MOC děkuji.taky mě to napadlo uz sem zkoušel X9 ale pořád ta samá chyba.A je pravda, že mám starou kartu.Tak koupím novou - co se dá dělat!

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

Diskuse: Seznámení s XNA 2.0

Je možno kombinovat programování za pomoci XNA a "starého" DirectX?

Jedná se mi o doplnění možností XNA o věci, které nepodporuje (konkrétně kombinace "animací" a práce s videem-alespoň o tom v dokumentaci píší, že tu by měla zvládat až příští verze)

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Dobrý den,nevím jak se vám to povedlo ale já přesně podle "návodu" chtěl instalovat XNA píše to něco ve smyslu že musím mít instalované C# takže ho musím mít instalované?

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Ano, máte pravdu, děkuji za připomínku. Vůbec mě to nenapadlo, do článku to připíšu.

Musíte mít nainstalované buď velké Visual Studio 2005 nebo Visual C# 2005 Express Edition.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Diskuse: Seznámení s XNA 2.0

Omlouvám se, to byl jen (blbý) pokus o fór.

Nechtěl jsem předbíhat a zdržovat Vás od psaní dalších dílů, ale přece jenom bych se rád zeptal alespoň na jednu drobnost.

Chtěl jsem si, když mi už ty mičudy celkem běhají (trochu jsem si poopravil schéma jejich chování a zkouším, kolik těch míčů grafika zvládne), vypsat hodnotu FPS abych zvěděl, u jakého počtu míčů se mi to už začne zadýchávat, leč skončil jsem na jedné banalitě.

Pro vypsání textu potřebuji do projektu natáhnout soubor s fontem. Leč postup dle dokumentace nefunguje, nanébrž procházím-li doporučeným postupem:Solution -> Add -> Add New Item -> Sprite Font, pak, bohužel, mezi "novými itemy" možnost Sprite Font nemám!?

Něco jsem si blbě nainstaloval, nebo je problém někde jinde a já návod blbě pochopil?

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

Tak jsem to zatím vyřešil tak, že jsem si do projektu natáhl .spritefont soubor z projektu, který je součástí demo příkladu v dokumentaci XNA.

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

Ano, to jsou právě ty vychytávky, které se nainstalovaly do C# a ne do VB.NET. Ale hlavně že jste si poradil.

Jinak když jsem o XNA přednášel, tak jsem jen tak zkusil, co XNA dovede. 10000 míčků můj notebook hravě zvládnul, zatížení procesoru bylo asi na 20%. To si myslím, že je dostačující, i když je pravda, že můj notebook je kapku silnější.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Tak to jste na tom o něco líp - u mne je hranice, kdy se už začíná HW trochu dusit 3000 míčků - a to mašinu taky nemám až tak slabou! Jenomže ono taky bude asi dost záviset na složitosti kódu, tj. na výpočtové režii.

těch mých 3K míčků je v trochu upraveném programu - míčky vypustím na obrazovku v náhodném bodě, náhodným směrem a náhodnou rychlostí, no a ony se mi pak odtážejí od stěn a navíc v Y-ové ose působí přitažlivost zemská, neboli zrychlení. Takže těch testů a výpočtových kroků tam mám o něco málo více.

Ale je vidět, že u těch 3K je hranice, kdy už začíná nestíhat grafika, protože procesor má stále nějakých 30% a v předdefinovaném "okýnku" 800 x 600 mi to jede stále na plné FPS, ale když to okno maximalizuju, tak už mi to FPS klesne (na tom "mumraji" balónů se to sice ještě nepozná, ale na výpise už jo).

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

I tak si ale myslím, že vykreslit 3000 x 60 spritů za sekundu je na drtivou většinu her postačující. Jinak já mám notebook s grafickou kartou ATI x1900 (ale je to notebooková, takže výkon je nižší než u běžné edice) a procesor Core2 Duo něco kolem 1,8 GHz.

Míčky jsem měl naházené v generickém Listu a navíc ještě každý míček byl objekt (měl jsem třídu Ball, která si pamatovala pozice a rychlost). Matematické výpočty na výkon nemají takový vliv, vykreslit obrázek je mnohonásobně pomalejší než jedno přičítání či násobení, to jsou víceméně atomické operace.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Tak mi to nedalo - vrátil jsem se k Vaší logice pohybu míčků a hranice, kdy se mi začne překlápět ukazatel rychlosti je někde kolem 30k míčků (a to ještě kromě míčků něco málo ztratím vypisováním toho kontrolního textu).

Ostatně, když už jsme u toho. Jak správně, nebo z jaké hodnoty vypočítat relevantní FPS?

Pokud jsem se díval na výsledky, které mi vrací gameTime.ElapsedGameTime.Milliseconds resp. gameTime.ElapsedGameTime.Ticks, pak se mi to nějak nezdá - jaká je přesnost těchto čítačů (resp. krok?).

Připadá mi to totiž tak, jako kdyby se hodnoty těchto čítačů neměnily rovnoměrně (po jedničce), ale s dost velkým krokem (a u "ticků", kde by člověk předpokládal 1000 x větší přesnost než u ms mi to připadá, jako že je tam tento krok jenom 1000 x větší, takže mi to tak trochu připomíná datum příchodu Járy Cimrmana do Liptákova někdy na jaře či na podzim... +/- 200 let)

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

A koho by to zajímalo - zkusil jsem si takové malé porovnání. Zkusil jsem úplně stejnou úlohu (míčky náhodné rychlosti a náhodného směru odrážející se od stěn a uplatňující gravitační zrychlení) naprogramovat i za pomoci GDI+.

Při testování v okně 800 x 600 je hranice, při které již začne rychlost animace mírně klesat pod 60 FPS 3750 míčků (při 35% vytížení procesoru) za použití XNA, za použití GDI+ je tato hranice na stejném stroji už při 600 míčcích, navíc zatížení procesoru něco přes 50%.

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

Diskuse: Seznámení s XNA 2.0

...jenom vydržet a vytrvat!

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Jsem potěšen, že je seriál ve VB .NETu. Když jsem tak pročítal internet, tak jsem si říkal: "Jen škoda, že my, kteří máme radši VB, budeme muset oželet Content Pipeline!" A hle! I toho jsme se dočkali, takže spokojenost 100% :)

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.

Nyní zakládáte pod článkem nové diskusní vlákno.
Pokud chcete reagovat na jiný příspěvek, klikněte na tlačítko "Odpovědět" u některého diskusního příspěvku.

Nyní odpovídáte na příspěvek pod článkem. Nebo chcete raději založit nové vlákno?

 

  • 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