ParallaxNode * ParallaxNode::create()
{
    ParallaxNode *ret = new ParallaxNode();
    ret->autorelease();
    return ret;
}
ParallaxNode * ParallaxNode::create()
{
    ParallaxNode *ret = new (std::nothrow) ParallaxNode();
    ret->autorelease();
    return ret;
}
Beispiel #3
0
bool GameScene::init()
{
	if ( !LayerColor::initWithColor(Color4B(0,250,250,255)) )
	{
		return false;
	}
	pause = false;	//ÔÝÍ£±êʶΪ¼Ù
	/************************************************************************/
	/* ½«Í¼²ã´æÈëÓÎÏ·¹ÜÀíÆ÷ÖÐ                                                   */
	/************************************************************************/
	//ÓÑÃËͳ¼Æ-¼Ç¼½øÈë¹Ø¿¨
	char levelStr[5];
	sprintf(levelStr, "level_%d_", level);
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
	umeng::MobClickCpp::startLevel(levelStr);
	#endif

	staticLayer = this;		//ÓÎÏ·¾²Ì¬²ã
	GameManager::getInstance()->staticLayer = staticLayer;
	
	gameLayer = Layer::create();		//ÓÎÏ·Ö÷²ã
	GameManager::getInstance()->gameLayer = gameLayer;
	staticLayer->addChild(gameLayer);

	ParallaxNode* praNode = ParallaxNode::create();
	bkLayer = Layer::create();		//±³¾°²ã-ÊÓ²î²ã
	GameManager::getInstance()->bkLayer = bkLayer;
	gameLayer->addChild(praNode, -2); //Ó¦¸ÃСÓÚ¼ÓÔصØͼ²ã
	praNode->addChild(bkLayer, 1, Vec2(CD_FLOAT("bk_ratio_x"), CD_FLOAT("bk_ratio_y")), Vec2(0, 0));

	thingLayer = Layer::create();		//ÊÂÎï²ã
	GameManager::getInstance()->thingLayer = thingLayer;
	gameLayer->addChild(thingLayer);

	monsterLayer = Layer::create();	//¹ÖÎï²ã
	GameManager::getInstance()->monsterLayer = monsterLayer;
	gameLayer->addChild(monsterLayer);

	heroLayer = Layer::create();		//Ó¢ÐÛ²ã
	GameManager::getInstance()->heroLayer = heroLayer;
	gameLayer->addChild(heroLayer, 100);

	weaponLayer = Layer::create();	//ÌØЧ²ã
	GameManager::getInstance()->weaponLayer = weaponLayer;
	gameLayer->addChild(weaponLayer);

	hudLayer = HudLayer::create();	//HUD²ã----------todo
	GameManager::getInstance()->hudLayer = hudLayer;
	staticLayer->addChild(hudLayer);

	settingLayer = Layer::create();	//ÉèÖòã
	GameManager::getInstance()->settingLayer = settingLayer;
	staticLayer->addChild(settingLayer);
	//////////////////ÉèÖòã³õʼ»¯////////////////////////////
	//ĬÈϲ»´ò¿ªÉèÖòã
	settingLayer->setVisible(false);
	//±³¾°
	Sprite* settingBk = Sprite::create("UI/GAME/bk.png");
	settingBk->setAnchorPoint(Vec2(0, 0));
	settingBk->setPosition(0, 0);
	settingLayer->addChild(settingBk);
	//Pause
	Sprite* pauseLogo = Sprite::create("UI/GAME/pause.png");
	pauseLogo->setPosition(CD_FLOAT("setting_pause_x"), CD_FLOAT("setting_pause_y"));
	settingLayer->addChild(pauseLogo);
	//²Ëµ¥
	Menu* settingMenu = Menu::create();
	settingMenu->setAnchorPoint(Vec2(0, 0));
	settingMenu->setPosition(0, 0);
	settingLayer->addChild(settingMenu);
	//·µ»Ø°´Å¥
	MenuItemImage* backButton = MenuItemImage::create("UI/GAME/up_back.png", "UI/GAME/down_back.png", "UI/GAME/down_back.png", CC_CALLBACK_1(GameScene::backButton, this));
	backButton->setPosition(CD_FLOAT("setting_back_x"), CD_FLOAT("setting_back_y"));
	settingMenu->addChild(backButton);
	MenuItemImage* homeButton = MenuItemImage::create("UI/GAME/up_home.png", "UI/GAME/down_home.png", "UI/GAME/down_home.png", CC_CALLBACK_1(GameScene::homeButton, this));
	homeButton->setPosition(CD_FLOAT("setting_home_x"), CD_FLOAT("setting_home_y"));
	settingMenu->addChild(homeButton);
	MenuItemImage* breakButton = MenuItemImage::create("UI/GAME/up_break.png", "UI/GAME/down_break.png", "UI/GAME/down_break.png", CC_CALLBACK_1(GameScene::breakButton, this));
	breakButton->setPosition(CD_FLOAT("setting_break_x"), CD_FLOAT("setting_break_y"));
	settingMenu->addChild(breakButton);
	
	//////////////////³õʼ»¯µØͼ/////////////////////////////
	//
	MapAnalysis* mapAnalysis = MapAnalysis::getInstance();
	mapAnalysis->initMap(level);
	//´Ë´¦ôÛºÏÑÏÖØ
	hero = GameManager::getInstance()->hero;
	///////////////////////////ʼþ¼àÌý//////////////////////////////
	//ÉêÇë¼üÅ̼àÌý
	EventListenerKeyboard* event = EventListenerKeyboard::create();
	event->onKeyPressed = [=](EventKeyboard::KeyCode code, Event* event){
		if(code == EventKeyboard::KeyCode::KEY_K)
		{
			hero->jump();
		}
		else if(code == EventKeyboard::KeyCode::KEY_A)
		{
			hero->moveLeft();
		}
		else if(code == EventKeyboard::KeyCode::KEY_D)
		{
			hero->moveRight();
		}
		else if(code == EventKeyboard::KeyCode::KEY_J)
		{
			hero->fire();
		}
	};
	event->onKeyReleased = [=](EventKeyboard::KeyCode code, Event* event){
		if(code == EventKeyboard::KeyCode::KEY_A && hero->getMoveState() == MOVE_LEFT)
		{
			hero->moveStop();
		}
		else if(code == EventKeyboard::KeyCode::KEY_D && hero->getMoveState() == MOVE_RIGHT)
		{
			hero->moveStop();
		}
	};
	//°´¼ü¾«Áé
	Sprite* but_left = Sprite::create("HUD/button_up_left.png");
	but_left->setAnchorPoint(Vec2(0, 0));
	but_left->setPosition(CD_FLOAT("hud_but_left_x"), CD_FLOAT("hud_but_left_y"));
	hudLayer->addChild(but_left);

	Sprite* but_right = Sprite::create("HUD/button_up_right.png");
	but_right->setAnchorPoint(Vec2(0, 0));
	but_right->setPosition(CD_FLOAT("hud_but_right_x"), CD_FLOAT("hud_but_right_y"));
	hudLayer->addChild(but_right);

	Sprite* but_A = Sprite::create("HUD/button_up_A.png");
	but_A->setAnchorPoint(Vec2(0, 0));
	but_A->setPosition(CD_FLOAT("hud_but_A_x"), CD_FLOAT("hud_but_A_y"));
	hudLayer->addChild(but_A);

	Sprite* but_B = Sprite::create("HUD/button_up_B.png");
	but_B->setAnchorPoint(Vec2(0, 0));
	but_B->setPosition(CD_FLOAT("hud_but_B_x"), CD_FLOAT("hud_but_B_y"));
	hudLayer->addChild(but_B);
	//hud²Ëµ¥
	Menu* hudMenu = Menu::create();
	hudMenu->setAnchorPoint(Vec2(0, 0));
	hudMenu->setPosition(0, 0);
	hudLayer->addChild(hudMenu);
	//ÔÝÍ£°´Å¥
	MenuItemImage* pauseButton = MenuItemImage::create("UI/GAME/pause_button.png", "UI/GAME/pause_button.png", "UI/GAME/pause_button.png", CC_CALLBACK_1(GameScene::pauseButton, this));
	pauseButton->setPosition(CD_FLOAT("hud_pause_bt_x"), 640-CD_FLOAT("hud_pause_bt_y"));
	hudMenu->addChild(pauseButton);
	//°´¼ü°üΧºÐ
	Rect rect_but_left = but_left->getBoundingBox();
	Rect rect_but_right = but_right->getBoundingBox();
	Rect rect_but_A = but_A->getBoundingBox();
	Rect rect_but_B = but_B->getBoundingBox();
	//ÉêÇë´¥Ãþ¼àÌý
	EventListenerTouchAllAtOnce* touchEvent = EventListenerTouchAllAtOnce::create();
	//´¥Ãþ°´ÏÂ
	touchEvent->onTouchesBegan = [=](const std::vector<Touch*>& touches, Event* event){
		for (auto &item : touches)       //±éÀúÈÝÆ÷Öеĸ÷¸ö³ÉÔ±
		{
			auto touch = item;
			auto location = touch->getLocation();
			//LEFT
			if (rect_but_left.containsPoint(location))
			{
				hero->moveLeft();
			}
			//RIGHT
			else if (rect_but_right.containsPoint(location))
			{
				hero->moveRight();
			} 
			//A
			else if (rect_but_A.containsPoint(location))
			{
				hero->fire();
			} 
			//B
			else if (rect_but_B.containsPoint(location))
			{
				hero->jump();
			}
		}
	};
	//´¥Ãþʱ
	touchEvent->onTouchesMoved = [=](const std::vector<Touch*>& touches, Event* event){
		bool left = false;
		bool right = false;
		for (auto &item : touches)       //±éÀúÈÝÆ÷Öеĸ÷¸ö³ÉÔ±
		{
			auto touch = item;
			auto location = touch->getLocation();
			
			if (rect_but_left.containsPoint(location))
			{
				left = true;
				hero->moveLeft();
			}
			else if (rect_but_right.containsPoint(location))
			{
				right = true;
				hero->moveRight();
			}
		}
		setLeft(left);
		setRight(right);
		if (!left && !right)
		{
			hero->moveStop();
		}
	};
	//´¥Ãþ̧Æð
	touchEvent->onTouchesEnded = [=](const std::vector<Touch*>& touches, Event* event){
		bool left = isLeft();
		bool right = isRight();
		for (auto &item : touches)       //±éÀúÈÝÆ÷Öеĸ÷¸ö³ÉÔ±
		{
			auto touch = item;
			auto location = touch->getLocation();

			if (rect_but_left.containsPoint(location))
			{
				left = false;
			}
			else if (rect_but_right.containsPoint(location))
			{
				right = false;
			}
		}
		setLeft(left);
		setRight(right);
		if (!left && !right)
		{
			hero->moveStop();
		}
	};
	//°ó¶¨Ê¼þ
	Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(event, this);
	Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(touchEvent, this);
	
	scheduleUpdate();