Example #1
0
        /******************** Pętla Gry ******************/

        public void Graj(Scena ScenaPoczatkowa, int maxFPS = 30)
        {
            //Inicjalizacja skłądników gry
            KameraGry = new Kamera(this.ClientSize.Width, this.ClientSize.Height); //Stworzenie obiektu kamery
            ZaladujScene(ScenaPoczatkowa);                                         //Załadowanie początkowej sceny
            this.Show();                                                           //pokazanie okna aplikacji

            //Obiekt klasy Graphics możemy utworzyć poprzez kilka jej statycznych metod
            //lub poprzez metodę CreateGraphics() dla kontrolek WinForms
            Graphics przedniBufor = Graphics.FromHwnd(this.Handle);  //Obszar graficzny naszego okna. Nasze "płótno" przednie
            //Danie uchytu do naszej aplikacji okienkowej
            DateTime czasOstatnijeKlatki = DateTime.Now;             //Dzięki znajomości czasu obliczam FPS
            double   czasNaKlatke        = 1000.0 / maxFPS;          //Tyle milisekund mamy na stworzenie 1 klatki
            Image    tlo = Bitmap.FromFile("Atlasy/background.png"); //Wstawianie tła do okna jako tło do czyszczenia bufora

            while (true)                                             //petla gry
            {
                if (!this.Created)
                {
                    break;                  //Wyjście z pętli gry
                }
                if (KolejnaScena != null)   //Jak zmieniamy scene np. nowy poziom
                {
                    KameraGry.WyczyscBufor();
                    ObecnaScena  = KolejnaScena;
                    KolejnaScena = null;
                    ObecnaScena.Start();
                }
                float dt = (float)(DateTime.Now - czasOstatnijeKlatki).TotalSeconds; //Czas jaki upłynął od ostatniej klatki na scenie
                czasOstatnijeKlatki = DateTime.Now;                                  //Kolejne dt będzie liczone względem tej chwili

                ObecnaScena.Aktualizuj(dt * SkalarCzasu);                            //Obiekty na scenie aktualizują swój stan
                KameraGry.WyczyscBufor(tlo);                                         //Czyszczenie obrazu z poprzednij klatki
                ObecnaScena.Renderuj();                                              //Rysowanie obiektów na ObecnaScena
                KameraGry.KopiujNaPrzedniBufor(przedniBufor);                        //Gotową klatkę wklejamy na ekran

                Application.DoEvents();                                              //Odpowiada za responsywnosć okna, np. wcisniecia klawiszy
                double przerwa = czasNaKlatke - (DateTime.Now - czasOstatnijeKlatki).TotalMilliseconds;
                if (przerwa > 0)
                {
                    System.Threading.Thread.Sleep((int)przerwa);                //Jeżeli scena wykonała się szybciej niż czas na 1 klatke, to zrób przerwe
                }
            }
        }
Example #2
0
        /******************** Metody statyczne  ******************/

        public static void ZaladujScene(Scena nowaScena)
        {
            KolejnaScena = nowaScena;           //Ma zapamiętac przekazaną w argumencie scene
        }