NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!
Mezinárodní den IT společnosti je tady! Pouze nyní můžeš získat 90 % extra kreditů při nákupu od 1199 kreditů s promo kódem AJTACI90. Tak neváhej!

Diskuze – Lekce 4 - Zvuky, hudba, klávesnice a myš v MonoGame

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar
Mini
Člen
Avatar
Mini:24.11.2012 13:27

Ahoj měl bych takový problém, ty tam máš toho robota, že když na něho kliknu tak se něco stane, ale mas to vyřešené pomocí toho rectanglu, jenže co když bych chtěl tím objektem (robotem) hýbat, a aby pořád fungovala ta akce když na něj kliknu. Děkuji.

Odpovědět
24.11.2012 13:27
Jste dobří jen v tom, co vás baví.
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovídá na Mini
Petr Nymsa:24.11.2012 13:52

Budeš muset v update aktualizovat rectangle :)

Odpovědět
24.11.2012 13:52
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Mini
Člen
Avatar
Mini:24.11.2012 13:55

aha :-) takže to nejde jak u událostí? že sem se ptal na jaký objekt sem kliknul? musím do vždy dělat pomoci rectanglu? co když to bude kolečko? Snad jde chápat z toho co píšu co potřebuji :))

Odpovědět
24.11.2012 13:55
Jste dobří jen v tom, co vás baví.
Avatar
Petr Nymsa
Tvůrce
Avatar
Petr Nymsa:24.11.2012 14:14

Pokud myslíš události typu Click, které jsou ve Formu, ty zde nenajdeš. Musíš si je udělat sám. Co se týče kolečka, lepší řešení je kolize pixel-per-pixel.

Odpovědět
24.11.2012 14:14
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Mini
Člen
Avatar
Mini:24.11.2012 17:14

No nějak podrobněji by to nešlo? Moc jsem nepochopil když to bude mít jiný tvar, např to kolečko, jinak díky :-)

Odpovědět
24.11.2012 17:14
Jste dobří jen v tom, co vás baví.
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Mini
David Hartinger:26.11.2012 13:25

Událostí to jde, když si jí tam uděláš. Událost je delegát, pokud ti to něco říká, nebudeš mít problém ji zavést. Jak v tutoriálech píši, XNA je framework, ne engine.

Neobdélníkové kolize se ve hrách moc nepoužívají, zaprvé jsou zbytečné, zadruhé problémové a zatřetí pomalé. Pokud bys je z nějakého důvodu přeci jen potřeboval, pixely se z textury vytáhnou takto:

Color[] pixelColors = new Color[texture.Width * texture.Height];
texture.GetData(pixelColors);

Můžeš se podívat na tuto funkci, dá se z toho dost vyčíst:

static bool PerPixelCollision(Sprite a, Sprite b)
    {
        // Get Color data of each Texture
        Color[] bitsA = new Color[a.Texture.Width * a.Texture.Height];
        a.Texture.GetData(bitsA);
        Color[] bitsB = new Color[b.Texture.Width * b.Texture.Height];
        b.Texture.GetData(bitsB);

        // Calculate the intersecting rectangle
        int x1 = Math.Max(a.Bounds.X, b.Bounds.X);
        int x2 = Math.Min(a.Bounds.X + a.Bounds.Width, b.Bounds.X + b.Bounds.Width);

        int y1 = Math.Max(a.Bounds.Y, b.Bounds.Y);
        int y2 = Math.Min(a.Bounds.Y + a.Bounds.Height, b.Bounds.Y + b.Bounds.Height);

         // For each single pixel in the intersecting rectangle
         for (int y = y1; y < y2; ++y)
         {
             for (int x = x1; x < x2; ++x)
             {
                 // Get the color from each texture
                 Color a = bitsA[(x - a.Bounds.X) + (y - a.Bounds.Y)*a.Texture.Width];
                 Color b = bitsB[(x - b.Bounds.X) + (y - b.Bounds.Y)*b.Texture.Width];

                 if (a.A != 0 && b.A != 0) // If both colors are not transparent (the alpha channel is not 0), then there is a collision
                 {
                     return true;
                 }
             }
         }
        // If no collision occurred by now, we're clear.
        return false;
    }

Zbytek na http://gamedev.stackexchange.com/…ction-in-xna.

Odpovědět
26.11.2012 13:25
New kid back on the block with a R.I.P
Avatar
Mini
Člen
Avatar
Mini:28.11.2012 20:59

Ok díky moc :-) vyzkouším

Odpovědět
28.11.2012 20:59
Jste dobří jen v tom, co vás baví.
Avatar
vojtomala
Člen
Avatar
vojtomala:27.6.2015 19:21

Ahoj chtěl bych se zeptat, když si vytvořím novou třídu(Add->class) pak ji podědím z třídy game1 a vytvářím si tam "ostatní" metody např. Prepnihudbu nebo NovaKlavesa(funguje to luxusně) ale chtěl bych se zeptat jakou výkonostní daň platím za tento luxus? :). díky za odpovědi :)

 
Odpovědět
27.6.2015 19:21
Avatar
Lukáš Hypša:26.3.2016 19:53

Ta hudba je krutá, klidně bych jí polouchal celou dobu :D ale nechci si ji znechutit už teď :D

 
Odpovědět
26.3.2016 19:53
Avatar
Petr Šťastný
Tvůrce
Avatar
Petr Šťastný:8.6.2016 17:37

Ahoj, potřebuji pomoct. Zkoušel jsem si tohle udělat v Monogame, ale nechce mi to načíst jakoukoli hudbu. Ať už mp3, nebo wma, jako Song, nebo Soundeffect, ten soubor tam je, ale píše to, že to nenalezlo žádný soubor. Neví někdo, co s tím?

protected override void LoadContent()
        {
            // Create a new SpriteBatch, which can be used to draw textures.
            spriteBatch = new SpriteBatch(GraphicsDevice);

            // TODO: use this.Content to load your game content here
            font_Zakladni = Content.Load<SpriteFont>(@"Fonty\ArialBig");
            font_Flat = Content.Load<SpriteFont>(@"Fonty\FlatForm");
            font_FlatBig = Content.Load<SpriteFont>(@"Fonty\FlatForm_Big");
            sound_GameTheme = Content.Load<Song>(@"Zvuky\GameTheme");
            sound_MainTheme = Content.Load<Song>(@"Zvuky\MainTheme");


            PlayMusic(sound_MainTheme);
            MediaPlayer.IsRepeating = true;
        }

http://prntscr.com/bdwq9m
http://prntscr.com/bdwqtq
http://prntscr.com/bdwr64

 
Odpovědět
8.6.2016 17:37
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 10 zpráv z 16.