示例#1
0
        public void RunDemo()
        {
            const uint      screenWidth  = 250;
            const uint      screenHeight = 250;
            GLWindow        window       = new GLWindow((int)screenWidth, (int)screenHeight, 4, 4, AppName);
            PixelGameEngine pge          = new PixelGameEngine(AppName);

            pge.Construct(screenWidth, screenHeight, window);
            pge.OnFrameUpdate += (sender, frameUpdateArgs) =>
            {
                Random rnd = new Random();

                for (uint x = 0; x < pge.ScreenWidth; x++)
                {
                    for (uint y = 0; y < pge.ScreenHeight; y++)
                    {
                        pge.Draw(x, y, new Pixel((byte)rnd.Next(255), (byte)rnd.Next(255), (byte)rnd.Next(255)));
                    }
                }

                pge.DrawString(0, 0, "Sup?", Pixel.WHITE);
            };
            pge.Start();
        }
示例#2
0
        private void pge_OnUpdate(object sender, FrameUpdateEventArgs frameUpdateArgs)
        {
            pge.Clear(Pixel.DARK_BLUE);

            if (runEmulation)
            {
                if (residualTime > 0.0f)
                {
                    residualTime -= frameUpdateArgs.ElapsedTime;
                }
                else
                {
                    residualTime += (1.0 / 60.0988) - frameUpdateArgs.ElapsedTime;

                    handleControllerInputs(pge.Platform.KeyboardState);
                    do
                    {
                        nesBus.clock();
                        playAudioWhenReady();
                    } while (!nesBus.PPU.FrameComplete);
                    nesBus.PPU.FrameComplete = false;
                    _frameCount++;

                    if (DateTime.Now - dtStart >= TimeSpan.FromSeconds(1))
                    {
                        dtStart     = DateTime.Now;
                        _fps        = _frameCount;
                        _frameCount = 0;
                    }
                }
            }

            pge.DrawString(360, 2, $"FPS: {_fps}", Pixel.WHITE);

            // Draw rendered output
            pge.DrawSprite(0, 0, nesBus.PPU.GetScreen(), 1);

            pge.DrawString(0, 265, "X, Z - A, B", Pixel.WHITE);
            pge.DrawString(0, 280, "A, S - START, SELECT", Pixel.WHITE);

            // Draw Ram Page 0x00
            //DrawRam(2, 2, 0x0000, 16, 16);
            //DrawRam(2, 182, 0x0100, 16, 16);
            //DrawCpu(416, 2);
            //DrawCode(416, 72, 26);
            //DrawOam(270, 10, 0, 8, true);
            //DrawOam(270, 140, 0, 32);
            //DrawOam(500, 140, 32, 32);

            // Draw Palettes & Pattern Tables
            //DrawPalettes(516, 340);

            // Draw selection recticle around selected palette
            //pge.DrawRect(516 + selectedPalette * (swatchSize * 5) - 1, 339, (swatchSize * 4), swatchSize, Pixel.WHITE);

            // Generate Pattern Tables
            //pge.DrawSprite(316, 10, nesBus.PPU.GetPatternTable(0, (byte)selectedPalette));
            //pge.DrawSprite(448, 10, nesBus.PPU.GetPatternTable(1, (byte)selectedPalette));
        }