TestCpp里面常用代码摘抄<重力感应和动作管理类>
来源:互联网 发布:unity3d建模教程 编辑:程序博客网 时间:2024/06/05 18:34
一、保证pos的位置在min,max内
#define FIX_POS(_pos, _min, _max) \ if (_pos < _min) \ _pos = _min; \else if (_pos > _max) \ _pos = _max; \用法,保证一个CCSprite在屏幕内。
FIX_POS(ptNext.x, (VisibleRect::left().x+ballSize.width / 2.0), (VisibleRect::right().x - ballSize.width / 2.0)); FIX_POS(ptNext.y, (VisibleRect::bottom().y+ballSize.height / 2.0), (VisibleRect::top().y - ballSize.height / 2.0));
二、设置CCLayer层的onEnter里面设置重力感应。设置了重力感应。如果是PC,没有重力感应,就是用方向键控制。
void xxxLayer::onEnter(){ CCLayer::onEnter(); setAccelerometerEnabled(true);}
当重力感应方向变化时候,会调用
void AccelerometerTest::didAccelerate(CCAcceleration* pAccelerationValue){ CCPoint ptNow = m_pBall->getPosition(); CCPoint ptTemp = pDir->convertToUI(ptNow); ptTemp.x += pAccelerationValue->x * 9.81f; ptTemp.y -= pAccelerationValue->y * 9.81f; CCPoint ptNext = pDir->convertToGL(ptTemp);}
pAccelerationValue包含x,y,z三个方向的重力值。
三、removeChild删除子控件不奔溃的处理办法。
void CrashTest::onEnter(){ ActionManagerTest::onEnter(); CCSprite* child = CCSprite::create(s_pPathGrossini); child->setPosition( VisibleRect::center() ); addChild(child, 1); //Sum of all action's duration is 1.5 second. child->runAction(CCRotateBy::create(1.5f, 90)); child->runAction(CCSequence::create( CCDelayTime::create(1.4f), CCFadeOut::create(1.1f), NULL) ); //After 1.5 second, self will be removed. runAction( CCSequence::create( CCDelayTime::create(1.4f), CCCallFunc::create(this, callfunc_selector(CrashTest::removeThis)), NULL) );}void CrashTest::removeThis(){ m_pParent->removeChild(this, true);}四、addAction最后一个参数设为ture暂停动作,然后resumeTarget恢复动作,3秒后执行移动动作。
void PauseTest::onEnter(){ // // This test MUST be done in 'onEnter' and not on 'init' // otherwise the paused action will be resumed at 'onEnter' time // ActionManagerTest::onEnter(); CCLabelTTF* l = CCLabelTTF::create("After 5 seconds grossini should move", "Thonburi", 16); addChild(l); l->setPosition( ccp(VisibleRect::center().x, VisibleRect::top().y-75) ); // // Also, this test MUST be done, after [super onEnter] // CCSprite* grossini = CCSprite::create(s_pPathGrossini); addChild(grossini, 0, kTagGrossini); grossini->setPosition(VisibleRect::center() ); CCAction* action = CCMoveBy::create(1, ccp(150,0)); CCDirector* pDirector = CCDirector::sharedDirector(); pDirector->getActionManager()->addAction(action, grossini, true); schedule( schedule_selector(PauseTest::unpause), 3); }void PauseTest::unpause(float dt){ unschedule( schedule_selector(PauseTest::unpause) ); CCNode* node = getChildByTag( kTagGrossini ); CCDirector* pDirector = CCDirector::sharedDirector(); pDirector->getActionManager()->resumeTarget(node);}
五、停止动作stopActionByTag。特别注意的是动作和CCSprite加了标志,比如setTag(kTagSequence)方便以后查找。下面代码是先用getChildByTab(kTagGrossini)获取节点。然后stopActionByTay(kTagSequence);
void RemoveTest::onEnter(){ ActionManagerTest::onEnter(); CCMoveBy* pMove = CCMoveBy::create(2, ccp(200, 0)); CCCallFunc* pCallback = CCCallFunc::create(this, callfunc_selector(RemoveTest::stopAction)); CCActionInterval* pSequence = CCSequence::create(pMove, pCallback, NULL); pSequence->setTag(kTagSequence); CCSprite* pChild = CCSprite::create(s_pPathGrossini); pChild->setPosition( VisibleRect::center() ); addChild(pChild, 1, kTagGrossini); pChild->runAction(pSequence);}void RemoveTest::stopAction(){ CCNode* pSprite = getChildByTag(kTagGrossini); pSprite->stopActionByTag(kTagSequence);}六、先暂停动作,然后pauseTager,然后runAction一个动作,这样resumeTager的话,就可以同时执行2个动作了。
void ResumeTest::onEnter(){ ActionManagerTest::onEnter(); CCSprite* pGrossini = CCSprite::create(s_pPathGrossini); addChild(pGrossini, 0, kTagGrossini); pGrossini->setPosition(VisibleRect::center()); pGrossini->runAction(CCScaleBy::create(2, 2)); CCDirector* pDirector = CCDirector::sharedDirector(); pDirector->getActionManager()->pauseTarget(pGrossini); pGrossini->runAction(CCRotateBy::create(2, 360)); this->schedule(schedule_selector(ResumeTest::resumeGrossini), 3.0f);}void ResumeTest::resumeGrossini(float time){ this->unschedule(schedule_selector(ResumeTest::resumeGrossini)); CCNode* pGrossini = getChildByTag(kTagGrossini); CCDirector* pDirector = CCDirector::sharedDirector(); pDirector->getActionManager()->resumeTarget(pGrossini);}
参考资料:cocos2d-x基础知识(四) 简单菜单及坐标系
- TestCpp里面常用代码摘抄<重力感应和动作管理类>
- Cocos2d-x之testCpp---Accelerometer(重力感应)分析
- Android 重力感应 测试代码
- Android重力感应代码例子
- 关于cocos2dx里面的重力感应事件
- 【转】重力感应和罗盘
- 加速度、重力感应和陀螺仪、、
- [Gsensor] Android 重力感应实例代码
- 笔记:unity3d重力感应正确代码
- iOS代码分享:分享、加密、解析、二维码、Http多线程、重力感应、常用界面重载等
- 重力感应
- 重力感应
- 重力感应
- 重力感应
- 重力感应
- android 重力感应和屏幕旋转关系
- Android 重力感应和屏幕旋转关系
- **手机重力感应 和屏幕切换
- my first Ah-counter experience
- const char*, char const*, char*const的区别
- 实体类隐式转换手记
- defer属性导致引用JQuery的页面报“浏览器无法打开网站xxx,操作被中止”错误的解决方法
- linux消息队列的内核限制
- TestCpp里面常用代码摘抄<重力感应和动作管理类>
- Oracle触发器5-Instead of触发器
- 快速可靠协议 - KCP
- Oracle UNDO Recreate & Recovery
- 关于破解的一些问题
- Android 中input event的分析
- 第六次课堂作业
- 修改mysql字符编码出现Job failed to start解决办法
- MFC中CString转换成char数组的问题