• [Cocos2d-x For WP8]点击移动精灵


        点击移动是游戏里面常用的操作,那么在Cocos2d-x里面可以通过setTouchEnabled(true)方法来设置接收屏幕的点击事件,然后添加ccTouchesEnded(CCSet* touches, CCEvent* event)方法处理点击后的操作,在方法体里面就可以获取点击的位置,然后通过动画的方式来移动精灵。

    代码示例:

    //在init方法里面初始化当前的实例
    bool HelloWorld::init()
    {
        bool bRet = false;
    
        do 
        {
            //CCLayer进行初始化,初始化失败跳出循环
            if ( !CCLayer::init() )
            {
                break;
            }
            //获取手机屏幕的大小
            CCSize size = CCDirector::sharedDirector()->getWinSize();
            CCSprite* sprite = CCSprite::create("cat.png");
            CCLayer* layer = CCLayerColor::create(ccc4(255,255,0,255));//();
            addChild(layer, -1);
            addChild(sprite, 0, 1);
            sprite->setPosition( CCPointMake(20,150) );
            //跳的动画
            sprite->runAction( CCJumpTo::create(4, CCPointMake(300,48), 100, 4) );
            //页面颜色闪动的动画
            layer->runAction( CCRepeatForever::create( 
                                                                (CCActionInterval*)( CCSequence::create(    
                                                                                    CCFadeIn::create(1),
                                                                                    CCFadeOut::create(1),
                                                                                    NULL) )
                                                                ) ); 
            //接收界面的的触摸事件
            setTouchEnabled(true);
            bRet = true;
        } while (0);
        //返回成功
        return bRet;
    }
    
    void HelloWorld::ccTouchesEnded(CCSet* touches, CCEvent* event)
    {
        CCSetIterator it = touches->begin();
        CCTouch* touch = (CCTouch*)(*it);
        //获取点击的位置
        CCPoint location = touch->getLocationInView();
        //把UIkit坐标转化为GL坐标
        CCPoint convertedLocation = CCDirector::sharedDirector()->convertToGL(location);
        //获取节点
        CCNode* s = getChildByTag(1);
        //移除所有的动画
        s->stopAllActions();
        //启动移动动画
        s->runAction( CCMoveTo::create(1, CCPointMake(convertedLocation.x, convertedLocation.y) ) );
        float o = convertedLocation.x - s->getPosition().x;
        float a = convertedLocation.y - s->getPosition().y;
        float at = (float) CC_RADIANS_TO_DEGREES( atanf( o/a) );
        
        if( a < 0 ) 
        {
            if(  o < 0 )
                at = 180 + fabs(at);
            else
                at = 180 - fabs(at);    
        }
        //转动动画
        s->runAction( CCRotateTo::create(1, at) );
    }

    运行的效果:

     

  • 相关阅读:
    python之enumerate
    PyCharm Debug 调试
    兼容性测试方法
    mongo基本命令
    mongodb启动
    安装STF
    新家
    用数组实现的最大堆(C++)
    VS2013调用GLPK求解线性规划
    转:Java读取txt文件和写入txt文件
  • 原文地址:https://www.cnblogs.com/linzheng/p/3273634.html
Copyright © 2020-2023  润新知