利用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)));
applicationDidFinishLaunching中加入
CCDirector *pDirector = CCDirector::sharedDirector();
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会原来尺寸
版权声明:本文为u011964791原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。