Aktuálně: Postihly zákazy tvou profesi? Poptávka po ajťácích prudce roste, využij podzimní akce 30% výuky zdarma!
Pouze tento týden sleva až 80 % na e-learning týkající se JavaScript
JavaScript týden

Lekce 3 - Kreslíme a píšeme v MonoGame

V minulé lekci, Vložení obsahu MonoGame hry, jsme si ukázali vložení obsahu MonoGame hry.

Nyní máme tedy vše připraveno k tomu, abychom si práci s obsahem vyzkoušeli. Pojďme na to :)

Načtení obsahu

Obsah musíme nejprve načíst. Již víme, že to se dělá v metodě LoadContent(). Než se k metodě přesuneme, vytvoříme si potřebné proměnné. Neanimované sprity se v MonoGame ukládají do datového typu Texture2D. Pro SpriteFonty máme typ SpriteFont.

Přidáme tedy proměnné:

private Texture2D kostkyPozadi, mraky, pozadi;
public SpriteFont fontCourierNew, fontBlox, fontBloxMaly;

S modifikátory přístupu si nelamte hlavu, hudba a fonty jsou veřejné, protože je budeme v budoucnu sdílet mezi komponentami.

Přesuňme se konečně do metody LoadContent(). Za vytvořením instance spriteBatch začneme načítat obsah. Již víme, že k tomu použijeme vlastnost Content, přesněji Load(). Metoda je generická, musíme tedy specifikovat typ obsahu, který načítáme. Zajímavé je, že nezadáváme příponu souboru. Načtěme sprity:

pozadi = Content.Load<Texture2D>(@"Sprity\pozadi_level");
kostkyPozadi = Content.Load<Texture2D>(@"Sprity\pozadi_kostky");
mraky = Content.Load<Texture2D>(@"Sprity\spr_mraky");

A fonty:

fontCourierNew = Content.Load<SpriteFont>(@"Fonty\font_courier_new");
fontBlox = Content.Load<SpriteFont>(@"Fonty\font_blox");
fontBloxMaly = Content.Load<SpriteFont>(@"Fonty\font_blox_maly");

Máme načteno, nebyla to žádná věda. Pojďme kreslit.

Vykreslování spritů

Přesuňme se do metody Draw(). Kód budeme psát za vymazání zobrazovacího zařízení. Již jsme si říkali, že vykreslování spritů probíhá pomocí instance spriteBatch. Vykreslování musíme nejprve zahájit, to uděláme metodou Begin():

spriteBatch.Begin();

Následně vykreslíme sprity. Jistě jste si všimli, že jsou ve formátu PNG. To proto, že PNG obsahuje tzv. alfakanál a umožňuje udělat různé části obrázku různě průhlené. Toho jsem využil a pozadí levelu s robotem je nahoře průhledné. Pod něj vykreslíme pozadí kostek a mezi kostky a robota vykreslíme mraky.

Samotné vykreslení spritu probíhá pomocí metody Draw():

spriteBatch.Draw(kostkyPozadi, new Vector2(0, 0), Color.White);
spriteBatch.Draw(mraky, new Vector2(0, 0), Color.White);
spriteBatch.Draw(pozadi, new Vector2(0, 0), Color.White);

Vidíme, že první parametr metody je textura k vykreslení. Druhým parametrem je pozice a třetím barva. Metoda má další přetížení, která umožňují např. obrázek roztahovat nebo rotovat, ale ta v našem kurzu nevyužijeme.

Význam textury je jasný. Pozoruhodné může být, že souřadnice zadáváme pomocí vektoru. Ještě divnější může být, že to nejsou celá čísla, ale čísla desetinná, přesněji typu float. S vektory se v MonoGame pracuje proto, že umožňují velmi jednoduše řešit různé pohyby, směry, úhly, srážky, zjistit vzdálenost 2 objektů a podobně. My je v tomto seriálu budeme používat jen jako souřadnice, ale i zde je výhoda, že můžeme objektu např. zadat reálnou rychlost pohybu místo celočíselné a tuto rychlost ke složkám vektoru (souřadnicím objektu) přičítat. Barva určuje obarvení textury, bílá texturu nemění.

Vykreslování nakonec ukončíme metodou End():

spriteBatch.End();
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!

Zkusíme si hru spustit, měli bychom vidět takovýto výsledek:

Robotris, ukázková hra v XNA Game Studio

Díky dodržení pořadí spritů při vykreslení jsou opravdu mraky vložené mezi 2 pozadí. Ještě u spritů chvilku zůstaneme, zkusíme si totiž mraky rozpohybovat. Založíme si novou privátní proměnnou pozice typu Vector2. V Initialize() ji nastavíme na počátek souřadného systému (levý horní roh obrazovky):

pozice = new Vector2(0, 0);

Nyní změníme řádek s vykreslením mraků. Jako pozici předáme proměnnou pozice a barvu vynásobíme 0.8f, tím způsobíme, že mraky budou z 20% průhledné:

spriteBatch.Draw(mraky, pozice, Color.White * 0.8f);

Nyní se mraky vykreslují na pozici, kterou určuje proměnná. V metodě Update() složku vektoru X vždy o 1 snížíme:

pozice.X--;

Po posunu ošetříme, zda jsme s mraky nevyjely z obrazovky. To uděláme tak, že se zeptáme, zda je X mraků menší než -šířka obrázku mraků. Tu získáme pomocí vlastnosti Width na textuře mraků:

if (pozice.X < -(mraky.Width))
    pozice.X = 0;

Pokud jste postupovali správně, budou mraky jezdit doleva a jakmile vyjedou z obrazovky, vrátí se na startovní pozici.

Nyní změníme vykreslování tak, aby se vykreslovalo několik mraků vedle sebe:

for (int i = 0; i < 6; i++)
     spriteBatch.Draw(mraky, new Vector2(pozice.X + i * mraky.Width, 0), Color.White * 0.8f);

Dostaneme pěkný efekt nekonečné, plující oblohy:

Robotris, ukázková hra v XNA Game Studio

Působivé, že? :)

Změna barvy spritů

Ještě si zkusíme měnit barvu mraků. Budeme jednoduše měnit její jednotlivé složky, určitě víme, že barvy v počítači jsou složeny z červené, zelené a modré složky. Udělat změnu barvy tak, abychom vystřídali celé spektrum je složité a efekt bude velmi podobný tomu, když budeme střídat barev jen několik. Do třídy přidáme 2 další proměnné, změnu a směr:

private int zmena;
private int smer;

Proměnná zmena se bude měnit mezi hodnotou 0 - 96, jako kyvadlo. Proměnná smer určuje směr změny této proměnné, 1 rostoucí, -1 klesající.

V Initialize() nastavíme změnu na 0 a směr na 1, tedy rostoucí.

zmena = 0;
smer = 1;

V Update() nyní přičteme směr ke změně. Tím docílíme, že se bude s kladným směrem zvyšovat a se záporným snižovat. Také změnu pomocí 2 podmínek udržíme mezi 0 a 96:

zmena += smer;
if (zmena >= 96)
    smer = -1;
if (zmena <= 0)
    smer = 1;

Hotovo. Tento kyvadlový princip si zapamatujte, bude se nám ve hrách hodit, my ho ještě minimálně 2x použijeme jinde. No a pojďme do metody Draw(). Tam si před for cyklem založíme proměnnou barva a změníme její složky pomocí proměnné zmena, ty můžeme zadat jednoduše v pořadí RGB (červená, zelená, modrá) do konstruktoru barvy. Poté barvu dosadíme do barvy vykreslení maraků:

Color barva = new Color(128 + zmena, 255 - zmena, 128 + zmena);
for (int i = 0; i < 6; i++)
    spriteBatch.Draw(mraky, new Vector2(pozice.X + i * mraky.Width, 0), barva * 0.8f);

Červená složka bude mít základ 128 + změna, bude se tedy měnit mezi 128 - 224. Zelená mezi 255 - 159 a modrá opět 128 - 225. Můžete si s tím pohrát, ale pozor, aby hodnota nebyla vyšší než 255 nebo nižší než 0. Program by nespadl s chybou, ale barva by se měnila podivně.

Pro lepší efekt bychom si v praxi uložili několik pěkných barev do pole a potom na ně přecházeli metodou Lerp(). Mraky by také neměly být modré, aby to do barvy nezasahovalo. Pro naše účely ukázky nám to však takto stačí.

Vykreslení textu

Víme, že i text vykreslujeme pomocí SpriteBatch, přesněji metodou DrawString(). Ta má opět několik přetížení pro text orotovaný a podobně, ale ta si určitě sami prohlídnete. Přesuňme se do metody Draw() a přidejme před spriteBatch.End(); následující řádky:

spriteBatch.DrawString(fontBlox, "nadpis velky", new Vector2(100, 100), Color.Yellow);
spriteBatch.DrawString(fontBloxMaly, "nadpis maly", new Vector2(100, 180), Color.Yellow);
spriteBatch.DrawString(fontCourierNew, "Příliš žluťoučký kůň úpěl ďábelské ódy", new Vector2(100, 240), Color.Red);

Výsledek:

Robotris, ukázková hra v XNA Game Studio

Parametry jsou stejné, jako u spritů, pouze je tu jeden navíc s textem. Nezapomínejte, že font Blox neumí české znaky! Ve fontu Courier je to již v pořádku.

Text může být občas špatně vidět, pokusíme se s tím něco udělat, vykreslíme pod něj stín. Abychom nemuseli stín kreslit stále znovu a znovu, uděláme si na text se stínem metodu. No a abychom se procvičili, přidáme ji přímo do spriteBatch, přesněji SpriteBatch podědíme.

Přidejte si k projektu Robotris novou třídu s názvem LepsiSpriteBatch, dědící z SpriteBatch. Nejprve nahoru přídáme potřebné usingy a třídu opatříme modifikátorem public:

...
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;

namespace Robotris
{
    public class LepsiSpriteBatch : SpriteBatch
    {

...

Při dědění třídy musíme vytvořit konstruktor (ač prázdný), volající konstruktor třídy nadřazené:

public LepsiSpriteBatch(GraphicsDevice graphicsDevice): base(graphicsDevice)
{
}

Teď přidáme naši metodu TextSeStinem(), která vykreslí zadaný text 2x. jednou černě s trochou průhlednosti a kousek doprava dolů a podruhé normálně, jak jsme zvyklí. Parametry opíšeme z původní metody DrawString().

public void TextSeStinem(SpriteFont spriteFont, string text, Vector2 position, Color color)
{
    DrawString(spriteFont, text, new Vector2(position.X + 2, position.Y + 2), Color.Black * 0.8f);
    DrawString(spriteFont, text, position, color);
}

Nyní se vrátíme do třídy Hra a změníme typ SpriteBatch (hned na začátku v definici atributů třídy) na LepsiSpriteBatch:

LepsiSpriteBatch spriteBatch;

Podobnou změnu uděláme ještě na začátku metody LoadContent():

spriteBatch = new LepsiSpriteBatch(GraphicsDevice);

V metodě Draw() změníme DrawString() na TextSeStinem() a spustíme. Mnohem lepší, ne?

Metody ve hře jsou trochu českoanglické, ale v programování to jinak nejde a alespoň trochu češtiny jsem hře chtěl dodat, když už dělám české tutoriály :) Ti pokročilí z vás si to mohou psát anglicky.

To by nám ke spritům stačilo.

Příště, v lekci Zvuky, hudba, klávesnice a myš v MonoGame, se podíváme na hudbu, zvukové efekty a reakci na klávesy.


 

Stáhnout

Staženo 533x (11.85 MB)
Aplikace je včetně zdrojových kódů v jazyce C#

 

Předchozí článek
Vložení obsahu MonoGame hry
Všechny články v sekci
Od nuly k tetrisu v MonoGame
Článek pro vás napsal David Čápka
Avatar
Jak se ti líbí článek?
5 hlasů
Autor pracuje jako softwarový architekt a pedagog na projektu ITnetwork.cz (a jeho zahraničních verzích). Velmi si váží svobody podnikání v naší zemi a věří, že když se člověk neštítí práce, tak dokáže úplně cokoli.
Unicorn university Autor sítě se informační technologie naučil na Unicorn College - prestižní soukromé vysoké škole IT a ekonomie.
Aktivity (6)

 

 

Komentáře

Avatar
pardal486
Člen
Avatar
pardal486:27.9.2012 20:11

Dobrý den. Není náhodou chyba v deklarování proměnné smer? Kdyz jsem totiž psal tak jsem měl error a ve stažených zdrojových kódech není byte ale int. Jen jsem tím chtěl upozornit.

Odpovědět
27.9.2012 20:11
Bite my shiny, metal ass!
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na pardal486
David Čápka:28.9.2012 11:03

Ahoj, díky, opravil jsem. Byte nemůže být záporný, měl jsem to prvně jinak, pak jsem to zjednodušil :)

Odpovědět
28.9.2012 11:03
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na pardal486
David Čápka:28.9.2012 11:44

Z článku jsem ukousl ty zvuky, byl moc dlouhý. Příště je uvedu i s prací se vstupem z klávesnice.

Odpovědět
28.9.2012 11:44
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
Jan Bezdíček
Redaktor
Avatar
Jan Bezdíček:15.11.2012 23:04

The font family "Blox (BRK)" could not be found. Please ensure the requested font is installed, and is a TrueType or OpenType font. (Font je nainstalovaný)
...
Nevite co s tím prosím ? :-)

Editováno 15.11.2012 23:04
 
Odpovědět
15.11.2012 23:04
Avatar
Michael Olšavský:16.11.2012 22:40

Mám stejný problém. :/ Použil jsem místo toho jiný font

 
Odpovědět
16.11.2012 22:40
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Jan Bezdíček
David Čápka:18.11.2012 17:30

Pokud je font opravdu nainstalovaný, tak mě nenapadá, kde by mohl být problém. Můžeš se podívat, jestli ho máš nainstalovaný a jmenuje se stejně? Fonty najdeš v ovládacích panelech.

Odpovědět
18.11.2012 17:30
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
michal.zajic
Člen
Avatar
Odpovídá na Jan Bezdíček
michal.zajic:22.11.2012 21:16

Stahl jsem si ukazkovy program a vse fungovalo. Pritom byl uplne stejne napsany.

 
Odpovědět
22.11.2012 21:16
Avatar
stacox
Člen
Avatar
stacox:21.2.2013 10:32

I já měl problém s fontem a vyřešil jsem to tak, že stačilo jednoduše restartovat VB :)

 
Odpovědět
21.2.2013 10:32
Avatar
martinsakra
Redaktor
Avatar
martinsakra:9.3.2013 18:38

Mám problém, udělal jsi vlastní pozadí a uložil v png a výsledek není vubec trnaparentní, i když tam taková vrstva je. (viz obrázek) Ale ani obrázek který jsem si stáhl tady nedopadl o nic líp. Můžete poradit kde je chyba (v kodu je zatim jen to co se tu psalo nic víc)

  • Ani za boha nedokážu otevřít žádný font i kdy to dělám přesně podle návrhů

Dots možná za to muže tahle hláška:

The content pipeline add-in store returned the following error:
Could not find the add-in deployment cache file, "C:\Program Files (x86)\Common Files\Microsoft Shared\XNA\Pi­pelineHosting\Pi­pelineSegments­.store". Please run AddInStore.Update or Rebuild (or run AddInUtil.exe on the command line). Also, ensure your code has permission to read this file.
The XNA Framework Content Pipeline properties will not be editable unless the problem is fixed.

Ale přiznám se že to co jsem vygooglil mě nepomohlo (reinstal, oprava přes xnags_platfor­m_tool)

Odpovědět
9.3.2013 18:38
Democracy is two wolves and a lamb voting on what to have for lunch. Liberty is a well-armed lamb contesting the vote.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na martinsakra
David Čápka:9.3.2013 18:43

Zde je transparentní pouze obrázek s těmi baráky, pokud se ti ten vykreslí jako plný, je něco špatně u tebe.

Odpovědět
9.3.2013 18:43
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
martinsakra
Redaktor
Avatar
Odpovídá na David Čápka
martinsakra:9.3.2013 19:05

Ten jsem myslel. A ani ten se nezobrazuje transparentně když ho hodím k sobě. a chyba je evidentně u mě to vím, ale zatím naprosto netuším kde. Ten error je jediná věc kter mě napadá, ale ten vyskakuje jen někdy. a i když nevyskočí, ta se při vykreslování nic nezmění, furt to blbne

Odpovědět
9.3.2013 19:05
Democracy is two wolves and a lamb voting on what to have for lunch. Liberty is a well-armed lamb contesting the vote.
Avatar
Mischief Managed:16.3.2013 12:01

Ukazuje mi to chybu v cestě spritů. Mám je přesně pojmenovaný stejně a všude a jsou ve složce Sprity. Ale píše mi to, že to nenalezlo..Co stim?

Editováno 16.3.2013 12:04
 
Odpovědět
16.3.2013 12:01
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Mischief Managed
Petr Nymsa:16.3.2013 12:10

V tom případě musíš zadat cestu nějak takto

mojeTextura=Content.Load<Texture2D>("Sprity/mojeTextura");
Odpovědět
16.3.2013 12:10
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Odpovídá na Petr Nymsa
Mischief Managed:16.3.2013 19:42

pořád to nejde

 
Odpovědět
16.3.2013 19:42
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Mischief Managed
Petr Nymsa:16.3.2013 19:52

Pošli kod .... nikdo z nás neumí věštit :)

Odpovědět
16.3.2013 19:52
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Mischief Managed:17.3.2013 9:58
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
using Microsoft.Xna.Framework.Net;
using Microsoft.Xna.Framework.Storage;

namespace WindowsGame1
{
    /// <summary>
    /// This is the main type for your game
    /// </summary>
    public class Game1 : Microsoft.Xna.Framework.Game
    {
        GraphicsDeviceManager graphics;
        SpriteBatch spriteBatch;
        private Texture2D kostkyPozadi, mraky, pozadi;
        public SpriteFont fontCourierNew, fontBlox, fontBloxMaly;

        public int sirkaOkna = 1280, vyskaOkna = 720; /// proměnné výška, šířka
        public Game1()
        {
            graphics = new GraphicsDeviceManager(this);
            Content.RootDirectory = "Content";
        }

        /// <summary>
        /// Allows the game to perform any initialization it needs to before starting to run.
        /// This is where it can query for any required services and load any non-graphic
        /// related content.  Calling base.Initialize will enumerate through any components
        /// and initialize them as well.
        /// </summary>
        protected override void Initialize()
        {
            // TODO: Add your initialization logic here
            graphics.PreferredBackBufferWidth = sirkaOkna;
            graphics.PreferredBackBufferHeight = vyskaOkna;
            graphics.IsFullScreen = false;
            graphics.ApplyChanges();
            base.Initialize();
        }

        /// <summary>
        /// LoadContent will be called once per game and is the place to load
        /// all of your content.
        /// </summary>
        protected override void LoadContent()
        {
            // věci k načtení
            spriteBatch = new SpriteBatch(GraphicsDevice);
            pozadi = Content.Load<Texture2D>(@"Sprity\pozadi_level");
            kostkyPozadi = Content.Load<Texture2D>(@"Sprity\pozadi_kostky");
            mraky = Content.Load<Texture2D>(@"Sprity\spr_mraky");

            fontCourierNew = Content.Load<SpriteFont>(@"Fonty\font_courier_new");
            fontBlox = Content.Load<SpriteFont>(@"Fonty\font_blox");
            fontBloxMaly = Content.Load<SpriteFont>(@"Fonty\font_blox_maly");


            // TODO: use this.Content to load your game content here
        }

        /// <summary>
        /// UnloadContent will be called once per game and is the place to unload
        /// all content.
        /// </summary>
        protected override void UnloadContent()
        {
            // TODO: Unload any non ContentManager content here
        }

        /// <summary>
        /// Allows the game to run logic such as updating the world,
        /// checking for collisions, gathering input, and playing audio.
        /// </summary>
        /// <param name="gameTime">Provides a snapshot of timing values.</param>
        protected override void Update(GameTime gameTime)
        {
            // Allows the game to exit
            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
                this.Exit();

            // TODO: Add your update logic here

            base.Update(gameTime);
        }

        /// <summary>
        /// This is called when the game should draw itself.
        /// </summary>
        /// <param name="gameTime">Provides a snapshot of timing values.</param>
        protected override void Draw(GameTime gameTime)
        {
            GraphicsDevice.Clear(Color.CornflowerBlue);
            spriteBatch.Begin();
            spriteBatch.Draw(kostkyPozadi, new Vector2(0, 0), Color.White);
            spriteBatch.Draw(mraky, new Vector2(0, 0), Color.White);
            spriteBatch.Draw(pozadi, new Vector2(0, 0), Color.White);
            spriteBatch.End();
            // TODO: Add your drawing code here

            base.Draw(gameTime);
        }
    }
}
 
Odpovědět
17.3.2013 9:58
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Mischief Managed
Petr Nymsa:17.3.2013 10:08

Máš ty fonty a sprity umístěné v Content Pipeline ? Jinak zde nevidím problém

Odpovědět
17.3.2013 10:08
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Petr Nymsa
Redaktor
Avatar
Petr Nymsa:17.3.2013 10:56

Zkus vymazat ten @, a použít / ... mě to takhle funguje... jinak opravdu nevím :(

Odpovědět
17.3.2013 10:56
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Odpovídá na Petr Nymsa
Mischief Managed:17.3.2013 13:39

Bohužel ani to nefunguje.

 
Odpovědět
17.3.2013 13:39
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Mischief Managed
Petr Nymsa:17.3.2013 14:14

Pošli ještě prosím, přesnou chybovou hlášku

Odpovědět
17.3.2013 14:14
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Mischief Managed:17.3.2013 19:03

Navíc mi nejde spustit zde stažený soubor. Vyskočí na mě chyba http://2i.cz/252a4963b0
mám net i xna framework 4 za grafiku mám ati radeon 9200

 
Odpovědět
17.3.2013 19:03
Avatar
martinsakra
Redaktor
Avatar
Odpovídá na Mischief Managed
martinsakra:17.3.2013 19:16

jestli to děláš na notasu co má integrovanou grafárnu, tak si musíš ručně zapnout normální, mě se dělo to stejný
ani když máš zapnutí automaticky přepínání, tak to nepomáhá)

Odpovědět
17.3.2013 19:16
Democracy is two wolves and a lamb voting on what to have for lunch. Liberty is a well-armed lamb contesting the vote.
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Odpovídá na Mischief Managed
Mischief Managed:17.3.2013 19:18

našel sem jak nastvait projekt na reach, ale když jdu do vlastností projektu, nemám tma záložku XNA game studio

 
Odpovědět
17.3.2013 19:18
Avatar
...
Redaktor
Avatar
...:9.6.2013 20:48

Keď to chcem spustiť tak mi napíše "No devices are available to deploy project 'TomkoRobotris'. Register a device using the XNA Game Studio Device Center." ale keď dám pridať zariadenie tak mi dá možnosti len XBox alebo Zune.
Čo s tým ?

Odpovědět
9.6.2013 20:48
Nehovor čo vieš, ale snaž sa vedieť, čo hovoríš...
Avatar
...
Redaktor
Avatar
Odpovídá na ...
...:10.6.2013 14:45

Už nič omylom som sa preklikol a vytvoril som hru pre XBox nie pre Windows.

Odpovědět
10.6.2013 14:45
Nehovor čo vieš, ale snaž sa vedieť, čo hovoríš...
Avatar
Kit
Redaktor
Avatar
Odpovídá na ...
Kit:10.6.2013 14:52

A to není jedno? Myslel jsem si, že ty hrací bedny jsou stejné :)

Odpovědět
10.6.2013 14:52
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Kit
Petr Nymsa:10.6.2013 14:58

Je velký rozdíl jestli uděláš aplikaci resp. hru pro Desktop nebo na Xbox ;)

Odpovědět
10.6.2013 14:58
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
...
Redaktor
Avatar
...:10.6.2013 15:06

Pri zmene farby spritov jak tam mas tie kyvadlove podmienky tak nemusis davat podmienky >= 96 alebo <= 0 pretoze tam staci dat == 96 a == 0 lebo posun je vzdy o 1.

Editováno 10.6.2013 15:06
Odpovědět
10.6.2013 15:06
Nehovor čo vieš, ale snaž sa vedieť, čo hovoríš...
Avatar
KlimiCZ
Člen
Avatar
KlimiCZ:6.8.2013 9:25

Ahoj potřeboval bych poradit nejdou mi načíst spritefondy kód mám stejný a když stáhnu si tento projekt a nakopíruji Hra.cs(změním namespace) soubory taky nakopíruji(spri­tefondy) tak to taky nejde
dám radči zdroják
http://www.itnetwork.cz/dev-lighter/160
Děkuji za radu :)

Odpovědět
6.8.2013 9:25
Nesnaž se zakrýt něco, co jsi provedl úmyslně. Svět je tak malý, že dotyčný se to stejně dozví.
Avatar
KlimiCZ
Člen
Avatar
KlimiCZ:7.8.2013 10:47

Poradími někdo ?

Odpovědět
7.8.2013 10:47
Nesnaž se zakrýt něco, co jsi provedl úmyslně. Svět je tak malý, že dotyčný se to stejně dozví.
Avatar
vodacek
Redaktor
Avatar
Odpovídá na KlimiCZ
vodacek:7.8.2013 11:21

no a co to píše za chybu?

 
Odpovědět
7.8.2013 11:21
Avatar
Juraj Mlich
Redaktor
Avatar
Odpovídá na vodacek
Juraj Mlich:7.8.2013 11:52

Používaš MonoGame? Pretože tam to musíš najskôr prekonvertovať!

 
Odpovědět
7.8.2013 11:52
Avatar
KlimiCZ
Člen
Avatar
Odpovídá na vodacek
KlimiCZ:7.8.2013 18:40

Teď sem to zapl a celé se to zhroutilo takže to budu muset udělat znovu pak dám error. čeky

Odpovědět
7.8.2013 18:40
Nesnaž se zakrýt něco, co jsi provedl úmyslně. Svět je tak malý, že dotyčný se to stejně dozví.
Avatar
anticary
Člen
Avatar
anticary:11.3.2014 16:38

Co mám napsat když chci, aby se ty mraky pohybovaly na místo té "pozice" protože pořád se mi to červeně podtrhává a píše to že to nezná.

 
Odpovědět
11.3.2014 16:38
Avatar
anticary
Člen
Avatar
Odpovídá na anticary
anticary:11.3.2014 17:01

Už to vím. :)

 
Odpovědět
11.3.2014 17:01
Avatar
petr.vidrman
Člen
Avatar
petr.vidrman:28.5.2014 21:15

Nevleze se to na obrazovku mobilu :(
Vidím jen půlku obrazovky. Měním šířku na šířku mobilu
graphics.Prefe­rredBackBuffer­Width = 320;
graphics.Prefe­rredBackBuffer­Height = 480;

Zkouším změnu orientace obrazu
// Allow portrait mode as well
graphics.Suppor­tedOrientations = DisplayOrienta­tion.Portrait |
DisplayOrienta­tion.Landscape­Left |
DisplayOrienta­tion.Landscape­Right;

a stejně to nepomáhá...

V čem je problém...?

Editováno 28.5.2014 21:18
 
Odpovědět
28.5.2014 21:15
Avatar
CallMany Vyhlídal:18.8.2015 11:44

ahoj potřeboval bych poradit jenom když si zkopíruju tohle

for (int i = 0; i < 6; i++)
        spriteBatch.Draw(mraky, new Vector2(pozice.X + 1 * mraky.Width, 0), Color.White * 0.8f);

Tak mi to normálně funguje .. Ale když si to prostě jen opíšu a nezkopíruju tak mi to vykreslí pouze jeden mrak :/

 
Odpovědět
18.8.2015 11:44
Avatar
CallMany Vyhlídal:18.8.2015 11:54

https://ctrlv.cz/PPd0 - opsané
https://ctrlv.cz/v7TI - okopírované

 
Odpovědět
18.8.2015 11:54
Avatar
Pjanus
Člen
Avatar
Odpovídá na CallMany Vyhlídal
Pjanus:18.8.2015 12:35

V okopírovaném je pozice.X + i zatím co v opsaným máš pozice.X + 1

 
Odpovědět
18.8.2015 12:35
Avatar
Odpovídá na Pjanus
CallMany Vyhlídal:18.8.2015 13:03

Ajo :D Já jsem blbec díky moc ^^

 
Odpovědět
18.8.2015 13:03
Avatar
Vojta
Člen
Avatar
Odpovídá na Mischief Managed
Vojta:23.7.2017 17:11

Měl jsem stejný problém, spočíval v tom, že moje png obrázky nebyly "included in project". Stačilo v Solution exploreru na ně kliknout pravým tlačítkem a následně include in project.

 
Odpovědět
23.7.2017 17:11
Avatar
Patrik Pastor:20.6.2019 20:32

co je ta trida Vektor2? dival jsem se do dokumentace a nasel jsem jenom ze to je pro hardwarovou akceleraci, ale uplne nevim co to je. A za druhe, ten vector jde v tom vykreslovani (metoda Draw()) misto Rectangle, tedy vektor asi ten obdelnik vykresli (to bych ocekaval, kdyz bere 2 parametry - x,y), ale tyto parametry jsou nastavene na nulu... takze to stejne zadny obdelnik nevykresli. Jaky to ma teda smysl? Diky za odpoved.

 
Odpovědět
20.6.2019 20:32
Avatar
Odpovídá na Patrik Pastor
Patrik Pastor:20.6.2019 20:43

Spise bych upravil svuj dotaz jeste kvuli vykresleni... png mraky se vykreslilo mezi pozadiKostky a kostky, coz souhlasi (jak je napsano, poradi draw() jsou mraky presne mezi deklaraci), nicmene vsechny vydkresleni draw() maji vektor nastaveny na x=0,y=0 takze jak je mozne ze je pozadiKostky je vykresleno v PRAVEM rohu a mraky v LEVEM? kdyz oba maji nastavene stejne souradnice vektoru?

 
Odpovědět
20.6.2019 20:43
Avatar
Patrik Pastor:20.6.2019 21:49

Mam dotaz ohledne xml u fontu courierNew. Jelikoz ve hre nejde moc tento popis videt, chtel jsem zmenit v xml uzel <Style></Style>, a dovnitr jsem misto Regular napsal Bold. Ulozil jsem a vypnul. Zapnul znovu, ale styl se nezmenil, ackoliv kdyz se znovu divam do zml souboru, je nakonfigurovan dobre, a bold hodnota tam opravdu je. Ale v aplikaci, nikde.... Nevite proc?

 
Odpovědět
20.6.2019 21:49
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 45 zpráv z 45.