float LotteryRotateView::getAngleByTouchPoint(CCPoint touchPoint){ CCPoint zeroPoint = ccp(0,0); float angleA = touchPoint.getAngle(zeroPoint); angleA = (angleA/M_PI) * 180; return angleA; }
void CCCurl::startWithTarget(CCNode* pTarget) { CCActionInterval::startWithTarget(pTarget); // get start radius CCPoint v = ccpSub(pTarget->getPosition(), m_center); m_fromRadius = ccpLength(v); m_initAngle = v.getAngle(); }
//-------------------------------------------------------------------- void FKCW_Action_Curl::startWithTarget(CCNode* pTarget) { CCActionInterval::startWithTarget(pTarget); // 获取起始半径和角度 CCPoint v = ccpSub(pTarget->getPosition(), m_center); m_fromRadius = ccpLength(v); m_initAngle = v.getAngle(); }
void Arrow::construct(IArrowEventListener *pListener, const CCPoint &startPos, const CCPoint &endPos) { // Sets listener m_pListener = (pListener ? pListener : &theNullArrowEventListener); // Sets position setPosition(startPos); // Sets end position m_endPos = endPos; // Gets delta position CCPoint deltaPos = endPos - startPos; // Gets angle float fAngle = deltaPos.getAngle(); // Sets rotation setRotation(gdGetRotation(fAngle)); // Sets opacity setOpacity(255); // Sets direction m_dir = ccp(cosf(fAngle), sinf(fAngle)); // Sets speed m_fSpeed = SPEED; // Sets acceleration m_fAcceleration = ACCELERATION; // Sets remaining length m_fRemainLength = deltaPos.getLength(); // m_bActive = false; // Updates for enter setCurrentState(Enter); }
float ccpToAngle(const CCPoint& v) { return v.getAngle(); }
float ccpAngleSigned(const CCPoint& a, const CCPoint& b) { return a.getAngle(b); }
void LotteryRotateView::onTouchEnded(CCTouch* touch, CCEvent* event) { if (!this->isVisible()) { return; } if (!m_enabled) { return; } long endTouchTime = clock() / 1000; if (m_pTouches->containsObject(touch)) { if (m_pTouches->count() == 1 && m_bTouchMoved) { } m_pTouches->removeObject(touch); } if (m_pTouches->count() == 0) { m_bDragging = false; m_bTouchMoved = false; } CCPoint startPoint = m_pContainer->convertToNodeSpace(touch->getStartLocation()); // CCPoint lastPoint = m_pContainer->convertToNodeSpace(touch->getPreviousLocation()); CCPoint nowPoint = m_pContainer->convertToNodeSpace(touch->getLocation()); CCPoint startLine = ccpSub(startPoint, ccp(0, 0)); CCPoint nowLine = ccpSub(nowPoint, ccp(0, 0)); float angle = CC_RADIANS_TO_DEGREES(ccpSub(nowLine, startPoint).getAngle()); if (abs(angle) >= 60 && abs(angle) <= 120) { return; } float degreeGap = CC_RADIANS_TO_DEGREES(nowLine.getAngle(startLine)); CCLOG("%f:", degreeGap); if (fabs(degreeGap) < 15) { m_rewardsContainer->removeAllChildren(); return; } int spendTime = (int)(endTouchTime - m_lastTouchMoveTime) + 1; float speed = 100*fabs(m_tScrollAngel)/spendTime; m_speed3 = (fabs(degreeGap)) / ((endTouchTime - m_startTouchTime) / 1000.0f); CCLOG("speed:%f,speed3:%f",speed, m_speed3); if (speed < 6 || m_speed3 < 60.0f) { return; } // m_speed3 = m_speed3 * 2.0f; bool guide = CCUserDefault::sharedUserDefault()->getBoolForKey("LOTTERYGUIDE"); if (!guide) { CCUserDefault::sharedUserDefault()->setBoolForKey("LOTTERYGUIDE", true); CCUserDefault::sharedUserDefault()->flush(); CCDictionary* dict = CCDictionary::create(); dict->setObject(ccs("HIDEGUIDENODE"), "key"); CCSafeNotificationCenter::sharedNotificationCenter()->postNotification(LOTTERYROTATEVIEW, dict); } // if (!isChipEnough()) // { // return; // } SoundController::sharedSound()->playEffects(Music_Sfx_UI_roulette); playAnimation(0); }
void LotteryRotateView::onTouchMoved(CCTouch* touch, CCEvent* event) { if (!this->isVisible()) { return; } if (m_rotating) { return; } if (!m_enabled) { return; } if (m_pTouches->containsObject(touch)) { if (m_pTouches->count() == 1 && m_bDragging) { // scrolling CCPoint moveDistance; CCPoint lastPoint = touch->getPreviousLocation(); CCPoint nowPoint = touch->getLocation(); lastPoint = m_pContainer->convertToNodeSpace(lastPoint); nowPoint = m_pContainer->convertToNodeSpace(nowPoint); CCPoint lastLine = ccpSub(lastPoint, ccp(0, 0)); CCPoint nowLine = ccpSub(nowPoint, ccp(0, 0)); CCPoint startPoint = m_pContainer->convertToNodeSpace(touch->getStartLocation()); float angle = CC_RADIANS_TO_DEGREES(ccpSub(nowPoint, startPoint).getAngle()); CCLOG("angle:%f", angle); if (abs(angle) >= 60 && abs(angle) <= 120) { return; } moveDistance = ccpSub(nowPoint, m_tTouchPoint); if (!m_bTouchMoved) { moveDistance = CCPointZero; } m_tTouchPoint = nowPoint; m_bTouchMoved = true; float dis = 0.0f; dis = sqrtf(moveDistance.x*moveDistance.x + moveDistance.y*moveDistance.y); float inch = convertDistanceFromPointToInch(dis); if (!m_bTouchMoved && fabs(inch) < MOVE_INCH ) { CCLOG("Invalid movement, distance = [%f, %f], disInch = %f", moveDistance.x, moveDistance.y, inch); m_pTouches->removeObject(touch); return; } m_lastTouchMoveTime = clock() / 1000; float angleGap = nowLine.getAngle(lastLine); // CCLOG("angleGap:%f", angleGap); setRotationAngle(-angleGap); m_tScrollAngel = CC_RADIANS_TO_DEGREES(-angleGap); if (m_tScrollAngel>=-360 && m_tScrollAngel<=-180) { m_tScrollAngel = m_tScrollAngel + 360; } else if (m_tScrollAngel<=360 && m_tScrollAngel>=180) { m_tScrollAngel = 360 - m_tScrollAngel; } this->setContentOffsetForMove(); } } }
bool MyBulletInterface::attackRot( const cocos2d::CCPoint& in_rInputPosStart, const cocos2d::CCPoint& in_rInputPosEnd ) { MyBulletObj* pObj = (MyBulletObj*)getChildByTag( eTAG_CHILD_NODE_OBJ ); CCAssert( pObj, "Not BulletObj\n" ); CCAssert( pAttachChainNode_, "Not Bullet Attach Node\n" ); CCPoint lineVec = in_rInputPosEnd - in_rInputPosStart; CCPoint chainPos = pAttachChainNode_->getPosition(); CCPoint chainToBulletPosVec = pObj->getPosition() - chainPos; { // 入力ラインが鎖と弾丸とのラインと交差しているか CrollCollision2DLine::SEGMENT seg1, seg2; // 弾丸と鎖との位置と方向設定 { seg1.x = chainPos.x; seg1.y = chainPos.y; seg1.vecX = chainToBulletPosVec.x; seg1.vecY = chainToBulletPosVec.y; } // タッチラインの位置と方向設定 { seg2.x = in_rInputPosStart.x; seg2.y = in_rInputPosStart.y; seg2.vecX = lineVec.x; seg2.vecY = lineVec.y; } CCPoint crossPos = CCPointZero; if( CrollCollision2DLine::Check( seg1, seg2, &crossPos.x, &crossPos.y ) ) { // 回転攻撃開始! // 鎖と弾丸との角度取得 atkRotAngle_ = chainToBulletPosVec.getAngle(); // 鎖と弾丸とのベクトルを軸にタッチ方向が左右どちらかを外積で取得 { // 入力ラインの長さで回転速度を変更(値は補正している) atkRotSpeed_ = lineVec.getLengthSq() * 0.01f; // ライン右 if( 0 <= ( in_rInputPosEnd - chainPos ).cross( chainToBulletPosVec ) ) { atkRotSpeed_ = -atkRotSpeed_; } // ライン左 else { } } atkRotRadius_ = chainToBulletPosVec.getLength(); // 半径速度値 atkRotAddRadius_ = 1; stateMachine_.setState( eSTATE_ATK_ROT ); // 弾と中心位置との長さで半径計算を変える if ( chainLength_ <= atkRotRadius_ ) { // 回転しながら中心位置に移動 stateMachine_.setChildState( 0 , 1 ); } else { // 回転しながら限界の長さまで半径移動して中心位置に移動する。 stateMachine_.setChildState( 0 , 0 ); } } } return false; }