cocos2d-x 精灵 / 卡牌 翻转 旋转

利用CCOrbitCamera进行卡牌翻转,翻转到90度的时候进行卡牌正面或背面的纹理设置
lua例子代码:(c++版大同小异)
local function callback_front(…) -- 设置卡牌正面的纹理和细节
        local args = { ... };
        local sprite = args[1];
        local fullpath = 卡牌正面纹理图片的路径;
        local texture_cache = CCTextureCache:sharedTextureCache();
        local t_front = texture_cache:addImage(fullpath);
        sprite:setTexture(t_front);

        -- 添加其他细节sprite到卡牌正面上,例如生命,数值之类
end

local function callback_back(…) -- 设置卡牌背面的纹理
        local args = { ... };
        local sprite = args[1];
        local fullpath = 卡牌背面纹理图片的路径;
        local texture_cache = CCTextureCache:sharedTextureCache();
        local t_back = texture_cache:addImage(fullpath);
        sprite:setTexture(t_back);

        -- 删除属于卡牌正面的细节
end

local scale, rotation;
rotation = 0;
scale = G_SCALE_SHOW/2;
local sprite = create_card_cover(layer, pos, rotation, scale);

local orbit_time = 0.5;
local action = nil;
local array = CCArray:create();
local orbit1 = CCOrbitCamera:create(orbit_time, 1, 0, 0, -90, 0, 0);
local orbit2 = CCOrbitCamera:create(orbit_time, 1, 0, 90, -90, 0, 0);
local orbit3 = CCOrbitCamera:create(orbit_time, 1, 0, 0, -90, 0, 0);
local orbit4 = CCOrbitCamera:create(orbit_time, 1, 0, 90, -90, 0, 0);
array:addObject(orbit1);
array:addObject(CCCallFuncN:create(callback_front));
array:addObject(orbit2);
array:addObject(orbit3);
array:addObject(CCCallFuncN:create(callback_back));
array:addObject(orbit4);

sprite:runAction(CCRepeatForever:create(CCSequence:create(array)));


* 如果发现sprite在非屏幕中心位置的地方时,旋转时会有视觉角度差,可作如下处理

AppDelegate.cpp中
applicationDidFinishLaunching中加入
CCDirector *pDirector = CCDirector::sharedDirector();

pDirector->setProjection(kCCDirectorProjection2D);



---------------------------------

其实还有一个简单的方法,就是用CCScaleTo

将sprite x scaleto 0,然后更换之背面,然后再scale会原来尺寸

你可能感兴趣的:(cocos2d-x)