コード例 #1
0
ファイル: Main.cpp プロジェクト: abo0ody26/OpenGL-SDL
void MainLoop(void)
{
    bool done = false;                                     // is our job done ? not yet !
    SDL_Event event;

    while(! done)                                          // as long as our job's not done
    {
        while( SDL_PollEvent(& event) )                    // look for events (like keystrokes, resizing etc.)
        {
            switch ( event.type )                          // what kind of event have we got ?
            {
                case SDL_QUIT :                                         // if user wishes to quit
                    done = true;                                        // this implies our job is done
                    break;

                case SDL_KEYDOWN :                                      // if the user has pressed a key
                    HandleKeyPressEvent( & event. key.keysym );         // callback for handling keystrokes, arg is key pressed
                    break;
                    
                case SDL_KEYUP :
                    HandleKeyReleaseEvent(& event.key.keysym) ;         // callback for handling keystrokes, arg is key released
                    break;

                case SDL_VIDEORESIZE :                                  // if there is a resize event
                    // request SDL to resize the window to the size and depth etc. that we specify
                    MainWindow = SDL_SetVideoMode( event.resize.w, event.resize.h, SCREEN_DEPTH, VideoFlags );
                    SizeOpenGLScreen(event.resize.w, event.resize.h);   // now resize the OpenGL viewport
    
                    if(MainWindow == NULL)                              // if window resize has failed
                    {
                        cerr << " Failed resizing SDL window : " << SDL_GetError() << endl;   // report error
                        Quit(0);
                    }
                    break;

                default:                                    // any other event
                    break;                                  // nothing to do
            } // switch
        } // while( SDL_ ...
//////////// *** NEW *** ////////// *** NEW *** ///////////// *** NEW *** ////////////////////
            
            // Here we check for mouse and key movements every frame
            g_Camera.SetViewByMouse();                    // Move the camera by the mouse
            CheckForMovement();                           // Check if we pressed a key
            
            RenderScene();                                // Update the screen    
            
//////////// *** NEW *** ////////// *** NEW *** ///////////// *** NEW *** ////////////////////
    } // while( ! done)
}
コード例 #2
0
ファイル: GUIWindow.cpp プロジェクト: ckl1202/splotch
		Event GUIWindow::GetNextEvent()
		{
			// Setup a temporary event and get the next X11 event
			Event event;
			XNextEvent(display, &xEvent);

			// See what type of event we have
			switch(xEvent.type)
			{
				case Expose:
					HandleExposeEvent(event);
				break;

				case KeyPress:
					HandleKeyPressEvent(event);
				break;

				case KeyRelease:
					HandleKeyReleaseEvent(event);
				break;

				case ButtonPress:
					HandleButtonPressEvent(event);
				break;

				case ButtonRelease:
					HandleButtonReleaseEvent(event);
				break;

				case MotionNotify:
					HandleMotionNotifyEvent(event);
				break;

				case ClientMessage:
					HandleClientMessageEvent(event);
				break;

				case ConfigureNotify:
				{
					XConfigureEvent xce = xEvent.xconfigure;

					// Test for resize event
					if(xce.width != width || xce.height != height)
					{
						width = xce.width;
						height = xce.height;

						event.eventType = evResize;
						event.mouseX = width;
						event.mouseY = height;
					}
				}
				break;

				default:
					HandleIgnoreEvent(event);
				break;
			}

			return event;
		}
コード例 #3
0
ファイル: event.c プロジェクト: joewing/xdiamonds
/** Game event loop. */
void EventLoop() {

   struct timeval last, current;
   unsigned long elapsedTime;
   int repeat;
   XEvent event;

   SetFirstLevel();

   XSelectInput(display, mainWindow, KeyPressMask | KeyReleaseMask
      | ButtonPressMask | ButtonReleaseMask | ExposureMask);

   shouldExit = 0;

   DoStartDelay();

   gettimeofday(&last, NULL);

   while(!shouldExit) {

      if(didWin) {
         WinLoop();
         NextLevel();
         moveRight = 0;
         moveLeft = 0;
         gettimeofday(&last, NULL);
      }
      if(didLose) {
         Redraw();
         DoStartDelay();
         break;
      }

      while(XPending(display) > 0) {
         XNextEvent(display, &event);
         switch(event.type) {
         case Expose:
            HandleExposeEvent(&event.xexpose);
            break;
         case KeyPress:
            HandleKeyPressEvent(&event.xkey);
            break;
         case KeyRelease:
            HandleKeyReleaseEvent(&event.xkey);
            break;
         case ButtonPress:
            HandleButtonPressEvent();
            break;
         default:
            break;
         }
      }

      if(isPaused) {
         gettimeofday(&last, NULL);
         continue;
      }

      gettimeofday(&current, NULL);
      elapsedTime = (current.tv_sec - last.tv_sec) * 1000000;
      elapsedTime += current.tv_usec - last.tv_usec;

      if(elapsedTime >= SPEED) {
         last = current;

         EraseBall();
         repeat = (int)(((float)elapsedTime / SPEED) + 0.5);
         do {
            if(moveRight && !moveLeft) {
               MoveBallRight();
            } else if(moveLeft && !moveRight) {
               MoveBallLeft();
            }
            MoveBall();
            --repeat;
         } while(repeat);
         DrawBall();

         Redraw();

         if(didDie) {
            didDie = 0;
            DoStartDelay();
            gettimeofday(&last, NULL);
         }

      }

   }
}