Cocos2d-x--发射多发子弹(2)
来源:未知 责任编辑:责任编辑 发表时间:2013-12-06 08:43 点击:次
	   
	
	  
	  
	  < from.x) && (to.y > from.y);
    bool isInQuadrant3 = (to.x < from.x) && (to.y < from.y);
    bool isInQuadrant4 = (to.x > from.x) && (to.y < from.y);
    bool isOnXR = (to.y == from.y) && (to.x > from.x);
    bool isOnXL = (to.y == from.y) && (to.x < from.x);
    bool isOnYT = (to.x == from.x) && (to.y > from.y);
    bool isOnYD = (to.x == from.x) && (to.y < from.y);
    bool isZero = (to.x == from.x) && (to.y == from.y);
    //起始点和触摸点形成的直线的斜率
    float mMidLineSlope = (from.y - to.y) / (from.x - to.x);
    //弧度值
    float mMidLineAngleR = atan(mMidLineSlope);
    //角度值
    float mMidLineAngleD = R2D(mMidLineAngleR);
    //如果在二,三象限,mMidLineAngleD会小于0
    if (isInQuadrant2 || isInQuadrant3)
    {
        //转换为正数,方便计算
        mMidLineAngleD = 180 + mMidLineAngleD;
    }
    else if (isOnYT)
    {
        mMidLineAngleD = 90;
    }
    else if (isOnXR)
    {
        mMidLineAngleD = 0;
    }
    else if (isOnXL)
    {
        mMidLineAngleD = 180;
    }
    else if (isInQuadrant4)
    {
        //在第四象限mMidLineAngleD小于0,转换为正数
        mMidLineAngleD = 360 + mMidLineAngleD;
    }
    else if (isOnYD)
    {
        mMidLineAngleD = 270;
    }
    else if(isZero)
    {
        return HelloWorld::Increment(0, 0);
    }
    //每颗子弹形成的直线的角度
    float mLineAngleD = mMidLineAngleD + (mMidValue - index) * angle + shakeAngle;
    //每颗子弹形成的直线的弧度
    float mLineAngleR = D2R(mLineAngleD);
    if (mLineAngleD > 360)
    {
        mLineAngleD = mLineAngleD - 360;
    }
    if (mLineAngleD < 0)
    {
        mLineAngleD = 360 + mLineAngleD;
    }
    //判断在直角坐标系中的位置
    isInQuadrant1 = (mLineAngleD > 0) && (mLineAngleD < 90); 
    isInQuadrant2 = (mLineAngleD > 90) && (mLineAngleD < 180);
    isInQuadrant3 = (mLineAngleD > 180) && (mLineAngleD < 270);
    isInQuadrant4 = (mLineAngleD > 270) && (mLineAngleD < 360);
    isOnXR = (mLineAngleD == 0);
    isOnXL = (mLineAngleD == 180);
    isOnYT = (mLineAngleD == 90);
    isOnYD = (mLineAngleD == 270);
    //x和y方向的增量
    float mIncrementX = 0;
    float mIncrementY = 0;
    float mIncrement = speed;
    if (isInQuadrant1)
    {
        mIncrementX = abs(mIncrement * cos(mLineAngleR));
        mIncrementY = abs(mIncrement * sin(mLineAngleR));
    }
    else if (isInQuadrant2)
    {
        mIncrementX = mIncrement * cos(mLineAngleR);
        mIncrementY = abs(mIncrement * sin(mLineAngleR));
        if(mIncrementX > 0) mIncrementX = -mIncrementX;
    }
    else if (isOnYT)
    {
        mIncrementY = speed;
    }
    else if (isOnXR)
    {
        mIncrementX = speed;
    }
    else if (isOnXL)
    {
        mIncrementX = -speed;
    }
    else if (isInQuadrant3)
    {
        mIncrementX = mIncrement * cos(mLineAngleR);
        mIncrementY = mIncrement * sin(mLineAngleR);
        if(mIncrementX > 0) mIncrementX = -mIncrementX;
        if(mIncrementY > 0) mIncrementY = -mIncrementY;
    }
    else if (isInQuadrant4)
    {
        mIncrementX = abs(mIncrement * cos(mLineAngleR));
        mIncrementY = mIncrement * sin(mLineAngleR);
        if(mIncrementY > 0) mIncrementY = -mIncrementY;
    }
    else if (isOnYD)
    {
        mIncrementY = -speed;
    }
    HelloWorld::Increment mResult = HelloWorld::Increment(mIncrementX, mIncrementY);
    return mResult;
}
/**角度转弧度*/
double HelloWorld::D2R( double angle )
{
    return angle / 180.0 * PI;
}
/**弧度转角度*/
double HelloWorld::R2D( double radian )
{
    return radian / PI * 180;
}
void HelloWorld::registerWithTouchDispatcher()
{
    CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, 0, true);
}
bool HelloWorld::ccTouchBegan( CCTouch *pTouch, CCEvent *pEvent )
{
    //触摸点
    CCPoint mLocalTouch = pTouch->getLocation();
    CCSize mScreenSize = CCDirector::sharedDirector()->getWinSize();
    //子弹开始位置
    Position mFrom = Position(mScreenSize.width / 2, 20);
    //子弹飞向的位置
    Position mTo = Position(mLocalTouch.x, mLocalTouch.y);
    //一发5个子弹
    int count = 3;
    //圆形子弹的半径
    float mRadius = 10;
    //子弹速度
    float mSpeed = 5;
    //子弹之间的夹角
    float mAngle = 50;
    //子弹的抖动角度
    float mShakeAngle = 0;
    for (int index = 0; index 
	
	
        
        
        
	
        相关新闻>>
最新推荐更多>>>
              
          - 发表评论
- 
				
- 最新评论 进入详细评论页>>

![cocos2d_x+lua[2]](/uploads/allimg/131030/110J64609-0-lp.jpg)








