//碰撞检测 void StartGame::testCollin(float dt){ auto visibleSize=Director::getInstance()->getWinSize(); __Array *tempItemArray=__Array::create(); tempItemArray->retain(); Item *item; for (int i=0; i<itemArray->count(); i++) { item=(Item*)itemArray->getObjectAtIndex(i); if (Tools::isCollision(hook, item)&&!hook->hookAction&&!item->itemAction) { hook->stopAllActions(); miner->MinerAction(); tempItemArray->addObject(item); hook->hookAction = true; item->itemAction=true; if (toggle->getSelectedIndex()==1) { dt=0.5; }else{ dt=2.0; } auto move=MoveTo::create(dt, Vec2(visibleSize.width/2-5,visibleSize.height/2-20)); auto call=CallFunc::create(CC_CALLBACK_0(StartGame::move, this)); auto sequence=Sequence::create(move,call, NULL); hook->runAction(sequence); if (item->itemAction) { item->setRotation(hook->getRotation()); item->setAnchorPoint(Point(0.5, 1)); hook->setAnchorPoint(Point(0.5, 0.7)); item->setPosition(hook->getPosition()); hook->setAnchorPoint(Point(0.5, 1)); } if (item->_type==diamond||item->_type==secret) { ParticleSystemQuad* quad = ParticleSystemQuad::create("Boom.plist"); quad->setBlendAdditive(true); quad->setAutoRemoveOnFinish(true); quad->setPosition(item->getPosition()); quad->setDuration(0.2); this->addChild(quad); } auto move1=MoveTo::create(dt, Vec2(visibleSize.width/2-5,visibleSize.height/2-20)); auto call1=CallFuncN::create(CC_CALLBACK_1(StartGame::removeItem, this)); auto sequence1=Sequence::create(move1,call1, NULL); item->runAction(sequence1); } } itemArray->removeObjectsInArray(tempItemArray); tempItemArray->release(); }
void Stage1::loadingsStep(float dt) { static int progress = 0; //工廠模式 FactoryInterface *factory; //FactoryInterface *enemyFactory = new EnemyFactory(); std::string arrFile[] = { "up.png", "left.png", "right.png" }; Vec2 arrPos[] = { Vec2(48 + 96, 48 + 96), Vec2(48, 48), Vec2(48 + 96 * 2, 48), Vec2(800, 48 + 96) }; Weapon* weapon; Vec2 map1Pos; Vec2 treesPos; ParticleSystemQuad* mSystem; EventListenerTouchOneByOne *touchListener; switch (progress) { case p10: map = MapLayer::create(); bulletLayer = BulletLayer::create(); main = (MainFly*)MainFly::myCreate("main.png"); //利用工廠生產主角 factory = new WarriorFactory(); warrior = (Warrior*)factory->ctrateObject(); warrior->setName("Warrior"); weapon = (Weapon*)Weapon::create("weapon1.png"); warrior->setWeapon(weapon); this->addChild(map, 2); this->addChild(bulletLayer, 1); map->addChild(weapon, 5); map->addChild(warrior, 5); this->addChild(main, 10); //map->setPosition(Vec2(map->getPositionX()-960/2, map->getPositionY()-540/2)); break; case p20: for (int i = 0; i < 4; i++){ auto arr = Input::create("arr.png", Rect(i * 96, 0, 96, 96)); arr->setTag(i); arr->setPosition(arrPos[i]); arr->setControllee(warrior); inputs.push_back(arr); this->addChild(arr, 20); } warrior->setPosition(Vec2(oriX, oriY+200)); //warrior->setWorldPosition(Vec2(oriX, oriY)); //warrior->setEffect(_effect, "warrior_n.png"); for (int i = 2; i < 10+21; i++) { factory = new EnemyFactory(); auto skull = factory->ctrateObject(); skull->setPosition(Vec2(oriX*(i), oriY+400)); skull->setName("skull"); //skull->setEffect(_effect, "warrior_n.png"); map->addChild(skull, 5); } mainPos = Vec2(100, 100); main->setPosition(mainPos); break; // ... case p30: map1 = Sprite::create("stage1Back.png"); map1Pos = Vec2(0 + map1->getContentSize().width / 2, 0 + map1->getContentSize().height / 10); map1->setPosition(map1Pos); this->addChild(map1, 0); trees = Sprite::create("trees.png"); treesPos = Vec2(0 + trees->getContentSize().width / 2, 0 + trees->getContentSize().height - 200); trees->setPosition(treesPos); this->addChild(trees, 1); mSystem = ParticleSystemQuad::create("test.plist"); mSystem->setTextureWithRect(TextureCache::sharedTextureCache()->addImage("8.png"), Rect(0, 0, 64, 64)); mSystem->setBlendAdditive(true); mSystem->setPosition(ccp(0, 540)); this->addChild(mSystem, 50); break; case p40: CocosDenshion::SimpleAudioEngine::getInstance()->preloadBackgroundMusic("bgm/01.mp3"); CocosDenshion::SimpleAudioEngine::getInstance()->setBackgroundMusicVolume(0.1f); CocosDenshion::SimpleAudioEngine::getInstance()->playBackgroundMusic("bgm/01.mp3", true); //CocosDenshion::SimpleAudioEngine::getInstance()->preloadEffect("SE/se_maoudamashii_battle17.mp3"); CocosDenshion::SimpleAudioEngine::getInstance()->preloadEffect("SE/se_maoudamashii_se_fall02.mp3"); CocosDenshion::SimpleAudioEngine::sharedEngine()->preloadEffect("SE/se_maoudamashii_battle17.mp3"); break; case p50: touchListener = EventListenerTouchOneByOne::create(); touchListener->onTouchBegan = CC_CALLBACK_2(Stage1::onTouchBegan, this); touchListener->onTouchEnded = CC_CALLBACK_2(Stage1::onTouchEnded, this); touchListener->onTouchMoved = CC_CALLBACK_2(Stage1::onTouchMoved, this); _eventDispatcher->addEventListenerWithSceneGraphPriority(touchListener, this); break; case p60: warrior->scheduleUpdate(); map->scheduleUpdate(); this->scheduleUpdate(); this->unschedule(schedule_selector(Stage1::loadingsStep)); this->removeChildByName("loadingAnimation"); auto label = Label::createWithTTF("Loading OK!", "TTF/pixelart.ttf", 24); label->setPosition(warrior->getPosition()); this->addChild(label); break; } progress++; }
bool StartGame:: init(){ if (!Layer::init()) { return false; } itemArray=__Array::create(); itemArray->retain(); int k=arc4random()%6+1; std::string str= StringUtils::format("mineBG%d.png",k); auto visibleSize=Director::getInstance()->getVisibleSize(); auto sprite=Sprite::create(str); sprite->setPosition(visibleSize.width/2,visibleSize.height/2); this->addChild(sprite); //离子 ParticleSystemQuad* quad = ParticleSystemQuad::create("fengye.plist"); quad->setBlendAdditive(true); quad->setAutoRemoveOnFinish(true); quad->setPosition(Vec2(400, 300)); this->addChild(quad); //黄金 char a[50]; sprintf(a, "%d",score[level-1]); auto sprite1=Sprite::create("Gold.png"); sprite1->setPosition(visibleSize.width/2-200,visibleSize.height/2+130); auto lable1=Label::createWithSystemFont(a, "fonts/Marker Felt.ttf ", 28); lable1->setTextColor(Color4B::GREEN); lable1->setPosition(visibleSize.width/2-150,visibleSize.height/2+130); lable1->setTag(10); this->addChild(lable1); this->addChild(sprite1); //钱 auto sprite2=Sprite::create("rmbImage.png"); sprite2->setPosition(visibleSize.width/2-200,visibleSize.height/2+90); auto lable2=Label::createWithSystemFont("0", "fonts/Marker Felt.ttf ", 28); lable2->setPosition(visibleSize.width/2-150,visibleSize.height/2+90); lable2->setTag(20); lable2->setTextColor(Color4B::RED); this->addChild(lable2); this->addChild(sprite2); //矿工 auto sprite3=Sprite::create("miner_0707.png"); sprite3->setPosition(visibleSize.width/2+180,visibleSize.height/2+130); char c[50]; sprintf(c, "%d",level); auto lable3=Label::createWithSystemFont(c, "fonts/Marker Felt.ttf ", 28); lable3->setPosition(visibleSize.width/2+220,visibleSize.height/2+130); lable3->setTag(30); lable3->setTextColor(Color4B::GREEN); this->addChild(lable3); this->addChild(sprite3); char d[50]; sprintf(d, "%d",totalTime[level-1]); auto sprite4=Sprite::create("clockPlate.png"); sprite4->setTag(4); sprite4->setPosition(visibleSize.width/2+180,visibleSize.height/2+90); auto lable4=Label::createWithSystemFont(d, "fonts/Marker Felt.ttf ", 28); lable4->setPosition(visibleSize.width/2+220,visibleSize.height/2+90); lable4->setTag(40); lable4->setTextColor(Color4B::GREEN); this->addChild(lable4); this->addChild(sprite4); auto item=MenuItemImage::create("qianglishui.png", "qianglishui.png"); auto item1=MenuItemImage::create("qianglishui.png", "qianglishui.png"); toggle=MenuItemToggle::create(); toggle->addSubItem(item); toggle->addSubItem(item1); toggle->setScale(0.5); toggle->setSelectedIndex(0); toggle->setCallback([this](Ref*){ //减少PowerWater数量 auto lable=(Label*)this->getChildByTag(50); int num= atoi(lable->getString().c_str()); if (num!=0){ Water--; miner->setScale(1.5); //this->schedule(schedule_selector(StartGame::changeSelect),8); this->schedule(CC_CALLBACK_1(StartGame::changeSelect,this), 8, "changeSelect"); lable->setString(StringUtils::format("%d",Water)); this->testCollin(1.0); }else if(num==0){ toggle->setSelectedIndex(0); log("%d",toggle->getSelectedIndex()); } }); menu=Menu::create(toggle, NULL); menu->setPosition(Vec2(visibleSize.width/2+180, visibleSize.height/2+50)); std::string str1= StringUtils::format("%d",Water); lable5=Label::createWithSystemFont(str1,"fonts/Marker Felt.ttf", 28); lable5->setPosition(Vec2(visibleSize.width/2+220, visibleSize.height/2+50)); lable5->setTag(50); lable5->setTextColor(Color4B::GREEN); this->addChild(lable5); this->addChild(menu); if (Boom) { auto item2=MenuItemImage::create("article_2001.png", "article_2001.png"); item2->setScale(1.3); item2->setCallback(CC_CALLBACK_0(StartGame::removeBoom, this)); auto menu=Menu::create(item2,NULL); menu->setPosition(Vec2(visibleSize.width/2+220, visibleSize.height/2+10)); menu->setTag(60); this->addChild(menu); } miner=new Miner(); miner->setPosition(visibleSize.width/2,visibleSize.height/2); this->addChild(miner); hook=Hook::createHook(); hook->setAnchorPoint(Point(0.5, 1)); hook->setPosition(visibleSize.width/2-5,visibleSize.height/2-20); hook->rotate(); this->addChild(hook,1); //添加石头 黄金 this->item(); auto dispather=Director::getInstance()->getEventDispatcher(); auto listener=EventListenerTouchOneByOne::create(); listener->onTouchBegan=CC_CALLBACK_2(StartGame::onTouchBegan, this); //点击事件 listener->onTouchEnded=[this](Touch *touch, Event *unused_event){ if(hook->getPosition().x==235 && hook->getPosition().y == 140){ hook->stopAllActions(); hook->runTarget(); } }; dispather->addEventListenerWithSceneGraphPriority(listener ,this); this->schedule(CC_CALLBACK_1(StartGame::consumeTime,this), 1, "consumTime"); this->schedule(schedule_selector(StartGame::testCollin), 0.01); return true; }