IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

Diskusia – 4. diel - Zvuky, hudba, klávesnica a myš v MonoGame

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
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.

Odpovedať
24.11.2012 13:27
Jste dobří jen v tom, co vás baví.
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovedá na Mini
Petr Nymsa:24.11.2012 13:52

Budeš muset v update aktualizovat rectangle :)

Odpovedať
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 :))

Odpovedať
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.

Odpovedať
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 :-)

Odpovedať
24.11.2012 17:14
Jste dobří jen v tom, co vás baví.
Avatar
David Hartinger
Vlastník
Avatar
Odpovedá 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.

Odpovedať
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

Odpovedať
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 :)

 
Odpovedať
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

 
Odpovedať
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

 
Odpovedať
8.6.2016 17:37
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zatiaľ nikto nevložil komentár - buď prvý!