void Slider::copySpecialProperties(Widget *widget) { Slider* slider = dynamic_cast<Slider*>(widget); if (slider) { _prevIgnoreSize = slider->_prevIgnoreSize; setScale9Enabled(slider->_scale9Enabled); auto barSprite = slider->_barRenderer->getSprite(); if (nullptr != barSprite) { loadBarTexture(barSprite->getSpriteFrame()); } auto progressSprite = slider->_progressBarRenderer->getSprite(); if (nullptr != progressSprite) { loadProgressBarTexture(progressSprite->getSpriteFrame()); } loadSlidBallTextureNormal(slider->_slidBallNormalRenderer->getSpriteFrame()); loadSlidBallTexturePressed(slider->_slidBallPressedRenderer->getSpriteFrame()); loadSlidBallTextureDisabled(slider->_slidBallDisabledRenderer->getSpriteFrame()); setPercent(slider->getPercent()); setMaxPercent(slider->getMaxPercent()); _isSliderBallPressedTextureLoaded = slider->_isSliderBallPressedTextureLoaded; _isSliderBallDisabledTexturedLoaded = slider->_isSliderBallDisabledTexturedLoaded; _sliderEventListener = slider->_sliderEventListener; _sliderEventSelector = slider->_sliderEventSelector; _eventCallback = slider->_eventCallback; _ccEventCallback = slider->_ccEventCallback; } }
void AnimationCom::playAnimation(const std::string& name,cocos2d::Node* parent,std::function<void()> callback,const cocos2d::Point& point) { auto iter=animations.find(name); if (iter!=animations.end()) { auto cache = cocos2d::AnimationCache::getInstance(); auto animation = cache->getAnimation(name); auto action2 = cocos2d::Animate::create(animation); auto animationFrame=animation->getFrames().at(0); cocos2d::Sprite* sprite=cocos2d::Sprite::createWithSpriteFrame(animationFrame->getSpriteFrame()); sprite->setAnchorPoint(iter->second.anchorPoint); if (point.equals(cocos2d::Point::ZERO)) { sprite->setPosition(iter->second.position); } else{ sprite->setPosition(point); } sprite->setScale(iter->second.scale.x, iter->second.scale.y); sprite->setLocalZOrder(iter->second.localZOrder); parent->addChild(sprite); //animation->setDelayPerUnit(iter->second.delayPerUnit); //animation->setLoops(iter->second.loops); sprite->runAction(cocos2d::Sequence::create(action2, cocos2d::RemoveSelf::create(), NULL)); } }
void Button::copySpecialProperties(Widget *widget) { Button* button = dynamic_cast<Button*>(widget); if (button) { _prevIgnoreSize = button->_prevIgnoreSize; setScale9Enabled(button->_scale9Enabled); auto normalSprite = button->_buttonNormalRenderer->getSprite(); if (nullptr != normalSprite) { loadTextureNormal(normalSprite->getSpriteFrame()); } auto clickedSprite = button->_buttonClickedRenderer->getSprite(); if (nullptr != clickedSprite) { loadTexturePressed(clickedSprite->getSpriteFrame()); } auto disabledSprite = button->_buttonDisableRenderer->getSprite(); if (nullptr != disabledSprite) { loadTextureDisabled(disabledSprite->getSpriteFrame()); } setCapInsetsNormalRenderer(button->_capInsetsNormal); setCapInsetsPressedRenderer(button->_capInsetsPressed); setCapInsetsDisabledRenderer(button->_capInsetsDisabled); if(nullptr != button->getTitleRenderer()) { setTitleText(button->getTitleText()); setTitleFontName(button->getTitleFontName()); setTitleFontSize(button->getTitleFontSize()); setTitleColor(button->getTitleColor()); } setPressedActionEnabled(button->_pressedActionEnabled); setZoomScale(button->_zoomScale); } }
void ImageView::copySpecialProperties(Widget *widget) { ImageView* imageView = dynamic_cast<ImageView*>(widget); if (imageView) { _prevIgnoreSize = imageView->_prevIgnoreSize; setScale9Enabled(imageView->_scale9Enabled); auto imageSprite = imageView->_imageRenderer->getSprite(); if(nullptr != imageSprite) { loadTexture(imageSprite->getSpriteFrame()); } setCapInsets(imageView->_capInsets); } }
void LoadingBar::copySpecialProperties(Widget *widget) { LoadingBar* loadingBar = dynamic_cast<LoadingBar*>(widget); if (loadingBar) { _prevIgnoreSize = loadingBar->_prevIgnoreSize; setScale9Enabled(loadingBar->_scale9Enabled); auto barSprite = loadingBar->_barRenderer->getSprite(); if(nullptr != barSprite) { loadTexture(barSprite->getSpriteFrame()); } setCapInsets(loadingBar->_capInsets); setPercent(loadingBar->_percent); setDirection(loadingBar->_direction); } }
Action *edcHeroLayer::setHeroAnim(char *aaname,int aaframes,float delayTime) { auto animation = Animation::create(); for( int i = 1; i <= aaframes ; i++) { char szName[100] = {0}; // sprintf(szName, "snake_chick_up_%04d.png", i); sprintf(szName,"%s%04d%s",aaname,i,".png"); // CCLOG("%s",szName); auto temp = Sprite::createWithSpriteFrameName(szName); animation->addSpriteFrame(temp->getSpriteFrame()); } // should last 0.6 seconds. And there are 4 frames. animation->setDelayPerUnit(delayTime / (float)(aaframes)); animation->setRestoreOriginalFrame(true); Action *temp = RepeatForever::create(Animate::create(animation)); return temp; }
bool Console::init() { if (not Super::init()) { return false; } auto&& winSize = _director->getWinSize(); setTouchEnabled(true); setSwallowTouches(true); setContentSize(cocos2d::Size(winSize.width, 50.0f)); editBoxDelegate_ = std::make_unique<detail::ConsoleDelegate>(this); auto whiteSprite = cocos2d::Sprite::create(); auto editBoxSprite = cocos2d::ui::Scale9Sprite::createWithSpriteFrame( whiteSprite->getSpriteFrame()); editBoxSprite->setVisible(false); auto background = cocos2d::LayerColor::create(cocos2d::Color4B::BLACK); background->setContentSize(getContentSize()); background->setOpacity(100); addChild(background); editBox_ = cocos2d::ui::EditBox::create(cocos2d::Size(winSize.width, 50.0f), editBoxSprite); editBox_->setSwallowTouches(false); editBox_->setAnchorPoint(cocos2d::Vec2::ANCHOR_MIDDLE_TOP); editBox_->setPositionPercent(cocos2d::Vec2::ANCHOR_MIDDLE_TOP); editBox_->setPositionType(cocos2d::ui::Widget::PositionType::PERCENT); editBox_->setInputMode(cocos2d::ui::EditBox::InputMode::SINGLE_LINE); editBox_->setInputFlag( cocos2d::ui::EditBox::InputFlag::INITIAL_CAPS_ALL_CHARACTERS); editBox_->setReturnType(cocos2d::ui::EditBox::KeyboardReturnType::SEND); editBox_->setFontSize(20); editBox_->setFontName("Arial"); editBox_->setFontColor(cocos2d::Color4B(200, 200, 200, 255)); editBox_->setDelegate(editBoxDelegate_.get()); editBox_->addComponent(ee::DialogComponent::create()); addChild(editBox_); addComponent(ee::DialogComponent::create()); return true; }
void HelloWorld::update(float delta) { if (foodCount >=5) { hasPowerUp = true; foodCount = 0; timer = 10; this->schedule(schedule_selector(HelloWorld::updateTimer), 1.0f); float sizeX = prinny_frames_idle.front()->getOriginalSizeInPixels().width; float sizeY = prinny_frames_idle.front()->getOriginalSizeInPixels().height; float bgSizeX = background->getContentSize().width; float bgSizeY = background->getContentSize().height; powerUp = Sprite::createWithSpriteFrame(prinny_frames_idle.front()); powerUp->runAction(prinny_idle); background->addChild(powerUp); powerUp->setPosition(generateRandomPosition(sizeX, bgSizeX - sizeX, sizeY, bgSizeY - sizeY)); } if (timer <= 0) { hasPowerUp = false; background->removeChild(powerUp, true); this->unschedule(schedule_selector(HelloWorld::updateTimer)); } auto front = line.front(); auto position = front->getPosition(); switch (front->getDirection()) { case 0: position.x -= front->getSpriteFrame()->getOriginalSizeInPixels().width + 1; break; case 1: position.x += front->getSpriteFrame()->getOriginalSizeInPixels().width + 1; break; case 2: position.y += front->getSpriteFrame()->getOriginalSizeInPixels().height + 1; break; case 3: position.y -= front->getSpriteFrame()->getOriginalSizeInPixels().height + 1; break; default: break; } if (CollisionWithDeath()) { game_over_label->setVisible(true); cocos2d::Director::getInstance()->pause(); return; } if (CollisionWithPowerUp()) { hasPowerUp = false; background->removeChild(powerUp, true); this->unschedule(schedule_selector(HelloWorld::updateTimer)); score += 500; score_value_label->setString(std::to_string(score)); cocos2d::Director::getInstance()->getScheduler()->performFunctionInCocosThread(CC_CALLBACK_0(HelloWorld::playRandomPrinnySound, this)); } if (CollisionWithFood()) { float sizeX = prinny_frames_idle.front()->getOriginalSizeInPixels().width; float sizeY = prinny_frames_idle.front()->getOriginalSizeInPixels().height; float bgSizeX = background->getContentSize().width; float bgSizeY = background->getContentSize().height; food->setPosition(generateRandomPosition(sizeX, bgSizeX - sizeX, sizeY, bgSizeY - sizeY)); if (!hasPowerUp) { foodCount++; } cocos2d::Director::getInstance()->getScheduler()->performFunctionInCocosThread(CC_CALLBACK_0(HelloWorld::playRandomPrinnySound, this)); totalFoodCount++; score += 50; score_value_label->setString(std::to_string(score)); addNewMember(); if (totalFoodCount % 3 == 0) { auto interval = 10 + totalFoodCount/3; cocos2d::Director::getInstance()->setAnimationInterval(1.0 / interval); level++; level_value_label->setString(std::to_string(level)); } } else{ for (int i = line.size() - 1; i >= 1; i--) { auto prev = line.at(i - 1); auto curr = line.at(i); if (prev->getDirection() != curr->getDirection()) { auto new_dir = prev->getDirection(); switch (new_dir) { case 0: curr->setDirection(new_dir, RepeatForever::create(Animate::create(Animation::createWithSpriteFrames(prinny_frames_left, 1.0f / 8)))); break; case 1: curr->setDirection(new_dir, RepeatForever::create(Animate::create(Animation::createWithSpriteFrames(prinny_frames_right, 1.0f / 8)))); break; case 2: curr->setDirection(new_dir, RepeatForever::create(Animate::create(Animation::createWithSpriteFrames(prinny_frames_up, 1.0f / 8)))); break; case 3: curr->setDirection(new_dir, RepeatForever::create(Animate::create(Animation::createWithSpriteFrames(prinny_frames_down, 1.0f / 8)))); break; default: break; } } curr->setPosition(prev->getPosition()); } front->setPosition(position); } }
void GameScene_Box2D::initPhysics() { b2Vec2 gravity = b2Vec2(0, -9.8); //重力を作成 _world = new b2World(gravity); //Worldを作成 b2DestructionListener *listener; _world->SetDestructionListener(listener); // _world->SetDestructionListener(this); _debugDraw = new GLESDebugDraw( PTM_RATIO ); _world->SetDebugDraw(_debugDraw); const b2ParticleSystemDef particleSystemDef; //particleSystemDef->flags = b2_waterParticle; _particleSystem = _world->CreateParticleSystem(&particleSystemDef); //_particleSystem->SetRadius(50/PTM_RATIO); b2ParticleGroupDef groupDef; //groupDef.flags = b2_waterParticle; _particleGroup = _particleSystem->CreateParticleGroup(groupDef); uint32 flags = 0; flags += b2Draw::e_shapeBit; //flags += b2Draw::e_particleBit; // flags += b2Draw::e_jointBit; // flags += b2Draw::e_aabbBit; // flags += b2Draw::e_pairBit; // flags += b2Draw::e_centerOfMassBit; _debugDraw->SetFlags(flags); //画面サイズサイズを取得 auto window_size = Director::getInstance()->getWinSize(); //床 auto floor = cocos2d::extension::PhysicsSprite::create(); floor->setTextureRect(Rect(0,0,window_size.width,100)); _floor = floor->getSpriteFrame()->getRect(); auto size = floor->getContentSize(); b2BodyDef bodyDef; bodyDef.type = b2_staticBody; bodyDef.position.Set(0, -size.height/PTM_RATIO); b2Body *body = _world->CreateBody(&bodyDef); b2PolygonShape dynamicBox; dynamicBox.SetAsBox(size.width/PTM_RATIO, size.height/PTM_RATIO); b2FixtureDef fixtureDef; fixtureDef.shape = &dynamicBox; fixtureDef.density = 1.0f; body->CreateFixture(&fixtureDef); floor->setColor(Color3B(255,255,255)); floor->setTag(spriteType::kFloor); // addChild(floor); auto left_wall = cocos2d::extension::PhysicsSprite::create(); left_wall->setTextureRect(Rect(10,window_size.height/2,10,window_size.height*2)); //left_wall->setPosition(Vec2(10, window_size.height/2)); left_wall->setColor(Color3B(255,255,255)); _leftwall = left_wall->getSpriteFrame()->getRect(); bodyDef.type = b2_staticBody; bodyDef.position.Set(0, 0); b2Body *bodyleft = _world->CreateBody(&bodyDef); b2PolygonShape dynamicBoxleft; dynamicBoxleft.SetAsBox(10/PTM_RATIO, window_size.height*2/PTM_RATIO); b2FixtureDef fixtureDefleft; fixtureDefleft.shape = &dynamicBoxleft; fixtureDefleft.density = 1.0f; bodyleft->CreateFixture(&fixtureDefleft); auto right_wall = cocos2d::extension::PhysicsSprite::create(); right_wall->setTextureRect(Rect(window_size.width,window_size.height/2,10,window_size.height*2)); size = right_wall->getContentSize(); bodyDef.type = b2_staticBody; bodyDef.position.Set(window_size.width/PTM_RATIO, 0); b2Body *bodyright_wall = _world->CreateBody(&bodyDef); b2PolygonShape dynamicBoxright_wall; dynamicBoxright_wall.SetAsBox(10/PTM_RATIO, window_size.height*2/PTM_RATIO); b2FixtureDef fixtureDefright; fixtureDefright.shape = &dynamicBoxright_wall; fixtureDefright.density = 1.0f; bodyright_wall->CreateFixture(&fixtureDefright); right_wall->setColor(Color3B(255,255,255)); _rightwall = right_wall->getSpriteFrame()->getRect(); //addChild(right_wall); _ceil = Rect(window_size.width/2, window_size.height - 200, window_size.width, 100); }
bool GameScene_Chipmunk::init() { if ( !Scene::init() ) { return false; } //画面サイズサイズを取得 auto window_size = Director::getInstance()->getWinSize(); //床 auto floor = Sprite::create(); floor->setPosition(window_size.width/2, 0); floor->setTextureRect(Rect(0,0,window_size.width,100)); floor->setColor(Color3B(255,255,255)); floor->setTag(spriteType::kFloor); _floor = floor->getSpriteFrame()->getRect(); auto left_wall = Sprite::create(); left_wall->setPosition(10, window_size.height/2); left_wall->setTextureRect(Rect(0,0,10,window_size.height*2)); left_wall->setColor(Color3B(255,255,255)); _leftwall = left_wall->getSpriteFrame()->getRect(); auto right_wall = Sprite::create(); right_wall->setPosition(window_size.width, window_size.height/2); right_wall->setTextureRect(Rect(0,0,10,window_size.height*2)); right_wall->setColor(Color3B(255,255,255)); _rightwall = right_wall->getSpriteFrame()->getRect(); _ceil = Rect(window_size.width/2, window_size.height - 200, window_size.width, 20); //wall->setRotation(10.0f); //反発係数と摩擦係数 auto material = PHYSICSBODY_MATERIAL_DEFAULT; material.restitution = 0.0f; material.friction = 1.0f; auto pWall = PhysicsBody::createBox(floor->getContentSize(), material); //重力干渉を受けるか pWall->setDynamic(false); //回転させるか pWall->setRotationEnable(false); pWall->setContactTestBitmask(true); floor->setPhysicsBody(pWall); addChild(floor); auto pright_wall = PhysicsBody::createBox(right_wall->getContentSize(), material); //重力干渉を受けるか pright_wall->setDynamic(false); //回転させるか pright_wall->setRotationEnable(false); right_wall->setPhysicsBody(pright_wall); addChild(right_wall); auto pleft_wall = PhysicsBody::createBox(left_wall->getContentSize(), material); //重力干渉を受けるか pleft_wall->setDynamic(false); //回転させるか pleft_wall->setRotationEnable(false); left_wall->setPhysicsBody(pleft_wall); addChild(left_wall); //event listener //イベントリスナー作成 auto listener = EventListenerTouchAllAtOnce::create(); //イベントを飲み込むかどうか //listener->setSwallowTouches(true); //タッチメソッド設定 listener->onTouchesBegan = CC_CALLBACK_2(GameScene_Chipmunk::onTouchesBegan, this); listener->onTouchesMoved = CC_CALLBACK_2(GameScene_Chipmunk::onTouchesMoved, this); listener->onTouchesEnded = CC_CALLBACK_2(GameScene_Chipmunk::onTouchesEnded, this); //this->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, this); //優先度100でディスパッチャーに登録 this->getEventDispatcher()->addEventListenerWithFixedPriority(listener, 100); //衝突検知 auto plistener = EventListenerPhysicsContact::create(); plistener->onContactBegin = CC_CALLBACK_1(GameScene_Chipmunk::onContactBegin, this); this->getEventDispatcher()->addEventListenerWithSceneGraphPriority(plistener, this); auto plistenerend = EventListenerPhysicsContact::create(); plistenerend->onContactPostSolve = CC_CALLBACK_2(GameScene_Chipmunk::onContactPostSolve, this); this->getEventDispatcher()->addEventListenerWithSceneGraphPriority(plistenerend, this); this->fillBoll(); scheduleUpdate(); return true; }