cocos2d-x 小技巧

1.字符串 与 数据结构互转

CCPoint:  CCPointFromString(); {x, y}
CCSize:   CCSizeFromString(); {w, h}
CCRect:  CCSizeFromString(); {x, y, w, h}

 2.plist文件使用,配置文件使用

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>level1</key>
    <dict>
        <key>bg_far_scene</key>
        <dict>
            <key>path</key>
            <string>images/far_scene.png</string>
            <key>pos</key>
            <string>{358, 309}</string>
        </dict>
        <key>bg_near_scene</key>
        <dict>
            <key>path</key>
            <string>images/near_scene.png</string>
            <key>pos</key>
            <string>{360, 100}</string>
        </dict>
    </dict>
</dict>
</plist>
CCDictionary *data = CCDictionarycreateWithContentsOfFile("parm.plist");
data->objectForKey("gravity")

 3.触摸拖动变化

ccTouchesMoved
CCPoint diff = touch->getDelta();

 4.tile map

CCTMXTiledMap *map = CCTMXTiledMap::create("TileMaps/iso-test-vertexz.tmx");
    addChild(map, 0, kTagTileMap);

/* 直接根据位置获取地图上的精灵 */
CCTMXLayer* layer = map->layerNamed("Trees");
    m_tamara = layer->tileAt( ccp(29,29) );//获取的是CCSprite对象
    m_tamara->retain();

/* 设置某个点的GID值,GID数字标识图块对应的图片样子 */
layer->setTileGID(1, ccp( x, y ) );
//遮挡排序
// tile height is 64x32 //斜45度
// map size: 30x30
CCPoint p = m_tamara->getPosition();
p = CC_POINT_POINTS_TO_PIXELS(p);
float newZ = -(p.y+32) /16;
m_tamara->setVertexZ( newZ );

// tile height is 101x81 //正交
// map size: 12x12
CCPoint p = m_tamara->getPosition();
p = CC_POINT_POINTS_TO_PIXELS(p);
m_tamara->setVertexZ( -( (p.y+81) /81) );

//缩小,2秒缩小一半
CCArray* pChildrenArray = map->getChildren();
CCSpriteBatchNode* child = NULL;
CCObject* pObject = NULL;
CCARRAY_FOREACH(pChildrenArray, pObject)
{
        child = (CCSpriteBatchNode*)pObject;

        if(!child)
            break;

        child->getTexture()->setAntiAliasTexParameters();
}
map->runAction( CCScaleBy::create(2, 0.5f) );

 5.给Scene层抹上底色

CCLayerColor* color = CCLayerColor::create( ccc4(64,64,64,255) );
addChild(color, -1);

6.动作移动地图

// move map to the center of the screen
    CCSize ms = map->getMapSize();
    CCSize ts = map->getTileSize();
    map->runAction( CCMoveTo::create(1.0f, ccp( -ms.width * ts.width/2, -ms.height * ts.height/2 )) );

7.动作

CCActionInterval* move = CCMoveBy::create(0.5f, ccp(0,160));
    CCActionInterval* rotate = CCRotateBy::create(2, 360);
    CCActionInterval* scale = CCScaleBy::create(2, 5);
    CCActionInterval* opacity = CCFadeOut::create(2);
    CCActionInterval* fadein = CCFadeIn::create(2);
    CCActionInterval* scaleback = CCScaleTo::create(1, 1);
CCActionInstant* finish = CCCallFuncN::create(this, callfuncN_selector(TMXReadWriteTest::removeSprite));
    CCSequence* seq0 = CCSequence::create(move, rotate, scale, opacity, fadein, scaleback, finish, NULL);

void TMXReadWriteTest::removeSprite(CCNode* sender)
{
    ////----CCLOG("removing tile: %x", sender);
    CCNode* p = ((CCNode*)sender)->getParent();

    if (p)
    {
        p->removeChild((CCNode*)sender, true);
    }    
    
    //////----CCLOG("atlas quantity: %d", p->textureAtlas()->totalQuads());
}

 8.对于对象节点

CCTMXTiledMap* map = (CCTMXTiledMap*) getChildByTag(kTagTileMap);
CCTMXObjectGroup* group = map->objectGroupNamed("Object Group 1");

CCArray* objects = group->getObjects();
    CCDictionary* dict = NULL;
    CCObject* pObj = NULL;
    CCARRAY_FOREACH(objects, pObj)
{
       dict = (CCDictionary*)pObj;
        
        if(!dict)
            break;
        const char* key = "x";
        int x = ((CCString*)dict->objectForKey(key))->intValue();
        key = "y";
        int y = ((CCString*)dict->objectForKey(key))->intValue();
        key = "width";
        int width = ((CCString*)dict->objectForKey(key))->intValue();
        key = "height";
        int height = ((CCString*)dict->objectForKey(key))->intValue();
        
        glLineWidth(3);
        ccDrawLine( ccp((float)x, (float)y), ccp((float)(x+width), (float)y) );
        ccDrawLine( ccp((float)(x+width), (float)y), ccp((float)(x+width), (float)(y+height)) );
        ccDrawLine( ccp((float)(x+width), (float)(y+height)), ccp((float)x, (float)(y+height)) );
        ccDrawLine( ccp((float)x, (float)(y+height)), ccp((float)x, (float)y) );
        //获取对象的名字
        key = "name";
    CCString * str = ((CCString*)dict->objectForKey(key));
        glLineWidth(1);
}

 9、弹框提示

CCMessageBox("this is content","title");

 10、vs中va功能---自动添加头文件查找

工具->选项->键盘

VAssistX.RefactorAddInclude设置快捷键即可

 11、整个游戏速度设置^^!

float multi = 1.0f;
CCDirector::sharedDirector()->getScheduler()->setTimeScale(multi);

 

12、tile map 绘制的椭圆Object,x,y 表示 坐下交位置 , 中心点 centerX = x + width/2  centerY = y + height/2

 

 

posted @ 2013-10-23 10:26  何卫  阅读(387)  评论(0编辑  收藏  举报