local kTagTextLayer = 1 local kTagSprite1 = 1 local kTagSprite2 = 2 local kTagBackground = 1 local kTagLabel = 2 local originCreateLayer = createTestLayer local function createTestLayer(title, subtitle) local ret = originCreateLayer(title, subtitle) local bg = CCSprite:create("Images/background3.png") ret:addChild(bg, 0, kTagBackground) bg:setPosition( VisibleRect:center() ) local grossini = CCSprite:create("Images/grossinis_sister2.png") bg:addChild(grossini, 1, kTagSprite1) grossini:setPosition( CCPoint(VisibleRect:left().x+VisibleRect:getVisibleRect().size.width/3.0, VisibleRect:bottom().y+ 200) ) local sc = CCScaleBy:create(2, 5) local sc_back = sc:reverse() local arr = CCArray:create() arr:addObject(sc) arr:addObject(sc_back) grossini:runAction( CCRepeatForever:create(CCSequence:create(arr))) local tamara = CCSprite:create("Images/grossinis_sister1.png") bg:addChild(tamara, 1, kTagSprite2) tamara:setPosition( CCPoint(VisibleRect:left().x+2*VisibleRect:getVisibleRect().size.width/3.0,VisibleRect:bottom().y+200) ) local sc2 = CCScaleBy:create(2, 5) local sc2_back = sc2:reverse() arr = CCArray:create() arr:addObject(sc2) arr:addObject(sc2_back) tamara:runAction( CCRepeatForever:create(CCSequence:create(arr))) return ret end -------------------------------------------------------------------- -- -- Effect1 -- -------------------------------------------------------------------- local function Effect1() local ret = createTestLayer("Lens + Waves3d and OrbitCamera") local target = ret:getChildByTag(kTagBackground) -- To reuse a grid the grid size and the grid type must be the same. -- in this case: -- Lens3D is Grid3D and it's size is (15,10) -- Waves3D is Grid3D and it's size is (15,10) local size = CCDirector:getInstance():getWinSize() local lens = CCLens3D:create(0.0, CCSize(15,10), CCPoint(size.width/2,size.height/2), 240) local waves = CCWaves3D:create(10, CCSize(15,10), 18, 15) local reuse = CCReuseGrid:create(1) local delay = CCDelayTime:create(8) local orbit = CCOrbitCamera:create(5, 1, 2, 0, 180, 0, -90) local orbit_back = orbit:reverse() local arr = CCArray:create() arr:addObject(orbit) arr:addObject(orbit_back) target:runAction( CCRepeatForever:create( CCSequence:create(arr))) arr = CCArray:create() arr:addObject(lens) arr:addObject(delay) arr:addObject(reuse) arr:addObject(waves) target:runAction( CCSequence:create(arr)) return ret end -------------------------------------------------------------------- -- -- Effect2 -- -------------------------------------------------------------------- local function Effect2() local ret = createTestLayer("ShakyTiles + ShuffleTiles + TurnOffTiles") local target = ret:getChildByTag(kTagBackground) -- To reuse a grid the grid size and the grid type must be the same. -- in this case: -- ShakyTiles is TiledGrid3D and it's size is (15,10) -- Shuffletiles is TiledGrid3D and it's size is (15,10) -- TurnOfftiles is TiledGrid3D and it's size is (15,10) local shaky = CCShakyTiles3D:create(5, CCSize(15,10), 4, false) local shuffle = CCShuffleTiles:create(0, CCSize(15,10), 3) local turnoff = CCTurnOffTiles:create(0, CCSize(15,10), 3) local turnon = turnoff:reverse() -- reuse 2 times: -- 1 for shuffle -- 2 for turn off -- turnon tiles will use a new grid local reuse = CCReuseGrid:create(2) local delay = CCDelayTime:create(1) local arr = CCArray:create() arr:addObject(shaky) arr:addObject(delay) arr:addObject(reuse) arr:addObject(shuffle) arr:addObject(tolua.cast(delay:clone(), "CCAction")) arr:addObject(turnoff) arr:addObject(turnon) target:runAction(CCSequence:create(arr)) return ret end -------------------------------------------------------------------- -- -- Effect3 -- -------------------------------------------------------------------- local function Effect3() local ret = createTestLayer("Effects on 2 sprites") local bg = ret:getChildByTag(kTagBackground) local target1 = bg:getChildByTag(kTagSprite1) local target2 = bg:getChildByTag(kTagSprite2) local waves = CCWaves:create(5, CCSize(15,10), 5, 20, true, false) local shaky = CCShaky3D:create(5, CCSize(15,10), 4, false) target1:runAction( CCRepeatForever:create( waves ) ) target2:runAction( CCRepeatForever:create( shaky ) ) -- moving background. Testing issue #244 local move = CCMoveBy:create(3, CCPoint(200,0) ) local arr = CCArray:create() arr:addObject(move) arr:addObject(move:reverse()) bg:runAction(CCRepeatForever:create( CCSequence:create(arr))) return ret end -------------------------------------------------------------------- -- -- Effect4 -- -------------------------------------------------------------------- -- class Lens3DTarget : public CCNode -- public: -- virtual void setPosition(const CCPoint& var) -- m_pLens3D:setPosition(var) -- end -- virtual const CCPoint& getPosition() -- return m_pLens3D:getPosition() -- end -- static Lens3DTarget* create(CCLens3D* pAction) -- Lens3DTarget* pRet = new Lens3DTarget() -- pRet:m_pLens3D = pAction -- pRet:autorelease() -- return pRet -- end -- private: -- Lens3DTarget() -- : m_pLens3D(NULL) -- {} -- CCLens3D* m_pLens3D -- end local function Effect4() local ret = createTestLayer("Jumpy Lens3D") local lens = CCLens3D:create(10, CCSize(32,24), CCPoint(100,180), 150) local move = CCJumpBy:create(5, CCPoint(380,0), 100, 4) local move_back = move:reverse() local arr = CCArray:create() arr:addObject(move) arr:addObject(move_back) local seq = CCSequence:create( arr) -- /* In cocos2d-iphone, the type of action's target is 'id', so it supports using the instance of 'CCLens3D' as its target. -- While in cocos2d-x, the target of action only supports CCNode or its subclass, -- so we make an encapsulation for CCLens3D to achieve that. -- */ local director = CCDirector:getInstance() -- local pTarget = Lens3DTarget:create(lens) -- -- Please make sure the target been added to its parent. -- ret:addChild(pTarget) -- director:getActionManager():addAction(seq, pTarget, false) ret:runAction( lens ) return ret end -------------------------------------------------------------------- -- -- Effect5 -- -------------------------------------------------------------------- local function Effect5() local ret = createTestLayer("Test Stop-Copy-Restar") local effect = CCLiquid:create(2, CCSize(32,24), 1, 20) local arr = CCArray:create() arr:addObject(effect) arr:addObject(CCDelayTime:create(2)) arr:addObject(CCStopGrid:create()) local stopEffect = CCSequence:create(arr) local bg = ret:getChildByTag(kTagBackground) bg:runAction(stopEffect) local function onNodeEvent(event) if event == "exit" then CCDirector:getInstance():setProjection(kCCDirectorProjection3D) end end ret:registerScriptHandler(onNodeEvent) return ret end -------------------------------------------------------------------- -- -- Issue631 -- -------------------------------------------------------------------- local function Issue631() local ret = createTestLayer("Testing Opacity", "Effect image should be 100% opaque. Testing issue #631") local arr = CCArray:create() arr:addObject(CCDelayTime:create(2.0)) arr:addObject(CCShaky3D:create(5.0, CCSize(5, 5), 16, false)) local effect = CCSequence:create(arr) -- cleanup local bg = ret:getChildByTag(kTagBackground) ret:removeChild(bg, true) -- background local layer = CCLayerColor:create( Color4B(255,0,0,255) ) ret:addChild(layer, -10) local sprite = CCSprite:create("Images/grossini.png") sprite:setPosition( CCPoint(50,80) ) layer:addChild(sprite, 10) -- foreground local layer2 = CCLayerColor:create(Color4B( 0, 255,0,255 ) ) local fog = CCSprite:create("Images/Fog.png") local bf = BlendFunc() bf.src = GL_SRC_ALPHA bf.dst = GL_ONE_MINUS_SRC_ALPHA fog:setBlendFunc(bf) layer2:addChild(fog, 1) ret:addChild(layer2, 1) layer2:runAction( CCRepeatForever:create(effect) ) return ret end function EffectAdvancedTestMain() cclog("EffectAdvancedTestMain") Helper.index = 1 local scene = CCScene:create() Helper.createFunctionTable = { Effect3, Effect2, Effect1, Effect4, Effect5, Issue631 } scene:addChild(Effect3()) scene:addChild(CreateBackMenuItem()) return scene end