/// Callbacks void CCLayer::onEnter() { CCDirector* pDirector = CCDirector::sharedDirector(); // register 'parent' nodes first // since events are propagated in reverse order if (m_bTouchEnabled) { this->registerWithTouchDispatcher(); } // then iterate over all the children CCNode::onEnter(); // add this layer to concern the Accelerometer Sensor if (m_bAccelerometerEnabled) { pDirector->getAccelerometer()->setDelegate(this); } // add this layer to concern the keypad msg if (m_bKeypadEnabled) { pDirector->getKeypadDispatcher()->addDelegate(this); } }
/// isKeypadEnabled setter void CAViewController::setKeypadEnabled(bool enabled) { if (enabled != m_bKeypadEnabled) { m_bKeypadEnabled = enabled; CCDirector* pDirector = CCDirector::sharedDirector(); if (enabled) { pDirector->getKeypadDispatcher()->addDelegate(this); } else { pDirector->getKeypadDispatcher()->removeDelegate(this); } } }
jboolean Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeKeyDown(JNIEnv* env, jobject thiz, jint keyCode) { CCDirector* pDirector = CCDirector::sharedDirector(); switch (keyCode) { case KEYCODE_BACK: if (pDirector->getKeypadDispatcher()->dispatchKeypadMSG(kTypeBackClicked)) return JNI_TRUE; break; case KEYCODE_MENU: if (pDirector->getKeypadDispatcher()->dispatchKeypadMSG(kTypeMenuClicked)) return JNI_TRUE; break; default: return JNI_FALSE; } return JNI_FALSE; }
/// isKeypadEnabled setter void CCLayer::setKeypadEnabled(bool enabled) { if (enabled != m_bKeypadEnabled) { m_bKeypadEnabled = enabled; if (m_bRunning) { CCDirector* pDirector = CCDirector::sharedDirector(); if (enabled) { pDirector->getKeypadDispatcher()->addDelegate(this); } else { pDirector->getKeypadDispatcher()->removeDelegate(this); } } } }
CAViewController::~CAViewController() { m_pView->setViewDelegate(NULL); CC_SAFE_RELEASE_NULL(m_pView); CC_SAFE_DELETE(m_pTabBarItem); CC_SAFE_DELETE(m_pNavigationBarItem); CCDirector* pDirector = CCDirector::sharedDirector(); if (m_bKeypadEnabled) { pDirector->getKeypadDispatcher()->removeDelegate(this); } }
JNIEXPORT jboolean JNICALL Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeKeyEvent(JNIEnv * env, jobject thiz, jint keyCode, jint keyType) { int key = kCodeUnknown; switch (keyCode) { case KEYCODE_BACK: key = kCodeBack; break; case KEYCODE_MENU: key = kCodeMenu; break; case KEYCODE_ENTER: case KEYCODE_DPAD_CENTER: key = kCodeEnter; break; case KEYCODE_DPAD_UP: key = kCodeUp; break; case KEYCODE_DPAD_DOWN: key = kCodeDown; break; case KEYCODE_DPAD_LEFT: key = kCodeLeft; break; case KEYCODE_DPAD_RIGHT: key = kCodeRight; break; case KEYCODE_VOLUME_UP: key = kCodeVolUp; break; case KEYCODE_VOLUME_DOWN: key = kCodeVolDown; break; default: return JNI_FALSE; } CCDirector* pDirector = CCDirector::sharedDirector(); if (pDirector->getKeypadDispatcher()->dispatchKeypadEvent(key, keyType)) { return JNI_TRUE; } return JNI_FALSE; }
void CCLayer::onExit() { CCDirector* pDirector = CCDirector::sharedDirector(); if( m_bIsTouchEnabled ) { pDirector->getTouchDispatcher()->removeDelegate(this); unregisterScriptTouchHandler(); } // remove this layer from the delegates who concern Accelerometer Sensor if (m_bIsAccelerometerEnabled) { pDirector->getAccelerometer()->setDelegate(NULL); } // remove this layer from the delegates who concern the kaypad msg if (m_bIsKeypadEnabled) { pDirector->getKeypadDispatcher()->removeDelegate(this); } CCNode::onExit(); }
void CCLayer::onExit() { CCDirector* pDirector = CCDirector::sharedDirector(); if( m_bTouchEnabled ) { pDirector->getTouchDispatcher()->removeDelegate(this); // [lua]:don't unregister script touch handler, or the handler will be destroyed // unregisterScriptTouchHandler(); } // remove this layer from the delegates who concern Accelerometer Sensor if (m_bAccelerometerEnabled) { pDirector->getAccelerometer()->setDelegate(NULL); } // remove this layer from the delegates who concern the keypad msg if (m_bKeypadEnabled) { pDirector->getKeypadDispatcher()->removeDelegate(this); } CCNode::onExit(); }
LRESULT CCEGLView::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) { BOOL bProcessed = FALSE; switch (message) { case WM_LBUTTONDOWN: #if(_MSC_VER >= 1600) // Don't process message generated by Windows Touch if (m_bSupportTouch && (s_pfGetMessageExtraInfoFunction() & MOUSEEVENTF_FROMTOUCH) == MOUSEEVENTF_FROMTOUCH) break; #endif /* #if(_MSC_VER >= 1600) */ if (m_pDelegate && MK_LBUTTON == wParam) { POINT point = {(short)LOWORD(lParam), (short)HIWORD(lParam)}; CCPoint pt(point.x, point.y); pt.x /= m_fFrameZoomFactor; pt.y /= m_fFrameZoomFactor; CCPoint tmp = ccp(pt.x, m_obScreenSize.height - pt.y); if (m_obViewPortRect.equals(CCRectZero) || m_obViewPortRect.containsPoint(tmp)) { m_bCaptured = true; SetCapture(m_hWnd); int id = 0; handleTouchesBegin(1, &id, &pt.x, &pt.y); } } break; case WM_MOUSEMOVE: #if(_MSC_VER >= 1600) // Don't process message generated by Windows Touch if (m_bSupportTouch && (s_pfGetMessageExtraInfoFunction() & MOUSEEVENTF_FROMTOUCH) == MOUSEEVENTF_FROMTOUCH) break; #endif /* #if(_MSC_VER >= 1600) */ if (MK_LBUTTON == wParam && m_bCaptured) { POINT point = {(short)LOWORD(lParam), (short)HIWORD(lParam)}; CCPoint pt(point.x, point.y); int id = 0; pt.x /= m_fFrameZoomFactor; pt.y /= m_fFrameZoomFactor; handleTouchesMove(1, &id, &pt.x, &pt.y); } break; case WM_LBUTTONUP: #if(_MSC_VER >= 1600) // Don't process message generated by Windows Touch if (m_bSupportTouch && (s_pfGetMessageExtraInfoFunction() & MOUSEEVENTF_FROMTOUCH) == MOUSEEVENTF_FROMTOUCH) break; #endif /* #if(_MSC_VER >= 1600) */ if (m_bCaptured) { POINT point = {(short)LOWORD(lParam), (short)HIWORD(lParam)}; CCPoint pt(point.x, point.y); int id = 0; pt.x /= m_fFrameZoomFactor; pt.y /= m_fFrameZoomFactor; handleTouchesEnd(1, &id, &pt.x, &pt.y); ReleaseCapture(); m_bCaptured = false; } break; #if(_MSC_VER >= 1600) case WM_TOUCH: { BOOL bHandled = FALSE; UINT cInputs = LOWORD(wParam); PTOUCHINPUT pInputs = new TOUCHINPUT[cInputs]; if (pInputs) { if (s_pfGetTouchInputInfoFunction((HTOUCHINPUT)lParam, cInputs, pInputs, sizeof(TOUCHINPUT))) { for (UINT i=0; i < cInputs; i++) { TOUCHINPUT ti = pInputs[i]; POINT input; input.x = TOUCH_COORD_TO_PIXEL(ti.x); input.y = TOUCH_COORD_TO_PIXEL(ti.y); ScreenToClient(m_hWnd, &input); CCPoint pt(input.x, input.y); CCPoint tmp = ccp(pt.x, m_obScreenSize.height - pt.y); if (m_obViewPortRect.equals(CCRectZero) || m_obViewPortRect.containsPoint(tmp)) { pt.x /= m_fFrameZoomFactor; pt.y /= m_fFrameZoomFactor; if (ti.dwFlags & TOUCHEVENTF_DOWN) handleTouchesBegin(1, reinterpret_cast<int*>(&ti.dwID), &pt.x, &pt.y); else if (ti.dwFlags & TOUCHEVENTF_MOVE) handleTouchesMove(1, reinterpret_cast<int*>(&ti.dwID), &pt.x, &pt.y); else if (ti.dwFlags & TOUCHEVENTF_UP) handleTouchesEnd(1, reinterpret_cast<int*>(&ti.dwID), &pt.x, &pt.y); } } bHandled = TRUE; } delete [] pInputs; } if (bHandled) { s_pfCloseTouchInputHandleFunction((HTOUCHINPUT)lParam); } } break; #endif /* #if(_MSC_VER >= 1600) */ case WM_SIZE: switch (wParam) { case SIZE_RESTORED: CCApplication::sharedApplication()->applicationWillEnterForeground(); break; case SIZE_MINIMIZED: CCApplication::sharedApplication()->applicationDidEnterBackground(); break; } break; case WM_KEYDOWN: if (wParam == VK_F1 || wParam == VK_F2) { CCDirector* pDirector = CCDirector::sharedDirector(); if (GetKeyState(VK_LSHIFT) < 0 || GetKeyState(VK_RSHIFT) < 0 || GetKeyState(VK_SHIFT) < 0) pDirector->getKeypadDispatcher()->dispatchKeypadMSG(wParam == VK_F1 ? kTypeBackClicked : kTypeMenuClicked); } if ( m_lpfnAccelerometerKeyHook!=NULL ) { (*m_lpfnAccelerometerKeyHook)( message,wParam,lParam ); } break; case WM_KEYUP: if ( m_lpfnAccelerometerKeyHook!=NULL ) { (*m_lpfnAccelerometerKeyHook)( message,wParam,lParam ); } break; case WM_CHAR: { if (wParam < 0x20) { if (VK_BACK == wParam) { CCIMEDispatcher::sharedDispatcher()->dispatchDeleteBackward(); } else if (VK_RETURN == wParam) { CCIMEDispatcher::sharedDispatcher()->dispatchInsertText("\n", 1); } else if (VK_TAB == wParam) { // tab input } else if (VK_ESCAPE == wParam) { // ESC input //CCDirector::sharedDirector()->end(); } } else if (wParam < 128) { // ascii char CCIMEDispatcher::sharedDispatcher()->dispatchInsertText((const char *)&wParam, 1); } else { char szUtf8[8] = {0}; int nLen = WideCharToMultiByte(CP_UTF8, 0, (LPCWSTR)&wParam, 1, szUtf8, sizeof(szUtf8), NULL, NULL); CCIMEDispatcher::sharedDispatcher()->dispatchInsertText(szUtf8, nLen); } if ( m_lpfnAccelerometerKeyHook!=NULL ) { (*m_lpfnAccelerometerKeyHook)( message,wParam,lParam ); } } break; case WM_PAINT: PAINTSTRUCT ps; BeginPaint(m_hWnd, &ps); EndPaint(m_hWnd, &ps); break; case WM_CLOSE: CCDirector::sharedDirector()->end(); break; case WM_DESTROY: destroyGL(); PostQuitMessage(0); break; default: if (m_wndproc) { m_wndproc(message, wParam, lParam, &bProcessed); if (bProcessed) break; } return DefWindowProc(m_hWnd, message, wParam, lParam); } if (m_wndproc && !bProcessed) { m_wndproc(message, wParam, lParam, &bProcessed); } return 0; }
bool AppDelegate::applicationDidFinishLaunching() { //初始化分享 SocialShareAPI::getInstance()->initShareAPI(); // initialize director CCDirector *pDirector = CCDirector::sharedDirector(); pDirector->setOpenGLView(CCEGLView::sharedOpenGLView()); pDirector->setProjection(kCCDirectorProjection2D); CCSize screenSize = CCEGLView::sharedOpenGLView()->getFrameSize(); CCSize designSize = CCSizeMake(320, 480); CCSize resourceSize = CCSizeMake(320, 480); //对不准了,注意改这个参数 float resizeFactor = 1.0; std::vector<std::string> resDirOrders; ResolutionPolicy resolutionPolicy = kResolutionNoBorder; TargetPlatform platform = CCApplication::sharedApplication()->getTargetPlatform(); if (platform == kTargetIphone || platform == kTargetIpad) { std::vector<std::string> searchPaths = CCFileUtils::sharedFileUtils()->getSearchPaths(); searchPaths.insert(searchPaths.begin(), "TestCCB"); CCFileUtils::sharedFileUtils()->setSearchPaths(searchPaths); if (platform == kTargetIphone) { if (screenSize.height > 1136) { designSize = CCSizeMake(384, 512); resourceSize = CCSizeMake(1536, 2048); resDirOrders.push_back("resources-ipadhd"); resDirOrders.push_back("resources-ipad"); resDirOrders.push_back("resources-iphonehd"); resizeFactor = 4.0; } else if (screenSize.height > 1024) { designSize = CCSizeMake(320, 568); resourceSize = CCSizeMake(640, 1136); resDirOrders.push_back("resources-ipad"); resDirOrders.push_back("resources-iphonehd"); resizeFactor = 2.0; } else if (screenSize.height > 960) { designSize = CCSizeMake(384, 512); resourceSize = CCSizeMake(768, 1024); resDirOrders.push_back("resources-ipad"); resDirOrders.push_back("resources-iphonehd"); resizeFactor = 2.0; } else if (screenSize.height > 480) { designSize = CCSizeMake(320, 480); resourceSize = CCSizeMake(640, 960); resDirOrders.push_back("resources-iphonehd"); resDirOrders.push_back("resources-iphone"); resizeFactor = 2.0; } else { designSize = CCSizeMake(320, 480); resourceSize = CCSizeMake(320, 480); resDirOrders.push_back("resources-iphonehd"); resDirOrders.push_back("resources-iphone"); resizeFactor = 2.0; } } else { // for iPad, Just Scale Up designSize = CCSizeMake(320, 426); resourceSize = CCSizeMake(640, 960); resDirOrders.push_back("resources-iphonehd"); resDirOrders.push_back("resources-iphone"); resizeFactor = resourceSize.width/designSize.width; } resolutionPolicy = kResolutionNoBorder; } else if (platform == kTargetAndroid || platform == kTargetWindows) { #if 0 if (screenSize.height > 960) { resourceSize = CCSizeMake(1280, 1920); resDirOrders.push_back("resources-xlarge"); resDirOrders.push_back("resources-large"); resDirOrders.push_back("resources-medium"); resDirOrders.push_back("resources-small"); } else if (screenSize.height > 720) { resourceSize = CCSizeMake(640, 960); resDirOrders.push_back("resources-large"); resDirOrders.push_back("resources-medium"); resDirOrders.push_back("resources-small"); } else if (screenSize.height > 480) { resourceSize = CCSizeMake(480, 720); resDirOrders.push_back("resources-medium"); resDirOrders.push_back("resources-small"); } else { resourceSize = CCSizeMake(320, 480); resDirOrders.push_back("resources-small"); } #endif if (screenSize.height > 720) { if(screenSize.height / screenSize.width >= 1136/640) { resourceSize = CCSizeMake(640, 1136); } else { resourceSize = CCSizeMake(640, 960); } resDirOrders.push_back("resources-large"); //resDirOrders.push_back("resources-medium"); resDirOrders.push_back("resources-small"); m_Helper.androidResourceType = kCPreloadHelperAndroidResourceTypeLarge; } else { if(screenSize.height / screenSize.width >= 568/320) { resourceSize = CCSizeMake(320, 568); } else { resourceSize = CCSizeMake(320, 480); } resDirOrders.push_back("resources-small"); m_Helper.androidResourceType = kCPreloadHelperAndroidResourceTypeSmall; } resolutionPolicy = kResolutionFixedWidth; resizeFactor = resourceSize.width/designSize.width; //designSize.height = designSize.width * resourceSize.height / resourceSize.width; designSize.height = designSize.width * screenSize.height / screenSize.width; } CCFileUtils::sharedFileUtils()->setSearchResolutionsOrder(resDirOrders); //pDirector->setContentScaleFactor(resourceSize.width/designSize.width); pDirector->setContentScaleFactor(resizeFactor); #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS) m_Helper.Preload(); #endif CCEGLView::sharedOpenGLView()->setDesignResolutionSize(designSize.width, designSize.height, kResolutionNoBorder); // turn on display FPS pDirector->setDisplayStats(false);//pDirector->setDisplayStats(true);// // set FPS. the default value is 1.0/60 if you don't call this pDirector->setAnimationInterval(1.0 / 60); ScriptingCore* sc = ScriptingCore::getInstance(); sc->addRegisterCallback(register_all_cocos2dx); sc->addRegisterCallback(register_all_cocos2dx_extension); sc->addRegisterCallback(register_cocos2dx_js_extensions); sc->addRegisterCallback(register_all_cocos2dx_extension_manual); sc->addRegisterCallback(register_CCBuilderReader); sc->addRegisterCallback(jsb_register_chipmunk); sc->addRegisterCallback(jsb_register_system); sc->addRegisterCallback(JSB_register_opengl); sc->addRegisterCallback(MinXmlHttpRequest::_js_register); sc->addRegisterCallback(js_OfferWallController::_js_register); sc->addRegisterCallback(register_all_jsb_SocialShareAPI); #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS) sc->addRegisterCallback(register_all_jsb_iOSiapWrapper); #elif (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) #endif /*CC_TARGET_PLATFORM*/ sc->addRegisterCallback(CommonFunction::_js_register); // 初始化友盟统计 CStat* pStat = CStat::GetInstance(); pStat->Init(); sc->addRegisterCallback(CStatParam::_js_register); sc->addRegisterCallback(CStat::_js_register); sc->start(); CCScriptEngineProtocol *pEngine = ScriptingCore::getInstance(); CCScriptEngineManager::sharedManager()->setScriptEngine(pEngine); ResetCoin(); #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) initChannel(); #endif /*CC_TARGET_PLATFORM*/ ScriptingCore::getInstance()->runScript("main.js"); //ScriptingCore::getInstance()->runScript("hello.js"); #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) m_Helper.load(); #endif pStat->logTimedEventBegin("runtime"); // //testUnzipFiles(); //UInt32 category = AVAudioSessionCategoryPlayAndRecord; //AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(category), &category); //UInt32 route = kAudioSessionOverrideAudioRoute_None; //AudioSessionSetProperty(kAudioSessionProperty_OverrideAudioRoute, sizeof(route), &route); SimpleAudioEngine::sharedEngine()->setEffectsVolume(0.8); #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) CommonFunction_Notify_Splash_Fade(); #endif #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) m_pKeypadDelegate = new CCMyKeypadDelegate(); if ( pDirector->getKeypadDispatcher() != NULL ) { pDirector->getKeypadDispatcher()->addDelegate(m_pKeypadDelegate); } #endif return true; }
LRESULT CCEGLView::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) { BOOL bProcessed = FALSE; switch (message) { case WM_LBUTTONDOWN: if (m_pDelegate && MK_LBUTTON == wParam) { POINT point = {(short)LOWORD(lParam), (short)HIWORD(lParam)}; CCPoint pt(point.x/CC_CONTENT_SCALE_FACTOR(), point.y/CC_CONTENT_SCALE_FACTOR()); CCPoint tmp = ccp(pt.x, m_obScreenSize.height - pt.y); if (m_obViewPortRect.equals(CCRectZero) || m_obViewPortRect.containsPoint(tmp)) { m_bCaptured = true; SetCapture(m_hWnd); int id = 0; pt.x *= m_windowTouchScaleX; pt.y *= m_windowTouchScaleY; handleTouchesBegin(1, &id, &pt.x, &pt.y); } } break; case WM_MOUSEMOVE: if (MK_LBUTTON == wParam && m_bCaptured) { POINT point = {(short)LOWORD(lParam), (short)HIWORD(lParam)}; CCPoint pt(point.x/CC_CONTENT_SCALE_FACTOR(), point.y/CC_CONTENT_SCALE_FACTOR()); int id = 0; pt.x *= m_windowTouchScaleX; pt.y *= m_windowTouchScaleY; handleTouchesMove(1, &id, &pt.x, &pt.y); } break; case WM_LBUTTONUP: if (m_bCaptured) { POINT point = {(short)LOWORD(lParam), (short)HIWORD(lParam)}; CCPoint pt(point.x/CC_CONTENT_SCALE_FACTOR(), point.y/CC_CONTENT_SCALE_FACTOR()); int id = 0; pt.x *= m_windowTouchScaleX; pt.y *= m_windowTouchScaleY; handleTouchesEnd(1, &id, &pt.x, &pt.y); ReleaseCapture(); m_bCaptured = false; } break; case WM_SIZE: switch (wParam) { case SIZE_RESTORED: CCApplication::sharedApplication()->applicationWillEnterForeground(); break; case SIZE_MINIMIZED: CCApplication::sharedApplication()->applicationDidEnterBackground(); break; } break; case WM_KEYDOWN: if (wParam == VK_F1 || wParam == VK_F2) { CCDirector* pDirector = CCDirector::sharedDirector(); if (GetKeyState(VK_LSHIFT) < 0 || GetKeyState(VK_RSHIFT) < 0 || GetKeyState(VK_SHIFT) < 0) pDirector->getKeypadDispatcher()->dispatchKeypadMSG(wParam == VK_F1 ? kTypeBackClicked : kTypeMenuClicked); } if ( m_lpfnAccelerometerKeyHook!=NULL ) { (*m_lpfnAccelerometerKeyHook)( message,wParam,lParam ); } break; case WM_KEYUP: if ( m_lpfnAccelerometerKeyHook!=NULL ) { (*m_lpfnAccelerometerKeyHook)( message,wParam,lParam ); } break; case WM_CHAR: { if (wParam < 0x20) { if (VK_BACK == wParam) { CCIMEDispatcher::sharedDispatcher()->dispatchDeleteBackward(); } else if (VK_RETURN == wParam) { CCIMEDispatcher::sharedDispatcher()->dispatchInsertText("\n", 1); } else if (VK_TAB == wParam) { // tab input } else if (VK_ESCAPE == wParam) { // ESC input //CCDirector::sharedDirector()->end(); } } else if (wParam < 128) { // ascii char CCIMEDispatcher::sharedDispatcher()->dispatchInsertText((const char *)&wParam, 1); } else { char szUtf8[8] = {0}; int nLen = WideCharToMultiByte(CP_UTF8, 0, (LPCWSTR)&wParam, 1, szUtf8, sizeof(szUtf8), NULL, NULL); CCIMEDispatcher::sharedDispatcher()->dispatchInsertText(szUtf8, nLen); } if ( m_lpfnAccelerometerKeyHook!=NULL ) { (*m_lpfnAccelerometerKeyHook)( message,wParam,lParam ); } } break; case WM_PAINT: PAINTSTRUCT ps; BeginPaint(m_hWnd, &ps); EndPaint(m_hWnd, &ps); break; case WM_CLOSE: CCDirector::sharedDirector()->end(); break; case WM_DESTROY: destroyGL(); PostQuitMessage(0); break; default: if (m_wndproc) { m_wndproc(message, wParam, lParam, &bProcessed); if (bProcessed) break; } return DefWindowProc(m_hWnd, message, wParam, lParam); } if (m_wndproc && !bProcessed) { m_wndproc(message, wParam, lParam, &bProcessed); } return 0; }