// // 函数:bool onMessage(UINT message, WPARAM wParam, LPARAM lParam) // // 目的:窗口消息处理函数 // // 返回值:已处理,返回true,否则返回false // bool onMessage(UINT message, WPARAM wParam, LPARAM lParam) { // 如果是键盘消息,获取键盘状态 if (message == WM_KEYDOWN || message == WM_KEYUP) { if (!getKeyboardState()) { return false; } } // 获取鼠标状态 getMouseState(message); bool handled = false; MSG_LISTENER_MAP::iterator at = myListenerMap.find(message); if (at != myListenerMap.end()) { LISTENER_LIST& listeners = at->second; for (LISTENER_LIST::iterator it = listeners.begin(); it != listeners.end() && !handled; ++it) { YCIInputListener* listener = *it; if (listener->onMessage(message, wParam, lParam)) { handled = true; } } } return handled; }
void TEventQueue::getMouseEvent( TEvent & ev) { if( mouseEvents == True ) { if( !getMouseState( ev ) ) return; ev.mouse.eventFlags = 0; if( ev.mouse.buttons == 0 && lastMouse.buttons != 0 ) { ev.what = evMouseUp; lastMouse = ev.mouse; return; } if( ev.mouse.buttons != 0 && lastMouse.buttons == 0 ) { if( ev.mouse.buttons == downMouse.buttons && ev.mouse.where == downMouse.where && ev.what - downTicks <= doubleDelay && !(downMouse.eventFlags & meDoubleClick ) ) ev.mouse.eventFlags |= meDoubleClick; downMouse = ev.mouse; autoTicks = downTicks = ev.what; autoDelay = repeatDelay; ev.what = evMouseDown; lastMouse = ev.mouse; return; } ev.mouse.buttons = lastMouse.buttons; if( ev.mouse.where != lastMouse.where ) { ev.what = evMouseMove; ev.mouse.eventFlags |= meMouseMoved; lastMouse = ev.mouse; return; } if( ev.mouse.buttons != 0 && ev.what - autoTicks > autoDelay ) { autoTicks = ev.what; autoDelay = 1; ev.what = evMouseAuto; lastMouse = ev.mouse; return; } } ev.what = evNothing; }
bool Util::keyPressed() { int16 key = checkKey(); if (key) return true; int16 x, y; MouseButtons buttons; getMouseState(&x, &y, &buttons); return buttons != kMouseButtonsNone; }
void Util::waitMouseDown() { int16 x; int16 y; MouseButtons buttons; do { processInput(); getMouseState(&x, &y, &buttons); if (buttons == 0) delay(10); } while (buttons == 0); }
//----------------------------------------------------------------- void InputAgent::installHandler(InputHandler *handler) { if (m_handler) { m_handler->takePressed(NULL); m_handler->mouseState(V2(-1, -1), 0); } m_handler = handler; if (m_handler) { m_handler->takePressed(m_keys); Uint8 buttons; V2 mouseLoc = getMouseState(&buttons); m_handler->mouseState(mouseLoc, buttons); } }
//----------------------------------------------------------------- void InputAgent::own_update() { //FFNG event loop from jni SDL_Event event; while (FFNGInputEvent::pollEvent/*FFNG SDL_PollEvent*/(&event)) { switch (event.type) { case /*FFNG SDL_QUIT*/SDL_Event::QUIT: { BaseMsg *msg = new SimpleMsg(Name::APP_NAME, "quit"); MessagerAgent::agent()->forwardNewMsg(msg); break; } case /*FFNG SDL_KEYDOWN*/SDL_Event::KEYDOWN: m_keyBinder->keyDown(event.key/*FFNG .keysym*/); if (m_handler) { m_handler->keyEvent(KeyStroke(event.key/*FFNG .keysym*/)); } break; case /*FFNG SDL_KEYUP*/SDL_Event::KEYUP: if (m_handler) { m_handler->keyUp(KeyStroke(event.key/*FFNG .keysym*/)); } break; case /*FFNG SDL_MOUSEBUTTONDOWN*/SDL_Event::MOUSEBUTTONDOWN: if (m_handler) { m_handler->mouseEvent(MouseStroke(event.button)); } break; default: break; } } if (m_handler) { Uint8 buttons; V2 mouseLoc = getMouseState(&buttons); m_handler->mouseState(mouseLoc, buttons); } }
void CustomMouse::render(SDL_Surface* src_surface) const { GameSurface::draw(mSurface, src_surface, getMouseState(), mouseClip[mFrame]); }
//--------------------------------------------- GET MOUSE STATE -------------------------------------------- bool GameImpl::getMouseState(MouseButton button) const { return getMouseState((int)button); }
void run(){ Display gDisplay; Assets gAssets; ControlState gControlState; SDL_Event e; bool quit = false; srand(time(NULL)); if (!initDisplay(&gDisplay)) { fprintf(stderr, "ERROR: failed to initialize\n"); exit(1); } if (!loadAssets(&gAssets, &gDisplay)) { fprintf(stderr, "ERROR: failed to load game assets\n"); exit(1); } Player p = P_createPlayer(); AI *ai = AI_createAI(); LinkedList playerBulletList = LL_createLinkedList(); LinkedList enemyBulletList = LL_createLinkedList(); LinkedList enemyList = LL_createLinkedList(); Timer fpsCapTimer = T_createTimer(); Timer gameTimer = T_createTimer(); unsigned int lastShooting = 0; unsigned int lastEnemenySpawn = 0; unsigned int check = 0; T_start(&gameTimer); int controlarray[4] = {0}; SDL_Rect healthbar; initialisehealthbar(&healthbar); quit = staticscreen(gDisplay.renderer, "Assets/startmenu.bmp"); SDL_Surface* temp; SDL_Texture* background; temp = SDL_LoadBMP("Assets/background.bmp"); background = SDL_CreateTextureFromSurface(gDisplay.renderer, temp); SDL_FreeSurface(temp); temp = NULL; /*Event loop*/ do{ // start frame timer T_start(&fpsCapTimer); // check for exit event SDL_PollEvent(&e); quit = (e.type == SDL_QUIT); // check to open ai interface if(e.type == SDL_KEYDOWN){ if(e.key.keysym.sym == SDLK_ESCAPE){ quit = openaiscreen(gDisplay.renderer, controlarray); e.key.keysym.sym = SDLK_0; SDL_PushEvent(&e); } } // move player getKeyState(&gControlState); getMouseState(&gControlState); movePlayer(&p, &gControlState, &gAssets); AI_move(ai, P_getPosition(&p)); if ((check = T_getTicks(&gameTimer)) - lastEnemenySpawn > DEFAULT_SPAWN_INTERVAL) { spawnEnemy(&enemyList); lastEnemenySpawn = check; } aiaction(ai, &playerBulletList, &enemyList, T_getTicks(&gameTimer), controlarray, &p); moveEnemies(&enemyList, P_getPosition(&p)); enemiesShoot(&enemyList, &enemyBulletList, &p, T_getTicks(&gameTimer)); if (leftMouseIsDown() && ((check = T_getTicks(&gameTimer)) - lastShooting) > SHOOT_DELAY) { double mx = (double)gControlState.mouseX / SCREEN_WIDTH; double my = (double)gControlState.mouseY / SCREEN_HEIGHT; Point origin = P_getPosition(&p); Point destination = {mx, my}; shootBullet(&playerBulletList, origin, getShotDirection(origin, destination), PLAYER); lastShooting = check; } moveBullets(&playerBulletList); moveBullets(&enemyBulletList); detectCollision(&playerBulletList, &enemyList, &gAssets); detectCollisionPlayer(&enemyBulletList, &p, &gAssets); /* Update Screen */ SDL_RenderCopy(gDisplay.renderer, background, NULL, NULL); displayhealth(gDisplay.renderer, healthbar, p.health); renderBullets(&playerBulletList, &gDisplay, &gAssets, PLAYER); renderBullets(&enemyBulletList, &gDisplay, &gAssets, ENEMY); renderEnemies(&enemyList, &gDisplay, &gAssets); renderPlayer(&gDisplay, &gAssets, &gControlState); renderAI(ai, &gDisplay, &gAssets); // draw screen SDL_RenderPresent(gDisplay.renderer); delayNextFrame(T_getTicks(&fpsCapTimer)); if (gameOver(&p)) { printf("GAME OVER\n"); quit = staticscreen(gDisplay.renderer, "Assets/gameover.bmp"); p.health = 100; } } while (!quit); /* Memory Cleanup */ LL_destroyLinkedList(&playerBulletList); LL_destroyLinkedList(&enemyBulletList); AI_destroyAI(ai); SDL_DestroyTexture(background); freeAssets(&gAssets); closeDisplay(&gDisplay); }