CCActionInterval* CCBezierBy::reverse(void) { ccBezierConfig r; r.endPosition = ccpNeg(m_sConfig.endPosition); r.controlPoint_1 = ccpAdd(m_sConfig.controlPoint_2, ccpNeg(m_sConfig.endPosition)); r.controlPoint_2 = ccpAdd(m_sConfig.controlPoint_1, ccpNeg(m_sConfig.endPosition)); CCBezierBy *pAction = CCBezierBy::actionWithDuration(m_fDuration, r); return pAction; }
BWActionInterval* BWBezierBy::reverse(void) { BWBezierConfig r; r.endPosition = ccpNeg(m_sConfig.endPosition); r.controlPoint_1 = ccpAdd(m_sConfig.controlPoint_2, ccpNeg(m_sConfig.endPosition)); r.controlPoint_2 = ccpAdd(m_sConfig.controlPoint_1, ccpNeg(m_sConfig.endPosition)); BWBezierBy *pAction = BWBezierBy::create(m_fDuration, r); return pAction; }
/** * 设置位置,必须先设置场景代理 */ void MCCamera::locate() { if (sceneDelegate_) { sceneDelegate_->moveSceneToLocation(ccpNeg(viewport_.origin)); } }
/** * 聚焦到某人身上,必须先设置场景代理 * * 聚焦: * 1.假定人物位于屏幕中间 * 2.消除地图滚动的偏移 */ void MCCamera::focus(MCRole *aRole) { if (sceneDelegate_) { CCSize winSize = CCDirectorGetWindowsSize(); MCScene *scene = sceneDelegate_->getScene(); CCTMXTiledMap *map = sceneDelegate_->getScene()->getMap(); CCSize sceneSize = scene->getSceneSize(); CCPoint mapOffset = map->getPosition(); CCPoint rolePosition = ccpSub(aRole->getEntity()->getPosition(), mapOffset); CCPoint expectedViewportOrigin = ccp(rolePosition.x - winSize.width / 2, rolePosition.y - winSize.height / 2); /* 清除偏移 */ /* 基于地图 */ float viewportLeft = expectedViewportOrigin.x; float viewportRight = expectedViewportOrigin.x + viewport_.size.width; float viewportTop = expectedViewportOrigin.y + viewport_.size.height; float viewportBottom = expectedViewportOrigin.y; if (sceneSize.width < winSize.width) { sceneSize.width = winSize.width; } if (sceneSize.height < winSize.height) { sceneSize.height = winSize.height; } if (viewportLeft < 0) { expectedViewportOrigin.x -= viewportLeft; } else if (viewportRight > sceneSize.width) { expectedViewportOrigin.x -= (viewportRight - sceneSize.width); } if (viewportTop > sceneSize.height) { expectedViewportOrigin.y -= (viewportTop - sceneSize.height); } else if (viewportBottom < 0) { expectedViewportOrigin.y -= viewportBottom; } viewport_.origin = expectedViewportOrigin; sceneDelegate_->moveSceneToLocation(ccpNeg(expectedViewportOrigin)); } }
/** * 重置位置,必须先设置场景代理 */ void MCCamera::restore() { viewport_.origin = ccpNeg(location_); }