PuzzleSDK
LayerTest.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 "LayerTest.h"
26#include "../testResource.h"
27#include "../cocos/ui/UIText.h"
28
30
31enum
32{
34};
35
36LayerTests::LayerTests()
37{
57}
58
59// Cascading support extensions
60
61static void setEnableRecursiveCascading(Node* node, bool enable)
62{
63 node->setCascadeColorEnabled(enable);
64 node->setCascadeOpacityEnabled(enable);
65
66 auto& children = node->getChildren();
67 for(const auto &child : children) {
68 setEnableRecursiveCascading(child, enable);
69 }
70}
71
72std::string LayerTest::title() const
73{
74 return "Layer Test";
75}
76
77// LayerTestCascadingOpacityA
79{
81
82 auto s = Director::getInstance()->getWinSize();
83 auto layer1 = Layer::create();
84
85 auto sister1 = Sprite::create("Images/grossinis_sister1.png");
86 auto sister2 = Sprite::create("Images/grossinis_sister2.png");
87 auto label = Label::createWithBMFont("fonts/bitmapFontTest.fnt", "Test");
88
89 layer1->addChild(sister1);
90 layer1->addChild(sister2);
91 layer1->addChild(label);
92 this->addChild( layer1, 0, kTagLayer);
93
94 sister1->setPosition( Vec2( s.width*1/3, s.height/2));
95 sister2->setPosition( Vec2( s.width*2/3, s.height/2));
96 label->setPosition( Vec2( s.width/2, s.height/2));
97
98 layer1->runAction(
99 RepeatForever::create(
100 Sequence::create(
101 FadeTo::create(4, 0),
102 FadeTo::create(4, 255),
103 DelayTime::create(1),
104 nullptr)));
105
106 sister1->runAction(
107 RepeatForever::create(
108 Sequence::create(
109 FadeTo::create(2, 0),
110 FadeTo::create(2, 255),
111 FadeTo::create(2, 0),
112 FadeTo::create(2, 255),
113 DelayTime::create(1),
114 nullptr)));
115
116 // Enable cascading in scene
117 setEnableRecursiveCascading(this, true);
118}
119
121{
122 return "Layer: cascading opacity";
123}
124
125
126// LayerTestCascadingOpacityB
128{
130
131 auto s = Director::getInstance()->getWinSize();
132 auto layer1 = LayerColor::create(Color4B(192, 0, 0, 255), s.width, s.height/2);
133 layer1->setCascadeColorEnabled(false);
134
135 layer1->setPosition( Vec2(0.0f, s.height/2));
136
137 auto sister1 = Sprite::create("Images/grossinis_sister1.png");
138 auto sister2 = Sprite::create("Images/grossinis_sister2.png");
139 auto label = Label::createWithBMFont("fonts/bitmapFontTest.fnt", "Test");
140
141 layer1->addChild(sister1);
142 layer1->addChild(sister2);
143 layer1->addChild(label);
144 this->addChild( layer1, 0, kTagLayer);
145
146 sister1->setPosition( Vec2( s.width*1/3, 0.0f));
147 sister2->setPosition( Vec2( s.width*2/3, 0.0f));
148 label->setPosition( Vec2( s.width/2, 0.0f));
149
150 layer1->runAction(
151 RepeatForever::create(
152 Sequence::create(
153 FadeTo::create(4, 0),
154 FadeTo::create(4, 255),
155 DelayTime::create(1),
156 nullptr)));
157
158 sister1->runAction(
159 RepeatForever::create(
160 Sequence::create(
161 FadeTo::create(2, 0),
162 FadeTo::create(2, 255),
163 FadeTo::create(2, 0),
164 FadeTo::create(2, 255),
165 DelayTime::create(1),
166 nullptr)));
167
168 // Enable cascading in scene
169 setEnableRecursiveCascading(this, true);
170}
171
173{
174 return "CCLayerColor: cascading opacity";
175}
176
177
178// LayerTestCascadingOpacityC
180{
182
183 auto s = Director::getInstance()->getWinSize();
184 auto layer1 = LayerColor::create(Color4B(192, 0, 0, 255), s.width, s.height/2);
185 layer1->setCascadeColorEnabled(false);
186 layer1->setCascadeOpacityEnabled(false);
187
188 layer1->setPosition( Vec2(0.0f, s.height/2));
189
190 auto sister1 = Sprite::create("Images/grossinis_sister1.png");
191 auto sister2 = Sprite::create("Images/grossinis_sister2.png");
192 auto label = Label::createWithBMFont("fonts/bitmapFontTest.fnt", "Test");
193
194 layer1->addChild(sister1);
195 layer1->addChild(sister2);
196 layer1->addChild(label);
197 this->addChild( layer1, 0, kTagLayer);
198
199 sister1->setPosition( Vec2( s.width*1/3, 0.0f));
200 sister2->setPosition( Vec2( s.width*2/3, 0.0f));
201 label->setPosition( Vec2( s.width/2, 0.0f));
202
203 layer1->runAction(
204 RepeatForever::create(
205 Sequence::create(
206 FadeTo::create(4, 0),
207 FadeTo::create(4, 255),
208 DelayTime::create(1),
209 nullptr)));
210
211 sister1->runAction(
212 RepeatForever::create(
213 Sequence::create(
214 FadeTo::create(2, 0),
215 FadeTo::create(2, 255),
216 FadeTo::create(2, 0),
217 FadeTo::create(2, 255),
218 DelayTime::create(1),
219 nullptr)));
220}
221
223{
224 return "CCLayerColor: non-cascading opacity";
225}
226
227
229
230// LayerTestCascadingColorA
232{
234
235 auto s = Director::getInstance()->getWinSize();
236 auto layer1 = Layer::create();
237
238 auto sister1 = Sprite::create("Images/grossinis_sister1.png");
239 auto sister2 = Sprite::create("Images/grossinis_sister2.png");
240 auto label = Label::createWithBMFont("fonts/bitmapFontTest.fnt", "Test");
241
242 layer1->addChild(sister1);
243 layer1->addChild(sister2);
244 layer1->addChild(label);
245 this->addChild( layer1, 0, kTagLayer);
246
247 sister1->setPosition( Vec2( s.width*1/3, s.height/2));
248 sister2->setPosition( Vec2( s.width*2/3, s.height/2));
249 label->setPosition( Vec2( s.width/2, s.height/2));
250
251 layer1->runAction(
252 RepeatForever::create(
253 Sequence::create(
254 TintTo::create(6, 255, 0, 255),
255 TintTo::create(6, 255, 255, 255),
256 DelayTime::create(1),
257 nullptr)));
258
259 sister1->runAction(
260 RepeatForever::create(
261 Sequence::create(
262 TintTo::create(2, 255, 255, 0),
263 TintTo::create(2, 255, 255, 255),
264 TintTo::create(2, 0, 255, 255),
265 TintTo::create(2, 255, 255, 255),
266 TintTo::create(2, 255, 0, 255),
267 TintTo::create(2, 255, 255, 255),
268 DelayTime::create(1),
269 nullptr)));
270
271 // Enable cascading in scene
272 setEnableRecursiveCascading(this, true);
273
274}
275
277{
278 return "Layer: cascading color";
279}
280
281
282// LayerTestCascadingColorB
284{
286 auto s = Director::getInstance()->getWinSize();
287 auto layer1 = LayerColor::create(Color4B(255, 255, 255, 255), s.width, s.height/2);
288
289 layer1->setPosition( Vec2(0.0f, s.height/2));
290
291 auto sister1 = Sprite::create("Images/grossinis_sister1.png");
292 auto sister2 = Sprite::create("Images/grossinis_sister2.png");
293 auto label = Label::createWithBMFont("fonts/bitmapFontTest.fnt", "Test");
294
295 layer1->addChild(sister1);
296 layer1->addChild(sister2);
297 layer1->addChild(label);
298 this->addChild( layer1, 0, kTagLayer);
299
300 sister1->setPosition( Vec2( s.width*1/3, 0.0f));
301 sister2->setPosition( Vec2( s.width*2/3, 0.0f));
302 label->setPosition( Vec2( s.width/2, 0.0f));
303
304 layer1->runAction(
305 RepeatForever::create(
306 Sequence::create(
307 TintTo::create(6, 255, 0, 255),
308 TintTo::create(6, 255, 255, 255),
309 DelayTime::create(1),
310 nullptr)));
311
312 sister1->runAction(
313 RepeatForever::create(
314 Sequence::create(
315 TintTo::create(2, 255, 255, 0),
316 TintTo::create(2, 255, 255, 255),
317 TintTo::create(2, 0, 255, 255),
318 TintTo::create(2, 255, 255, 255),
319 TintTo::create(2, 255, 0, 255),
320 TintTo::create(2, 255, 255, 255),
321 DelayTime::create(1),
322 nullptr)));
323
324 // Enable cascading in scene
325 setEnableRecursiveCascading(this, true);
326}
327
329{
330 return "CCLayerColor: cascading color";
331}
332
333
334// LayerTestCascadingColorC
336{
338 auto s = Director::getInstance()->getWinSize();
339 auto layer1 = LayerColor::create(Color4B(255, 255, 255, 255), s.width, s.height/2);
340 layer1->setCascadeColorEnabled(false);
341 layer1->setPosition( Vec2(0.0f, s.height/2));
342
343 auto sister1 = Sprite::create("Images/grossinis_sister1.png");
344 auto sister2 = Sprite::create("Images/grossinis_sister2.png");
345 auto label = Label::createWithBMFont("fonts/bitmapFontTest.fnt", "Test");
346
347 layer1->addChild(sister1);
348 layer1->addChild(sister2);
349 layer1->addChild(label);
350 this->addChild( layer1, 0, kTagLayer);
351
352 sister1->setPosition( Vec2( s.width*1/3, 0.0f));
353 sister2->setPosition( Vec2( s.width*2/3, 0.0f));
354 label->setPosition( Vec2( s.width/2, 0.0f));
355
356 layer1->runAction(
357 RepeatForever::create(
358 Sequence::create(
359 TintTo::create(6, 255, 0, 255),
360 TintTo::create(6, 255, 255, 255),
361 DelayTime::create(1),
362 nullptr)));
363
364 sister1->runAction(
365 RepeatForever::create(
366 Sequence::create(
367 TintTo::create(2, 255, 255, 0),
368 TintTo::create(2, 255, 255, 255),
369 TintTo::create(2, 0, 255, 255),
370 TintTo::create(2, 255, 255, 255),
371 TintTo::create(2, 255, 0, 255),
372 TintTo::create(2, 255, 255, 255),
373 DelayTime::create(1),
374 nullptr)));
375}
376
378{
379 return "CCLayerColor: non-cascading color";
380}
381
382//------------------------------------------------------------------
383//
384// LayerTest1
385//
386//------------------------------------------------------------------
388{
390
391 auto listener = EventListenerTouchAllAtOnce::create();
392 listener->onTouchesBegan = CC_CALLBACK_2(LayerTest1::onTouchesBegan, this);
393 listener->onTouchesMoved = CC_CALLBACK_2(LayerTest1::onTouchesMoved, this);
394 listener->onTouchesEnded = CC_CALLBACK_2(LayerTest1::onTouchesEnded, this);
395
396 _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);
397
398 auto s = Director::getInstance()->getWinSize();
399 auto layer = LayerColor::create( Color4B(0xFF, 0x00, 0x00, 0x80), 200, 200);
400
401 layer->setIgnoreAnchorPointForPosition(false);
402 layer->setPosition( Vec2(s.width/2, s.height/2) );
403 addChild(layer, 1, kTagLayer);
404}
405
406void LayerTest1::updateSize(Vec2 &touchLocation)
407{
408 auto s = Director::getInstance()->getWinSize();
409
410 auto newSize = Size( fabs(touchLocation.x - s.width/2)*2, fabs(touchLocation.y - s.height/2)*2);
411
412 auto l = (LayerColor*) getChildByTag(kTagLayer);
413
414 l->setContentSize( newSize );
415}
416
417void LayerTest1::onTouchesBegan(const std::vector<Touch*>& touches, Event *event)
418{
419 onTouchesMoved(touches, event);
420}
421
422void LayerTest1::onTouchesMoved(const std::vector<Touch*>& touches, Event *event)
423{
424 auto touchLocation = touches[0]->getLocation();
425
426 updateSize(touchLocation);
427}
428
429void LayerTest1::onTouchesEnded(const std::vector<Touch*>& touches, Event *event)
430{
431 onTouchesMoved(touches, event);
432}
433
434std::string LayerTest1::subtitle() const
435{
436 return "ColorLayer resize (tap & move)";
437}
438
439//------------------------------------------------------------------
440//
441// LayerTest2
442//
443//------------------------------------------------------------------
445{
447
448 auto s = Director::getInstance()->getWinSize();
449 auto layer1 = LayerColor::create( Color4B(255, 255, 0, 80), 100, 300);
450 layer1->setPosition(Vec2(s.width/3, s.height/2));
451 layer1->setIgnoreAnchorPointForPosition(false);
452 addChild(layer1, 1);
453
454 auto layer2 = LayerColor::create( Color4B(0, 0, 255, 255), 100, 300);
455 layer2->setPosition(Vec2((s.width/3)*2, s.height/2));
456 layer2->setIgnoreAnchorPointForPosition(false);
457 addChild(layer2, 1);
458
459 auto actionTint = TintBy::create(2, -255, -127, 0);
460 auto actionTintBack = actionTint->reverse();
461 auto seq1 = Sequence::create( actionTint, actionTintBack, nullptr);
462 layer1->runAction(seq1);
463
464 auto actionFade = FadeOut::create(2.0f);
465 auto actionFadeBack = actionFade->reverse();
466 auto seq2 = Sequence::create(actionFade, actionFadeBack, nullptr);
467 layer2->runAction(seq2);
468}
469
470std::string LayerTest2::subtitle() const
471{
472 return "ColorLayer: fade and tint";
473}
474
475//------------------------------------------------------------------
476//
477// LayerTestBlend
478//
479//------------------------------------------------------------------
480
482{
483 auto s = Director::getInstance()->getWinSize();
484 auto layer1 = LayerColor::create( Color4B(255, 255, 255, 80) );
485
486 auto sister1 = Sprite::create(s_pathSister1);
487 auto sister2 = Sprite::create(s_pathSister2);
488
489 addChild(sister1);
490 addChild(sister2);
491 addChild(layer1, 100, kTagLayer);
492
493 sister1->setPosition( Vec2( s.width*1/3, s.height/2) );
494 sister2->setPosition( Vec2( s.width*2/3, s.height/2) );
495
496 schedule( CC_SCHEDULE_SELECTOR(LayerTestBlend::newBlend), 1.0f);
497}
498
500{
501 auto layer = (LayerColor*)getChildByTag(kTagLayer);
502
503 backend::BlendFactor src;
504 backend::BlendFactor dst;
505
506 if( layer->getBlendFunc().dst == backend::BlendFactor::ZERO )
507 {
508 src = backend::BlendFactor::SRC_ALPHA;
509 dst = backend::BlendFactor::ONE_MINUS_SRC_ALPHA;
510 }
511 else
512 {
513 src = backend::BlendFactor::ONE_MINUS_DST_COLOR;
514 dst = backend::BlendFactor::ZERO;
515 }
516
517 BlendFunc bf = {src, dst};
518 layer->setBlendFunc( bf );
519}
520
521
522std::string LayerTestBlend::subtitle() const
523{
524 return "ColorLayer: blend";
525}
526
527//------------------------------------------------------------------
528//
529// LayerGradientTest
530//
531//------------------------------------------------------------------
533{
534 auto layer1 = LayerGradient::create(Color4B(255,0,0,255), Color4B(0,255,0,255), Vec2(0.9f, 0.9f));
535 addChild(layer1, 0, kTagLayer);
536
537 auto listener = EventListenerTouchAllAtOnce::create();
538 listener->onTouchesMoved = CC_CALLBACK_2(LayerGradientTest::onTouchesMoved, this);
539 _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);
540
541 auto label1 = Label::createWithTTF("Compressed Interpolation: Enabled", "fonts/Marker Felt.ttf", 26);
542 auto label2 = Label::createWithTTF("Compressed Interpolation: Disabled", "fonts/Marker Felt.ttf", 26);
543 auto item1 = MenuItemLabel::create(label1);
544 auto item2 = MenuItemLabel::create(label2);
545 auto item = MenuItemToggle::createWithCallback( CC_CALLBACK_1(LayerGradientTest::toggleItem, this), item1, item2, nullptr);
546
547 auto menu = Menu::create(item, nullptr);
548 addChild(menu);
549 auto s = Director::getInstance()->getWinSize();
550 menu->setPosition(Vec2(s.width / 2, 100.0f));
551}
552
554{
555 auto gradient = static_cast<LayerGradient*>( getChildByTag(kTagLayer) );
556 gradient->setCompressedInterpolation(! gradient->isCompressedInterpolation());
557}
558
559void LayerGradientTest::onTouchesMoved(const std::vector<Touch*>& touches, Event *event)
560{
561 auto s = Director::getInstance()->getWinSize();
562
563 auto touch = touches[0];
564 auto start = touch->getLocation();
565
566 auto diff = Vec2(s.width/2,s.height/2) - start;
567 diff = diff.getNormalized();
568
569 auto gradient = static_cast<LayerGradient*>( getChildByTag(1) );
570 gradient->setVector(diff);
571}
572
573std::string LayerGradientTest::title() const
574{
575 return "LayerGradientTest";
576}
577
579{
580 return "Touch the screen and move your finger";
581}
582
583//------------------------------------------------------------------
584//
585// LayerGradientTest2
586//
587//------------------------------------------------------------------
589{
590 auto layer = LayerGradient::create(Color4B(255,0,0,255), Color4B(255,255,0,255));
591 addChild(layer);
592}
593
594std::string LayerGradientTest2::title() const
595{
596 return "LayerGradientTest 2";
597}
598
600{
601 return "You should see a gradient";
602}
603
604// LayerIgnoreAnchorPointPos
605
606#define kLayerIgnoreAnchorPoint 1000
607
609{
611
612 auto s = Director::getInstance()->getWinSize();
613
614 auto l = LayerColor::create(Color4B(255, 0, 0, 255), 150, 150);
615
616 l->setAnchorPoint(Vec2(0.5f, 0.5f));
617 l->setPosition(Vec2( s.width/2, s.height/2));
618
619 auto move = MoveBy::create(2, Vec2(100,2));
620 auto back = (MoveBy *)move->reverse();
621 auto seq = Sequence::create(move, back, nullptr);
622 l->runAction(RepeatForever::create(seq));
623 this->addChild(l, 0, kLayerIgnoreAnchorPoint);
624
625 auto child = Sprite::create("Images/grossini.png");
626 l->addChild(child);
627 auto lsize = l->getContentSize();
628 child->setPosition(Vec2(lsize.width/2, lsize.height/2));
629
630 auto item = MenuItemFont::create("Toggle ignore anchor point", CC_CALLBACK_1(LayerIgnoreAnchorPointPos::onToggle, this));
631
632 auto menu = Menu::create(item, nullptr);
633 this->addChild(menu);
634
635 menu->setPosition(Vec2(s.width/2, s.height/2));
636}
637
639{
640 auto layer = this->getChildByTag(kLayerIgnoreAnchorPoint);
641 bool ignore = layer->isIgnoreAnchorPointForPosition();
642 layer->setIgnoreAnchorPointForPosition(! ignore);
643}
644
646{
647 return "IgnoreAnchorPoint - Position";
648}
649
651{
652 return "Ignoring Anchor Vec2 for position";
653}
654
655// LayerIgnoreAnchorPointRot
656
658{
660 auto s = Director::getInstance()->getWinSize();
661
662 auto l = LayerColor::create(Color4B(255, 0, 0, 255), 200, 200);
663
664 l->setAnchorPoint(Vec2(0.5f, 0.5f));
665 l->setPosition(Vec2( s.width/2, s.height/2));
666
667 this->addChild(l, 0, kLayerIgnoreAnchorPoint);
668
669 auto rot = RotateBy::create(2, 360);
670 l->runAction(RepeatForever::create(rot));
671
672
673 auto child = Sprite::create("Images/grossini.png");
674 l->addChild(child);
675 auto lsize = l->getContentSize();
676 child->setPosition(Vec2(lsize.width/2, lsize.height/2));
677
678 auto item = MenuItemFont::create("Toggle ignore anchor point", CC_CALLBACK_1(LayerIgnoreAnchorPointRot::onToggle, this));
679
680 auto menu = Menu::create(item, nullptr);
681 this->addChild(menu);
682
683 menu->setPosition(Vec2(s.width/2, s.height/2));
684}
685
687{
688 auto layer = this->getChildByTag(kLayerIgnoreAnchorPoint);
689 bool ignore = layer->isIgnoreAnchorPointForPosition();
690 layer->setIgnoreAnchorPointForPosition(! ignore);
691}
692
694{
695 return "IgnoreAnchorPoint - Rotation";
696}
697
699{
700 return "Ignoring Anchor Vec2 for rotations";
701}
702
703// LayerIgnoreAnchorPointScale
705{
707
708 auto s = Director::getInstance()->getWinSize();
709
710 auto l = LayerColor::create(Color4B(255, 0, 0, 255), 200, 200);
711
712 l->setAnchorPoint(Vec2(0.5f, 1.0f));
713 l->setPosition(Vec2( s.width/2, s.height/2));
714
715
716 auto scale = ScaleBy::create(2, 2);
717 auto back = (ScaleBy*)scale->reverse();
718 auto seq = Sequence::create(scale, back, nullptr);
719
720 l->runAction(RepeatForever::create(seq));
721
722 this->addChild(l, 0, kLayerIgnoreAnchorPoint);
723
724 auto child = Sprite::create("Images/grossini.png");
725 l->addChild(child);
726 auto lsize = l->getContentSize();
727 child->setPosition(Vec2(lsize.width/2, lsize.height/2));
728
729 auto item = MenuItemFont::create("Toggle ignore anchor point", CC_CALLBACK_1(LayerIgnoreAnchorPointScale::onToggle, this));
730
731 auto menu = Menu::create(item, nullptr);
732 this->addChild(menu);
733
734 menu->setPosition(Vec2(s.width/2, s.height/2));
735}
736
738{
739 auto layer = this->getChildByTag(kLayerIgnoreAnchorPoint);
740 bool ignore = layer->isIgnoreAnchorPointForPosition();
741 layer->setIgnoreAnchorPointForPosition(! ignore);
742}
743
745{
746 return "IgnoreAnchorPoint - Scale";
747}
748
750{
751 return "Ignoring Anchor Vec2 for scale";
752}
753
755{
756 auto layer1 = LayerGradient::create(Color4B(255, 0, 0, 255), Color4B(255, 0, 255, 255));
757 layer1->setContentSize(Size(80.0f, 80.0f));
758 layer1->setPosition(Vec2(50.0f,50.0f));
759 addChild(layer1);
760
761 auto layer2 = LayerGradient::create(Color4B(0, 0, 0, 127), Color4B(255, 255, 255, 127));
762 layer2->setContentSize(Size(80.0f, 80.0f));
763 layer2->setPosition(Vec2(100.0f,90.0f));
764 addChild(layer2);
765
766 auto layer3 = LayerGradient::create();
767 layer3->setContentSize(Size(80.0f, 80.0f));
768 layer3->setPosition(Vec2(150.0f,140.0f));
769 layer3->setStartColor(Color3B(255, 0, 0));
770 layer3->setEndColor(Color3B(255, 0, 255));
771 layer3->setStartOpacity(255);
772 layer3->setEndOpacity(255);
773 layer3->setBlendFunc( BlendFunc::ALPHA_NON_PREMULTIPLIED );
774 addChild(layer3);
775}
776
778{
779 return "Extended Blend & Opacity";
780}
781
783{
784 return "You should see 3 layers";
785}
786
787// LayerBug3162A
789{
791
792 Size size = VisibleRect::getVisibleRect().size;
793 size.width = size.width / 2;
794 size.height = size.height / 3;
795 Color4B color[3] = {Color4B(255, 0, 0, 255), Color4B(0, 255, 0, 255), Color4B(0, 0, 255, 255)};
796
797 for (int i = 0; i < 3; ++i)
798 {
799 _layer[i] = LayerColor::create(color[i]);
800 _layer[i]->setContentSize(size);
801 _layer[i]->setPosition(Vec2(size.width/2, size.height/2) - Vec2(20.0f, 20.0f));
802 _layer[i]->setOpacity(150);
803 _layer[i]->setCascadeOpacityEnabled(true);
804 if (i > 0)
805 {
806 _layer[i-1]->addChild(_layer[i]);
807 }
808 }
809
810 this->addChild(_layer[0]);
811
812 schedule(CC_SCHEDULE_SELECTOR(LayerBug3162A::step), 0.5, CC_REPEAT_FOREVER, 0);
813}
814
816{
817 _layer[0]->setCascadeOpacityEnabled(!_layer[0]->isCascadeOpacityEnabled());
818}
819
820std::string LayerBug3162A::title() const
821{
822 return "Bug 3162 red layer cascade opacity enable/disable";
823}
824
825std::string LayerBug3162A::subtitle() const
826{
827 return "g and b layer opacity is effected/diseffected with r layer";
828}
829
830// LayerBug3162B
832{
834
835 Size size = VisibleRect::getVisibleRect().size;
836 size.width = size.width / 2;
837 size.height = size.height / 3;
838 Color4B color[3] = {Color4B(200, 0, 0, 255), Color4B(150, 0, 0, 255), Color4B(100, 0, 0, 255)};
839
840 for (int i = 0; i < 3; ++i)
841 {
842 _layer[i] = LayerColor::create(color[i]);
843 _layer[i]->setContentSize(size);
844 _layer[i]->setPosition(Vec2(size.width/2, size.height/2) - Vec2(20.0f, 20.0f));
845 //_layer[i]->setOpacity(150);
846 if (i > 0)
847 {
848 _layer[i-1]->addChild(_layer[i]);
849 }
850 }
851
852 this->addChild(_layer[0]);
853
854 _layer[0]->setCascadeColorEnabled(true);
855 _layer[1]->setCascadeColorEnabled(true);
856 _layer[2]->setCascadeColorEnabled(true);
857
858 schedule(CC_SCHEDULE_SELECTOR(LayerBug3162B::step), 0.5, CC_REPEAT_FOREVER, 0);
859}
860
862{
863 _layer[0]->setCascadeColorEnabled(!_layer[0]->isCascadeColorEnabled());
864}
865
866std::string LayerBug3162B::title() const
867{
868 return "Bug 3162 bottom layer cascade color enable/disable";
869}
870
871std::string LayerBug3162B::subtitle() const
872{
873 return "u and m layer color is effected/diseffected with b layer";
874}
875
877{
878 return "Layer Color Occlude Bug Test";
879}
880
882{
883 return "Layer Color Should not occlude titles and any sprites";
884}
885
887{
889 Director::getInstance()->getRenderer()->setDepthTest(true);
890 _layer = LayerColor::create(Color4B(0, 80, 95, 255));
891 addChild(_layer);
892}
893
895{
896 LayerTest::onExit();
897 Director::getInstance()->getRenderer()->setDepthTest(false);
898}
899
900// LayerRadialGradient
901
903{
904 return "LayerRadialGradient test";
905}
906
908{
910
912
913 auto director = Director::getInstance();
914 director->setClearColor(Color4F(0, 0, 0, 0));
915 auto origin = director->getVisibleOrigin();
916 auto size = director->getVisibleSize();
917 Vec2 center(origin.x + size.width/2 + 50, origin.y + size.height/2);
918 float radius = (size.height - 50) / 2;
919 _layer = LayerRadialGradient::create(Color4B(145, 106, 209, 140), Color4B(0, 0, 0, 0), radius, center, 1.0f);
920 addChild(_layer);
921
922 auto scaleSlider = LayerRadialGradientTest::createSlider();
923 scaleSlider->setPosition(Vec2(50.0f, 130.0f));
924 addChild(scaleSlider);
925
926 auto listview = createListView();
927 listview->setPosition(Vec2(100.0f, 150.0f));
928 addChild(listview);
929}
930
932{
933 auto slider = ui::Slider::create();
934 slider->setTouchEnabled(true);
935 slider->loadBarTexture("cocosui/sliderTrack.png");
936 slider->loadSlidBallTextures("cocosui/sliderThumb.png", "cocosui/sliderThumb.png", "");
937 slider->loadProgressBarTexture("cocosui/sliderProgress.png");
938 slider->addEventListener(CC_CALLBACK_2(LayerRadialGradientTest::sliderCallback, this));
939 slider->setRotation(90);
940 slider->setTag(101);
941 slider->setPercent(50);
942
943 return slider;
944}
945
946void LayerRadialGradientTest::listviewCallback(cocos2d::Ref* sender, cocos2d::ui::ListView::EventType type)
947{
948 // clear all text to white
949 auto listview = static_cast<cocos2d::ui::ListView*>(sender);
950 for (auto &item : listview->getItems())
951 static_cast<cocos2d::ui::Text*>(item)->setColor(cocos2d::Color3B::WHITE);
952
953 _currentSeletedItemIndex = (int)listview->getCurSelectedIndex();
954 listview->getItem(_currentSeletedItemIndex)->setColor(cocos2d::Color3B::RED);
955
956 int percent = 100;
957 auto slider = static_cast<cocos2d::ui::Slider*>(getChildByTag(101));
959 {
960 case 0:
961 // scale
962 slider->setPercent(_layer->getScaleX() / 2 * percent);
963 break;
964 case 1:
965 // skewx
966 slider->setPercent(_layer->getSkewX() / 90 * percent);
967 break;
968 case 2:
969 // skewy
970 slider->setPercent(_layer->getSkewY() / 90 * percent);
971 break;
972 case 3:
973 // expand
974 slider->setPercent(_layer->getExpand() * percent);
975 break;
976 case 4:
977 // radius
978 slider->setPercent(_layer->getRadius() / 300 * percent);
979 break;
980
981 default:
982 break;
983 }
984}
985
986void LayerRadialGradientTest::sliderCallback(cocos2d::Ref* sender, cocos2d::ui::Slider::EventType type)
987{
988 auto slider = static_cast<cocos2d::ui::Slider*>(sender);
989 float percent = slider->getPercent() / 100.f;
991 {
992 case 0:
993 // scale
994 _layer->setScale(percent * 2);
995 CCLOG("scale is %f", percent * 2);
996 break;
997 case 1:
998 // skewx
999 _layer->setSkewX(90 * percent);
1000 CCLOG("SkewX is %f", 90 * percent);
1001 break;
1002 case 2:
1003 // skewy
1004 _layer->setSkewY(90 * percent);
1005 CCLOG("SkewY is %f", 90 * percent);
1006 break;
1007 case 3:
1008 // expand
1009 _layer->setExpand(percent);
1010 CCLOG("expand is %f", percent);
1011 break;
1012 case 4:
1013 // radius
1014 _layer->setRadius(300 * percent);
1015 CCLOG("radius is %f", 300 * percent);
1016 break;
1017 default:
1018 break;
1019 }
1020}
1021
1023{
1024 auto listview = cocos2d::ui::ListView::create();
1025
1026 auto scale = cocos2d::ui::Text::create();
1027 scale->setString("scale[0-2]");
1028 scale->setColor(cocos2d::Color3B::RED); // default seleted item
1029 scale->setTouchEnabled(true);
1030 listview->pushBackCustomItem(scale);
1031
1032 auto skewx = cocos2d::ui::Text::create();
1033 skewx->setString("skewx[0-90]");
1034 skewx->setTouchEnabled(true);
1035 listview->pushBackCustomItem(skewx);
1036
1037 auto skewy = cocos2d::ui::Text::create();
1038 skewy->setString("skewy[0-90]");
1039 skewy->setTouchEnabled(true);
1040 listview->pushBackCustomItem(skewy);
1041
1042 auto expand = cocos2d::ui::Text::create();
1043 expand->setString("expand[0-1]");
1044 expand->setTouchEnabled(true);
1045 listview->pushBackCustomItem(expand);
1046
1047 auto radius = cocos2d::ui::Text::create();
1048 radius->setString("radius[0-300]");
1049 radius->setTouchEnabled(true);
1050 listview->pushBackCustomItem(radius);
1051
1052 listview->setContentSize(scale->getContentSize() * 5);
1053 listview->setCurSelectedIndex(0);
1054 listview->setTouchEnabled(true);
1055 listview->addEventListener((ui::ListView::ccListViewCallback)CC_CALLBACK_2(LayerRadialGradientTest::listviewCallback, this));
1056 listview->setTag(100);
1057
1058 return listview;
1059}
#define ADD_TEST_CASE(__className__)
Definition: BaseTest.h:211
static void setEnableRecursiveCascading(Node *node, bool enable)
Definition: LayerTest.cpp:61
USING_NS_CC
Definition: LayerTest.cpp:29
@ kTagLayer
Definition: LayerTest.cpp:33
#define kLayerIgnoreAnchorPoint
Definition: LayerTest.cpp:606
cocos2d::LayerColor * _layer[3]
Definition: LayerTest.h:195
virtual std::string subtitle() const override
Definition: LayerTest.cpp:825
virtual std::string title() const override
Definition: LayerTest.cpp:820
void step(float dt)
Definition: LayerTest.cpp:815
virtual void onEnter() override
Definition: LayerTest.cpp:788
virtual void onEnter() override
Definition: LayerTest.cpp:831
void step(float dt)
Definition: LayerTest.cpp:861
cocos2d::LayerColor * _layer[3]
Definition: LayerTest.h:209
virtual std::string subtitle() const override
Definition: LayerTest.cpp:871
virtual std::string title() const override
Definition: LayerTest.cpp:866
cocos2d::LayerColor * _layer
Definition: LayerTest.h:222
virtual std::string subtitle() const override
Definition: LayerTest.cpp:881
virtual void onExit() override
Definition: LayerTest.cpp:894
virtual void onEnter() override
Definition: LayerTest.cpp:886
virtual std::string title() const override
Definition: LayerTest.cpp:876
virtual std::string subtitle() const override
Definition: LayerTest.cpp:782
virtual std::string title() const override
Definition: LayerTest.cpp:777
virtual std::string title() const override
Definition: LayerTest.cpp:594
virtual std::string subtitle() const override
Definition: LayerTest.cpp:599
void toggleItem(cocos2d::Ref *sender)
Definition: LayerTest.cpp:553
void onTouchesMoved(const std::vector< cocos2d::Touch * > &touches, cocos2d::Event *event)
Definition: LayerTest.cpp:559
virtual std::string title() const override
Definition: LayerTest.cpp:573
virtual std::string subtitle() const override
Definition: LayerTest.cpp:578
virtual std::string title() const override
Definition: LayerTest.cpp:645
virtual void onEnter() override
Definition: LayerTest.cpp:608
void onToggle(cocos2d::Ref *pObject)
Definition: LayerTest.cpp:638
virtual std::string subtitle() const override
Definition: LayerTest.cpp:650
virtual std::string subtitle() const override
Definition: LayerTest.cpp:698
virtual std::string title() const override
Definition: LayerTest.cpp:693
virtual void onEnter() override
Definition: LayerTest.cpp:657
void onToggle(cocos2d::Ref *pObject)
Definition: LayerTest.cpp:686
void onToggle(cocos2d::Ref *pObject)
Definition: LayerTest.cpp:737
virtual std::string title() const override
Definition: LayerTest.cpp:744
virtual std::string subtitle() const override
Definition: LayerTest.cpp:749
virtual void onEnter() override
Definition: LayerTest.cpp:704
void listviewCallback(cocos2d::Ref *sender, cocos2d::ui::ListView::EventType type)
Definition: LayerTest.cpp:946
cocos2d::ui::Slider * createSlider()
Definition: LayerTest.cpp:931
void sliderCallback(cocos2d::Ref *sender, cocos2d::ui::Slider::EventType type)
Definition: LayerTest.cpp:986
virtual void onEnter() override
Definition: LayerTest.cpp:907
cocos2d::ui::ListView * createListView()
Definition: LayerTest.cpp:1022
cocos2d::LayerRadialGradient * _layer
Definition: LayerTest.h:238
virtual std::string title() const override
Definition: LayerTest.cpp:902
virtual void onEnter() override
Definition: LayerTest.cpp:387
virtual std::string subtitle() const override
Definition: LayerTest.cpp:434
void onTouchesMoved(const std::vector< cocos2d::Touch * > &touches, cocos2d::Event *event)
Definition: LayerTest.cpp:422
void onTouchesEnded(const std::vector< cocos2d::Touch * > &touches, cocos2d::Event *event)
Definition: LayerTest.cpp:429
void updateSize(cocos2d::Vec2 &touchLocation)
Definition: LayerTest.cpp:406
void onTouchesBegan(const std::vector< cocos2d::Touch * > &touches, cocos2d::Event *event)
Definition: LayerTest.cpp:417
virtual void onEnter() override
Definition: LayerTest.cpp:444
virtual std::string subtitle() const override
Definition: LayerTest.cpp:470
virtual std::string subtitle() const override
Definition: LayerTest.cpp:522
void newBlend(float dt)
Definition: LayerTest.cpp:499
virtual void onEnter() override
Definition: LayerTest.cpp:231
virtual std::string subtitle() const override
Definition: LayerTest.cpp:276
virtual void onEnter() override
Definition: LayerTest.cpp:283
virtual std::string subtitle() const override
Definition: LayerTest.cpp:328
virtual std::string subtitle() const override
Definition: LayerTest.cpp:377
virtual void onEnter() override
Definition: LayerTest.cpp:335
virtual std::string subtitle() const override
Definition: LayerTest.cpp:120
virtual void onEnter() override
Definition: LayerTest.cpp:78
virtual std::string subtitle() const override
Definition: LayerTest.cpp:172
virtual void onEnter() override
Definition: LayerTest.cpp:127
virtual void onEnter() override
Definition: LayerTest.cpp:179
virtual std::string subtitle() const override
Definition: LayerTest.cpp:222
virtual std::string title() const override
Definition: LayerTest.cpp:72
virtual void onEnter() override
Definition: BaseTest.cpp:430
static cocos2d::Rect getVisibleRect()
Definition: VisibleRect.cpp:39
static const char s_pathSister1[]
Definition: testResource.h:29
static const char s_pathSister2[]
Definition: testResource.h:30