コード例 #1
0
        private void DrawShape(PascalShape shape)
        {
            SDL.SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
            SDL.SDL_RenderClear(renderer);

            SDL.SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
            var points = shape.Points;

            SDL.SDL_RenderDrawPoints(renderer, points, points.Length);
            SDL.SDL_RenderPresent(renderer);
        }
コード例 #2
0
        public MainForm()
        {
            InitializeComponent();
            Thread thread = new Thread(() =>
            {
                SDL.SDL_Init(SDL.SDL_INIT_EVERYTHING);
                IntPtr wnd = SDL.SDL_CreateWindow("Pascal shape SDL", 100, 100, 800, 600, SDL.SDL_WindowFlags.SDL_WINDOW_RESIZABLE |
                                                  SDL.SDL_WindowFlags.SDL_WINDOW_SHOWN);
                var shape = new PascalShape();
                renderer  = SDL.SDL_CreateRenderer(wnd, -1, SDL.SDL_RendererFlags.SDL_RENDERER_ACCELERATED);
                DrawShape(shape);
                bool quit = false;
                while (!quit)
                {
                    SDL.SDL_Event sdlEvent;
                    SDL.SDL_PollEvent(out sdlEvent);
                    switch (sdlEvent.type)
                    {
                    case SDL.SDL_EventType.SDL_QUIT:
                        {
                            quit = true;
                            break;
                        }

                    case SDL.SDL_EventType.SDL_KEYDOWN:
                        {
                            var key = sdlEvent.key;
                            switch (key.keysym.sym)
                            {
                            case SDL.SDL_Keycode.SDLK_DOWN:
                                shape.TransformY += 10;
                                break;

                            case SDL.SDL_Keycode.SDLK_UP:
                                shape.TransformY -= 10;
                                break;

                            case SDL.SDL_Keycode.SDLK_LEFT:
                                shape.TransformX -= 10;
                                break;

                            case SDL.SDL_Keycode.SDLK_RIGHT:
                                shape.TransformX += 10;
                                break;

                            case SDL.SDL_Keycode.SDLK_LCTRL:
                                shape.Rotate += 10;
                                break;

                            case SDL.SDL_Keycode.SDLK_RCTRL:
                                shape.Rotate -= 10;
                                break;
                            }
                            break;
                        }

                    case SDL.SDL_EventType.SDL_MOUSEBUTTONDOWN:
                        {
                            if (sdlEvent.button.button == SDL.SDL_BUTTON_LEFT)
                            {
                                if (shape.Scale < 3)
                                {
                                    shape.Scale += 0.1;
                                }
                            }
                            if (sdlEvent.button.button == SDL.SDL_BUTTON_RIGHT)
                            {
                                if (shape.Scale > 0.2)
                                {
                                    shape.Scale -= 0.1;
                                }
                            }
                            break;
                        }
                    }
                    DrawShape(shape);
                    Thread.Sleep(10);
                }
                SDL.SDL_DestroyRenderer(renderer);
                SDL.SDL_DestroyWindow(wnd);
                SDL.SDL_Quit();
            });

            thread.Start();
            thread.Join();
        }