标签:style blog http color io os ar for div
1 class Sprite1 : public SpriteTestDemo 2 { 3 public: 4 CREATE_FUNC(Sprite1); 5 Sprite1(); 6 virtual std::string title() const override;// 主标题 7 virtual std::string subtitle() const override;// 副标题 8 9 void addNewSpriteWithCoords(Vec2 p);// 根据坐标创建精灵 10 void onTouchesEnded(const std::vector<Touch*>& touches, Event* event);// 触摸结束回调 11 };
SpriteTestDemo类请看这里http://www.cnblogs.com/studweijun/p/3979976.html
这是spriteTest的第一个测试项,title()函数就是设置主标题,subtitle()函数设置副标题,addNewSpriteWithCoords函数是在根据提供的坐标生成精灵。我们来看一下实现:
1 Sprite1::Sprite1() 2 { 3 auto listener = EventListenerTouchAllAtOnce::create();// 创建事件监听器 4 listener->onTouchesEnded = CC_CALLBACK_2(Sprite1::onTouchesEnded, this); 5 _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);// 指定事件的侦听器 6 7 auto s = Director::getInstance()->getWinSize(); 8 addNewSpriteWithCoords( Vec2(s.width/2, s.height/2) ); 9 }
这个构造函数功能主要是设置触摸事件,和加载位于窗口中间的一个精灵。
1 void Sprite1::addNewSpriteWithCoords(Vec2 p) 2 { 3 int idx = (int)(CCRANDOM_0_1() * 1400.0f / 100.0f);// 获得0-13的随机数 4 /* (idx%5,idx/5)定位到第几帧 */ 5 int x = (idx%5) * 85;// 0-85*4 6 int y = (idx/5) * 121;// 0-121*2 7 8 auto sprite = Sprite::create("Images/grossini_dance_atlas.png", Rect(x,y,85,121) ); 9 addChild( sprite ); 10 11 sprite->setPosition( Vec2( p.x, p.y) ); 12 13 ActionInterval* action; 14 float random = CCRANDOM_0_1();// 获得0-1的浮点数 15 16 /* 根据不同随机数设置不同动作 */ 17 if( random < 0.20 ) 18 action = ScaleBy::create(3, 2);// 放缩动作 19 else if(random < 0.40) 20 action = RotateBy::create(3, 360);// 旋转动作 21 else if( random < 0.60) 22 action = Blink::create(1, 3);// 闪烁动作 23 else if( random < 0.8 ) 24 action = TintBy::create(2, 0, -255, -255);// 渐变动作 25 else 26 action = FadeOut::create(2);// 淡出动作 27 auto action_back = action->reverse(); 28 auto seq = Sequence::create( action, action_back, nullptr );// 序列动作 29 30 sprite->runAction( RepeatForever::create(seq)/* 重复动作 */ ); 31 }
上面函数就是根据随机函数获得随机精灵帧添加新精灵,然后随机添加动作。
1 void Sprite1::onTouchesEnded(const std::vector<Touch*>& touches, Event* event) 2 { 3 /* 循环获得触摸点 */ 4 for (auto touch: touches) 5 { 6 auto location = touch->getLocation();// 获得触摸位置 7 8 addNewSpriteWithCoords( location ); 9 } 10 } 11 /* 添加主标题 */ 12 std::string Sprite1::title() const 13 { 14 return "Testing Sprite"; 15 } 16 /* 添加副标题 */ 17 std::string Sprite1::subtitle() const 18 { 19 return "Tap screen to add more sprites"; 20 }
上面函数就是为了处理触摸事件和设置主标题和副标题。
Cocos2d-x_3.2 Demo ----------SpriteTest(2.1)
标签:style blog http color io os ar for div
原文地址:http://www.cnblogs.com/studweijun/p/3980213.html