PuzzleSDK
EffectsAdvancedTest.cpp
浏览该文件的文档.
1/****************************************************************************
2 Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.
3
4 http://www.cocos2d-x.org
5
6 Permission is hereby granted, free of charge, to any person obtaining a copy
7 of this software and associated documentation files (the "Software"), to deal
8 in the Software without restriction, including without limitation the rights
9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 copies of the Software, and to permit persons to whom the Software is
11 furnished to do so, subject to the following conditions:
12
13 The above copyright notice and this permission notice shall be included in
14 all copies or substantial portions of the Software.
15
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 THE SOFTWARE.
23 ****************************************************************************/
24
25#include "EffectsAdvancedTest.h"
26
28
29enum
30{
32
35
38};
39
40EffectAdvanceTests::EffectAdvanceTests()
41{
48}
49
50//------------------------------------------------------------------
51//
52// Effect1
53//
54//------------------------------------------------------------------
56{
58
59 //auto target = getChildByTag(kTagBackground);
60
61 // To reuse a grid the grid size and the grid type must be the same.
62 // in this case:
63 // Lens3D is Grid3D and it's size is (15,10)
64 // Waves3D is Grid3D and it's size is (15,10)
65
66 auto size = Director::getInstance()->getWinSize();
67 auto lens = Lens3D::create(0.0f, Size(15,10), Vec2(size.width/2,size.height/2), 240);
68 auto waves = Waves3D::create(10, Size(15,10), 18, 15);
69
70 auto reuse = ReuseGrid::create(1);
71 auto delay = DelayTime::create(8);
72
73// auto orbit = OrbitCamera::create(5, 1, 2, 0, 180, 0, -90);
74// auto orbit_back = orbit->reverse();
75
76 //_bgNode->runAction( RepeatForever::create( Sequence::create( orbit, orbit_back, nullptr) ) );
77 _bgNode->runAction( Sequence::create(lens, delay, reuse, waves, nullptr) );
78}
79
80std::string Effect1::title() const
81{
82 return "Lens + Waves3d and OrbitCamera";
83}
84
85//------------------------------------------------------------------
86//
87// Effect2
88//
89//------------------------------------------------------------------
91{
93
94 //auto target = getChildByTag(kTagBackground);
95
96 // To reuse a grid the grid size and the grid type must be the same.
97 // in this case:
98 // ShakyTiles is TiledGrid3D and it's size is (15,10)
99 // Shuffletiles is TiledGrid3D and it's size is (15,10)
100 // TurnOfftiles is TiledGrid3D and it's size is (15,10)
101 auto shaky = ShakyTiles3D::create(5, Size(15,10), 4, false);
102 auto shuffle = ShuffleTiles::create(0, Size(15,10), 3);
103 auto turnoff = TurnOffTiles::create(0, Size(15,10), 3);
104 auto turnon = turnoff->reverse();
105
106 // reuse 2 times:
107 // 1 for shuffle
108 // 2 for turn off
109 // turnon tiles will use a new grid
110 auto reuse = ReuseGrid::create(2);
111
112 auto delay = DelayTime::create(1);
113
114// id orbit = [OrbitCamera::create:5 radius:1 deltaRadius:2 angleZ:0 deltaAngleZ:180 angleX:0 deltaAngleX:-90];
115// id orbit_back = [orbit reverse];
116//
117// [target runAction: [RepeatForever::create: [Sequence actions: orbit, orbit_back, nil]]];
118 _bgNode->runAction(Sequence::create( shaky, delay, reuse, shuffle, delay->clone(), turnoff, turnon, nullptr) );
119}
120
121std::string Effect2::title() const
122{
123 return "ShakyTiles + ShuffleTiles + TurnOffTiles";
124}
125
126
127//------------------------------------------------------------------
128//
129// Effect3
130//
131//------------------------------------------------------------------
133{
135 //auto bg = getChildByTag(kTagBackground);
136 //auto target1 = bg->getChildByTag(kTagSprite1);
137 //auto target2 = bg->getChildByTag(kTagSprite2);
138 auto waves = Waves::create(5, Size(15,10), 5, 20, true, false);
139 auto shaky = Shaky3D::create(5, Size(15,10), 4, false);
140
141 _target1->runAction( RepeatForever::create( waves ) );
142 _target2->runAction( RepeatForever::create( shaky ) );
143
144 // moving background. Testing issue #244
145 auto move = MoveBy::create(3, Vec2(200,0) );
146 _bgNode->runAction(RepeatForever::create( Sequence::create(move, move->reverse(), nullptr) ));
147}
148
149std::string Effect3::title() const
150{
151 return "Effects on 2 sprites";
152}
153
154
155//------------------------------------------------------------------
156//
157// Effect4
158//
159//------------------------------------------------------------------
160
161class Lens3DTarget : public Node
162{
163public:
164 virtual void setPosition(const Vec2& var)
165 {
166 _lens3D->setPosition(var);
167 }
168
169 virtual const Vec2& getPosition() const
170 {
171 return _lens3D->getPosition();
172 }
173
174 static Lens3DTarget* create(Lens3D* pAction)
175 {
176 Lens3DTarget* pRet = new (std::nothrow) Lens3DTarget();
177 pRet->_lens3D = pAction;
178 pRet->autorelease();
179 return pRet;
180 }
181private:
182
184 : _lens3D(nullptr)
185 {}
186
187 Lens3D* _lens3D;
188};
189
191{
193 //Node* gridNode = NodeGrid::create();
194
195 auto lens = Lens3D::create(10, Size(32,24), Vec2(100,180), 150);
196 auto move = JumpBy::create(5, Vec2(380,0), 100, 4);
197 auto move_back = move->reverse();
198 auto seq = Sequence::create( move, move_back, nullptr);
199
200 /* In cocos2d-iphone, the type of action's target is 'id', so it supports using the instance of 'Lens3D' as its target.
201 While in cocos2d-x, the target of action only supports Node or its subclass,
202 so we make an encapsulation for Lens3D to achieve that.
203 */
204
205 auto director = Director::getInstance();
206 auto pTarget = Lens3DTarget::create(lens);
207 // Please make sure the target been added to its parent.
208 this->addChild(pTarget);
209 //gridNode->addChild(pTarget);
210
211 director->getActionManager()->addAction(seq, pTarget, false);
212
213 _bgNode->runAction( lens );
214}
215
216std::string Effect4::title() const
217{
218 return "Jumpy Lens3D";
219}
220
221//------------------------------------------------------------------
222//
223// Effect5
224//
225//------------------------------------------------------------------
227{
229
230 //CCDirector::getInstance()->setProjection(DirectorProjection2D);
231
232 auto effect = Liquid::create(2, Size(32,24), 1, 20);
233
234 auto stopEffect = Sequence::create(
235 effect,
236 DelayTime::create(2),
237 StopGrid::create(),
238 // [DelayTime::create:2],
239 // [[effect copy] autorelease],
240 nullptr);
241
242 //auto bg = getChildByTag(kTagBackground);
243 _bgNode->runAction(stopEffect);
244}
245
246std::string Effect5::title() const
247{
248 return "Test Stop-Copy-Restar";
249}
250
252{
253 EffectAdvanceBaseTest::onExit();
254
255 Director::getInstance()->setProjection(Director::Projection::_3D);
256}
257
258//------------------------------------------------------------------
259//
260// Effect5
261//
262//------------------------------------------------------------------
264{
266
267 auto effect = Sequence::create( DelayTime::create(2.0f), Shaky3D::create(5.0f, Size(5, 5), 16, false), nullptr);
268
269 // cleanup
270 //auto bg = getChildByTag(kTagBackground);
271 removeChild(_bgNode, true);
272
273 // background
274 auto layer = LayerColor::create( Color4B(255,0,0,255) );
275 addChild(layer, -10);
276 auto sprite = Sprite::create("Images/grossini.png");
277 sprite->setPosition(50,80);
278 layer->addChild(sprite, 10);
279
280 // foreground
281 auto layer2BaseGrid = NodeGrid::create();
282 auto layer2 = LayerColor::create(Color4B( 0, 255,0,255 ) );
283 auto fog = Sprite::create("Images/Fog.png");
284
285 BlendFunc bf = {backend::BlendFactor::SRC_ALPHA, backend::BlendFactor::ONE_MINUS_SRC_ALPHA};
286 fog->setBlendFunc(bf);
287 layer2->addChild(fog, 1);
288 addChild(layer2BaseGrid, 1);
289 layer2BaseGrid->addChild(layer2);
290
291 layer2BaseGrid->runAction( RepeatForever::create(effect) );
292}
293
294std::string Issue631::title() const
295{
296 return "Testing Opacity";
297}
298
299std::string Issue631::subtitle() const
300{
301 return "Effect image should be 100% opaque. Testing issue #631";
302}
303
304//------------------------------------------------------------------
305//
306// EffectAdvanceBaseTest
307//
308//------------------------------------------------------------------
309
311{
313
314 _bgNode = NodeGrid::create();
315 _bgNode->setAnchorPoint(Vec2(0.5f,0.5f));
316 addChild(_bgNode);
317 //_bgNode->setPosition( VisibleRect::center() );
318 auto bg = Sprite::create("Images/background3.png");
319 bg->setPosition( VisibleRect::center() );
320 //addChild(bg, 0, kTagBackground);
321 //bg->setPosition( VisibleRect::center() );
322 _bgNode->addChild(bg);
323
324 _target1 = NodeGrid::create();
325 _target1->setAnchorPoint(Vec2(0.5f,0.5f));
326 auto grossini = Sprite::create("Images/grossinis_sister2.png");
327 _target1->addChild(grossini);
328 _bgNode->addChild(_target1);
329 _target1->setPosition(VisibleRect::left().x+VisibleRect::getVisibleRect().size.width/3.0f, VisibleRect::bottom().y+ 200);
330 auto sc = ScaleBy::create(2, 5);
331 auto sc_back = sc->reverse();
332 _target1->runAction( RepeatForever::create(Sequence::create(sc, sc_back, nullptr) ) );
333
334
335 _target2 = NodeGrid::create();
336 _target2->setAnchorPoint(Vec2(0.5f,0.5f));
337 auto tamara = Sprite::create("Images/grossinis_sister1.png");
338 _target2->addChild(tamara);
339 _bgNode->addChild(_target2);
340 _target2->setPosition(VisibleRect::left().x+2*VisibleRect::getVisibleRect().size.width/3.0f,VisibleRect::bottom().y+200);
341 auto sc2 = ScaleBy::create(2, 5);
342 auto sc2_back = sc2->reverse();
343 _target2->runAction( RepeatForever::create(Sequence::create(sc2, sc2_back, nullptr) ) );
344
345}
346
348{
349}
350
352{
353 return "No title";
354}
355
357{
358 return "";
359}
#define ADD_TEST_CASE(__className__)
Definition: BaseTest.h:211
@ kTagSprite2
@ kTagTextLayer
@ kTagSprite1
@ kTagBackground
virtual void onEnter() override
virtual std::string title() const override
virtual std::string title() const override
virtual void onEnter() override
virtual void onEnter() override
virtual std::string title() const override
virtual void onEnter() override
virtual std::string title() const override
virtual std::string title() const override
virtual void onEnter() override
virtual void onExit() override
virtual std::string subtitle() const override
virtual std::string title() const override
virtual void onEnter() override
virtual std::string title() const override
virtual std::string subtitle() const override
virtual void onEnter() override
static Lens3DTarget * create(Lens3D *pAction)
virtual void setPosition(const Vec2 &var)
virtual const Vec2 & getPosition() const
virtual void onEnter() override
Definition: BaseTest.cpp:430
static cocos2d::Rect getVisibleRect()
Definition: VisibleRect.cpp:39
static cocos2d::Vec2 center()
Definition: VisibleRect.cpp:69
static cocos2d::Vec2 bottom()
Definition: VisibleRect.cpp:63
static cocos2d::Vec2 left()
Definition: VisibleRect.cpp:45