Esempio n. 1
0
bool FriendLayer::init()
{
    if ( !Layer::init() )
    {
        return false;
        
    }
    
    auto friendLayer=CSLoader::createNode("FriendLayer.csb");
    this->addChild(friendLayer);
    
    Button * closeButton = static_cast<Button*>(friendLayer->getChildByName("CloseButton"));
    
    Button * okButton = static_cast<Button*>(friendLayer->getChildByName("Button_OK"));
    
     fname = static_cast<TextField*>(friendLayer->getChildByName("TextField_Fname"));
    fshow = static_cast<Text*>(friendLayer->getChildByName("Text_show"));
    
    closeButton->addTouchEventListener(this, toucheventselector(FriendLayer::closeEvent));
    okButton->addTouchEventListener(this, toucheventselector(FriendLayer::okEvent));
    
    EventDispatcher* eventDispatcher = Director::getInstance()->getEventDispatcher();
    
    EventListenerTouchOneByOne* listener= EventListenerTouchOneByOne::create();
    listener->setSwallowTouches(true);
    
    listener->onTouchBegan = [](Touch* touch, Event* event){return true;};
    listener->onTouchMoved = [](Touch* touch, Event* event){};
    listener->onTouchEnded = [](Touch* touch, Event* event){};
    listener->onTouchCancelled = [](Touch* touch , Event* event){};
    eventDispatcher->addEventListenerWithSceneGraphPriority(listener, friendLayer);   //代码为了设置模态窗口

    return true;
}
Esempio n. 2
0
void GameLayer::registerEventHandlers() {
    Director* director = Director::getInstance();
    EventDispatcher* eventDispatcher = director->getEventDispatcher();
    
    EventListenerTouchOneByOne* eventListener = EventListenerTouchOneByOne::create();
    eventListener->setSwallowTouches(true);
    
    eventListener->onTouchEnded = [=](Touch* touch, Event* event){
        if (!getAcceptInput()) {
            return;
        }
        
        Vec2 position = m_tileLayer->convertTouchToNodeSpace(touch);
        for (auto iterator = m_tileLayer->getChildren().begin(); iterator != m_tileLayer->getChildren().end(); iterator++) {
            auto child = *iterator;
            GameTileView* gameTileView = dynamic_cast<GameTileView*>(child);
            if(gameTileView->getBoundingBox().containsPoint(position)) {
                if (gameTileView->getGameTile()->getCanMove()) {
                    doSelectGameTileView(gameTileView);
                }
                break;
            }
            
        }
    };
    
    eventListener->onTouchBegan = [](Touch* touch, Event* event){
        return true;
    };
    eventListener->onTouchMoved = [](Touch* touch, Event* event){};
    eventListener->onTouchCancelled = [](Touch* touch, Event* event){};
    eventDispatcher->addEventListenerWithSceneGraphPriority(eventListener, m_tileLayer);
}
Esempio n. 3
0
bool PauseLayer::init()
{
    if (!AlertLayer::init())
    {
        return false;
    }
    
    auto board = this->getBoard();
    
    auto title = Sprite::createWithSpriteFrameName(s_pause_txt);
    title->setPosition(Vec2(board->getContentSize().width / 2, board->getContentSize().height));
    board->addChild(title);
    
    // 继续按钮
    auto resumeSprite = Sprite::createWithSpriteFrameName(s_resume_btn);
    auto resumeSpriteActive = Sprite::createWithSpriteFrameName(s_resume_btn_a);
    auto resumeItem = MenuItemSprite::create(resumeSprite, resumeSpriteActive,
                                            CC_CALLBACK_1(PauseLayer::resumeCallBack, this));
	resumeItem->setAnchorPoint(Vec2::ZERO);
    resumeItem->setScale(0.7f);
    resumeItem->setPosition(Vec2(40, 50));
    
    // 重开按钮
    auto restartSprite = Sprite::createWithSpriteFrameName(s_restart_btn);
    auto restartSpriteActive = Sprite::createWithSpriteFrameName(s_restart_btn_a);
    auto restartItem = MenuItemSprite::create(restartSprite, restartSpriteActive,
                                              CC_CALLBACK_1(PauseLayer::restartCallBack, this));
	restartItem->setAnchorPoint(Vec2::ZERO);
    restartItem->setScale(0.7f);
    restartItem->setPosition(Vec2(140, 50));
    
    // 回首页按钮
    auto goHomeSprite = Sprite::createWithSpriteFrameName(s_go_home_btn);
    auto goHomeSpriteActive= Sprite::createWithSpriteFrameName(s_go_home_btn_a);
    auto goHomeItem = MenuItemSprite::create(goHomeSprite, goHomeSpriteActive,
                                             CC_CALLBACK_1(PauseLayer::goHomeCallBack, this));
	goHomeItem->setAnchorPoint(Vec2::ZERO);
    goHomeItem->setScale(0.7f);
    goHomeItem->setPosition(Vec2(240, 50));
    
    auto menu = Menu::create(resumeItem, restartItem, goHomeItem, NULL);
    menu->setPosition(Vec2::ZERO);
    board->addChild(menu);
    
    EventDispatcher *eventDispatcher = Director::getInstance()->getEventDispatcher();
    auto listener = EventListenerTouchOneByOne::create();
    listener->setSwallowTouches(true);      // 是否吞掉事件让下面的层无法响应
    listener->onTouchBegan = CC_CALLBACK_2(PauseLayer::onTouchBegan, this);
    listener->onTouchMoved = CC_CALLBACK_2(PauseLayer::onTouchMoved, this);
    listener->onTouchEnded = CC_CALLBACK_2(PauseLayer::onTouchEnded, this);
    eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);
    
    return true;
}
void ChatScene::setEventHadlers()
{
    EventDispatcher* pDispatcher = Director::getInstance()->getEventDispatcher();
    EventListenerTouchOneByOne* pEventListener = EventListenerTouchOneByOne::create();
    pEventListener->setSwallowTouches(true);
    
    pEventListener->onTouchBegan = CC_CALLBACK_2(ChatScene::onTouchBegan, this);
    pEventListener->onTouchMoved = CC_CALLBACK_2(ChatScene::onTouchMoved, this);
    pEventListener->onTouchEnded = CC_CALLBACK_2(ChatScene::onTouchEnded, this);
    
    pDispatcher->addEventListenerWithSceneGraphPriority(pEventListener, this);
}
Esempio n. 5
0
void GameLayer::registerHandler(Node* node, std::function<void(Touch*, Event*)> onTouchEnded) {
    Director* director = Director::getInstance();
    EventDispatcher* eventDispatcher = director->getEventDispatcher();
    
    EventListenerTouchOneByOne* eventListener = EventListenerTouchOneByOne::create();
    eventListener->setSwallowTouches(true);
    eventListener->onTouchEnded = onTouchEnded;
    eventListener->onTouchBegan = [](Touch* touch, Event* event){
        return true;
    };
    
    eventDispatcher->addEventListenerWithSceneGraphPriority(eventListener, node);
}
Esempio n. 6
0
bool SceneGame::init()
{
  
	if (!Layer::init())
	{
		return false;
	}

	Size visibleSize = Director::getInstance()->getVisibleSize();
	Vec2 origin = Director::getInstance()->getVisibleOrigin();

	_c = new std::vector<Chess*>();
	_c->resize(1000);
	_steps = new std::vector<Step*>();
	_steps->reserve(1000);


	createPlate();

	Chess::_d = Director::getInstance()->getWinSize().height / 10;
	Chess::_offx = Chess::_d;
	Chess::_offy = Chess::_d / 2;

	for (int i = 0; i < 32; i++)
	{
		_c->at(i) = Chess::create();
		_c->at(i)->initChess(i);
		addChild(_c->at(i));
	}


	EventDispatcher *eventDispatcher = Director::getInstance()->getEventDispatcher();
	auto listener = EventListenerTouchOneByOne::create();
	listener->onTouchBegan = CC_CALLBACK_2(SceneGame::onTouchBegan, this);
	listener->onTouchEnded = CC_CALLBACK_2(SceneGame::onTouchEnd, this);
	eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);

	_selectid = 1;
	_selectSprite = Sprite::create("selected.png");
	_selectSprite->setVisible(false);
	addChild(_selectSprite);
	_selectSprite->setScale(0.6f);
	_selectSprite->setZOrder(100);

	_bRedTurn = true;

	_steps->clear();
	addCtrlPanel();

	return true;
}
bool CaiKuangLayer::init()
{
    if ( !Layer::init() )
    {
        return false;
        
    }
    
    auto caiKuangLayer=CSLoader::createNode("CaiKuangLayer.csb");
    addChild(caiKuangLayer);
    
    tt = time(NULL);
    t =localtime(&tt);     //取到当前时间
    
    //    std::cout<<t->tm_hour<<std::endl;
    //    std::cout<<t->tm_min<<std::endl;
    
    Button * closeButton = static_cast<Button*>(caiKuangLayer->getChildByName("CloseButton"));
    
    cStartButton = static_cast<Button*>(caiKuangLayer->getChildByName("ClassStart"));
    inviteButton = static_cast<Button*>(caiKuangLayer->getChildByName("invite"));
    inviteButton->addTouchEventListener(this, toucheventselector(CaiKuangLayer::inviteEvent));
    
    //     cEndButton = static_cast<Button*>(jiaoXueLayer->getChildByName("ClassOver"));
    
    sStartButton = static_cast<Button*>(caiKuangLayer->getChildByName("StudyStart"));
    
    //     sEndButton = static_cast<Button*>(jiaoXueLayer->getChildByName("StudyOver"));
    
    
    closeButton->addTouchEventListener(this, toucheventselector(CaiKuangLayer::closeEvent));
    
    cStartButton->addTouchEventListener(this, toucheventselector(CaiKuangLayer::classEvent));
    
    sStartButton->addTouchEventListener(this, toucheventselector(CaiKuangLayer::studyEvent));
    
    EventDispatcher* eventDispatcher = Director::getInstance()->getEventDispatcher();
    
    EventListenerTouchOneByOne* listener= EventListenerTouchOneByOne::create();
    listener->setSwallowTouches(true);
    
    listener->onTouchBegan = [](Touch* touch, Event* event){return true;};
    listener->onTouchMoved = [](Touch* touch, Event* event){};
    listener->onTouchEnded = [](Touch* touch, Event* event){};
    listener->onTouchCancelled = [](Touch* touch , Event* event){};
    eventDispatcher->addEventListenerWithSceneGraphPriority(listener, caiKuangLayer);   //代码为了设置模态窗口

    return true;
}
Esempio n. 8
0
void CLayer::onEnter()
{
    Layer::onEnter();
    log("HelloWorld onEnter");
    
    auto listener = EventListenerKeyboard::create();
    
    listener->onKeyPressed = [](EventKeyboard::KeyCode keyCode, Event* event) {
        log("Key with keycode %d pressed", keyCode);
    };
    
    listener->onKeyReleased = [](EventKeyboard::KeyCode keyCode, Event* event) {
        log("Key with keycode %d released", keyCode);
    };
    
    EventDispatcher* eventDispatcher = Director::getInstance()->getEventDispatcher();
    eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);
}
Esempio n. 9
0
void BaseLayerBuilder::build() {
    this->rootLayer->addChild(uiLayer, 1, BaseLayer::UI_LAYER_TAG);
    EventListenerTouchAllAtOnce* listener = EventListenerTouchAllAtOnce::create();
    listener->setEnabled(true);
    for (std::map<std::string, std::function<void(const std::vector<Touch*>&, Event*)>>::iterator it = this->touchEventHandlerMap.begin(); it != this->touchEventHandlerMap.end(); ++it) {
        if ("touchBegan" == it->first) {
            listener->onTouchesBegan = it->second;
        } else if ("touchMove" == it->first) {
            listener->onTouchesMoved = it->second;
            listener->onTouchesCancelled = it->second;
        } else if ("touchEnd" == it->first) {
            listener->onTouchesEnded = it->second;
        }
    }
    EventDispatcher* dip = Director::getInstance()->getEventDispatcher();
    dip->addEventListenerWithSceneGraphPriority(listener, this->rootLayer);
    return;
}
Esempio n. 10
0
bool  MyScene::init()
{
    if (!Layer::init())
    {
        return false;
    }
    
    auto bg = Sprite::create("HelloWorld.png");
    bg->setPosition(Vec2(480, 320));
    addChild(bg);
    
    bg->setVisible(false);
    /*
    SpriteFrameCache::getInstance()->addSpriteFramesWithFile("a.plist");
    Vector<SpriteFrame *> vec;
    char fileName[10];
    for (int i = 1; i<=10; i++)
    {
        sprintf(fileName, "0%d.png",i);
        SpriteFrame * frame = SpriteFrameCache::getInstance()->getSpriteFrameByName(fileName);
        vec.pushBack(frame);
    }
    Animation * animation = Animation::createWithSpriteFrames(vec);
    animation->setDelayPerUnit(0.1);
    animation->setLoops(1);
    Animate * animate = Animate::create(animation);
    RepeatForever * repeatAction = RepeatForever::create(animate);
    bg->runAction(repeatAction);
    */
    EventDispatcher * dispatcher = Director::getInstance()->getEventDispatcher();
    EventListenerTouchAllAtOnce * listener = EventListenerTouchAllAtOnce::create();
    listener->onTouchesBegan = CC_CALLBACK_2(MyScene::onTouchesBegan, this);
    listener->onTouchesMoved = CC_CALLBACK_2(MyScene::onTouchesMoved, this);
    listener->onTouchesEnded = CC_CALLBACK_2(MyScene::onTouchesEnded, this);
    dispatcher->addEventListenerWithSceneGraphPriority(listener, this);
    
    //EventListenerTouchOneByOne * listener2 = listener->clone();
    //dispatcher->addEventListenerWithSceneGraphPriority(listener2, bg);
    
    return true;
}
Esempio n. 11
0
bool Scene_Title::init()
{
	auto background = CCSprite::create("title/main.png");
	background->setAnchorPoint(ccp(0, 0));
	this->addChild(background, 0);

	EventDispatcher* dispatcher = Director::getInstance()->getEventDispatcher();
	auto* touchListener = EventListenerTouchOneByOne::create();
	touchListener->setSwallowTouches(true);
	touchListener->onTouchBegan = CC_CALLBACK_2(Scene_Title::onTouchBegan, this);
	touchListener->onTouchMoved = CC_CALLBACK_2(Scene_Title::onTouchMoved, this);
	touchListener->onTouchEnded = CC_CALLBACK_2(Scene_Title::onTouchEnded, this);

	dispatcher->addEventListenerWithSceneGraphPriority(touchListener, this);

	CDataManager::getInstance()->LoadPlayerData();

	SimpleAudioEngine::sharedEngine()->playBackgroundMusic("music/title.mp3", true);

	return true;
}
Esempio n. 12
0
bool LogoScene::init()
{
    if ( !Layer::init() )
    {
        return false;
    }
	CocosDenshion::SimpleAudioEngine::sharedEngine()->playBackgroundMusic("sounds/LoadingBG.mp3");

	this->setTouchEnabled(true);
	EventDispatcher* eventDispatcher = Director::getInstance()->getEventDispatcher();
	auto listen = EventListenerTouchOneByOne::create();
	listen->onTouchBegan = CC_CALLBACK_2(LogoScene::onTouchBegan, this);
	eventDispatcher->addEventListenerWithSceneGraphPriority(listen, this);

	auto logo1 = Sprite::create("logos/logo_1.jpg");
	auto logo2 = Sprite::create("logos/logo_2.jpg");
	auto logo3 = Sprite::create("logos/logo_3.jpg");
	auto logo4 = Sprite::create("logos/logo_4.png");
	auto logo5 = Sprite::create("logos/logo_5.jpg");
	vecLogo.pushBack(logo1);
	vecLogo.pushBack(logo2);
	vecLogo.pushBack(logo3);
	vecLogo.pushBack(logo4);
	vecLogo.pushBack(logo5);

	nLogoNum = 0;
	isEndLogo = false;
	isEndAddResource = false;
	visibleSize = Director::getInstance()->getVisibleSize();

	loadingSprite = Sprite::create("logos/loading.png");
	loadingSprite->setPosition(visibleSize / 2);
	addChild(loadingSprite, 1);
	loadingSprite->setVisible(false);

	changeLogo();
	addResource();
    return true;
}
Esempio n. 13
0
// on "init" you need to initialize your instance
bool PuzzleScene::init()
{
    //////////////////////////////
    // 1. super init first
    if ( !Layer::init() )
    {
        return false;
    }
    
    Size visibleSize = Director::getInstance()->getVisibleSize();
    Point origin = Director::getInstance()->getVisibleOrigin();

    /////////////////////////////
    // 2. add a menu item with "X" image, which is clicked to quit the program
    //    you may modify it.

    // add a "close" icon to exit the progress. it's an autorelease object
    auto closeItem = MenuItemImage::create(
                                           "CloseNormal.png",
                                           "CloseSelected.png",
                                           CC_CALLBACK_1(PuzzleScene::menuCloseCallback, this));
    
	closeItem->setPosition(Point(origin.x + visibleSize.width - closeItem->getContentSize().width/2 ,
                                origin.y + closeItem->getContentSize().height/2));

    // create menu, it's an autorelease object
    auto menu = Menu::create(closeItem, NULL);
    menu->setPosition(Point::ZERO);
    this->addChild(menu, 1);

    /////////////////////////////
    // 3. add your codes below...

    // add a label shows "Hello World"
    // create and initialize a label
    
    auto label = LabelTTF::create("Hello World", "Arial", 24);
    
    // position the label on the center of the screen
    label->setPosition(Point(origin.x + visibleSize.width/2,
                            origin.y + visibleSize.height - label->getContentSize().height));

    // add the label as a child to this layer
    this->addChild(label, 1);

    // add "PuzzleScene" splash screen"
    auto sprite = Sprite::create("HelloWorld.png");

    // position the sprite on the center of the screen
    sprite->setPosition(Point(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y));

    // add the sprite as a child to this layer
    this->addChild(sprite, 0);
	
	// タイルエディターで作った画像の作成
	mTMXObject = TMXManager::getInstance()->CreateTMXObject("mapdata/map1.tmx");
	this->addChild(mTMXObject->GetTMXTiledMap(), 0);
	
	this->scheduleUpdate();

	// タッチイベント登録らしい
    EventDispatcher* dispatcher = Director::getInstance()->getEventDispatcher();
    EventListenerTouchOneByOne* listener = EventListenerTouchOneByOne::create();
	listener->onTouchBegan = CC_CALLBACK_2(PuzzleScene::onTouchBegan, this);
	listener->onTouchMoved = CC_CALLBACK_2(PuzzleScene::onTouchMoved, this);
	listener->onTouchEnded = CC_CALLBACK_2(PuzzleScene::onTouchEnded, this);
	listener->onTouchCancelled = CC_CALLBACK_2(PuzzleScene::onTouchCancelled, this);
	dispatcher->addEventListenerWithSceneGraphPriority(listener, this);

	// マルチタッチ。忘れないように書いておくだけ
	//EventDispatcher* dispatcher2 = Director::getInstance()->getEventDispatcher();
    //EventListenerTouchAllAtOnce* listener2 = EventListenerTouchAllAtOnce::create();
    //listener2->onTouchesBegan = CC_CALLBACK_2(PuzzleScene::onTouchesBegan, this);
    //listener2->onTouchesMoved = CC_CALLBACK_2(PuzzleScene::onTouchesMoved, this);
    //listener2->onTouchesCancelled = CC_CALLBACK_2(PuzzleScene::onTouchesCancelled, this);
    //listener2->onTouchesEnded = CC_CALLBACK_2(PuzzleScene::onTouchesEnded, this);

    //dispatcher2->addEventListenerWithSceneGraphPriority(listener2, this);
	SpriteCreator::getInstance()->AddSpriteFrameCache("putobject/sample_texturepacker.plist");
	
	return true;
}
Esempio n. 14
0
bool LobbyScene::init()
{
	if (!Layer::init())
	{
		return false;
	}
    
	Size visibleSize = Director::getInstance()->getVisibleSize();
	Vec2 origin = Director::getInstance()->getVisibleOrigin();
    
    
    myInfoLayer = MyInfoLayer::create();
    myInfoLayer->retain();
    
    myInfoLayer->setAnchorPoint(Vec2(0, 0));
    myInfoLayer->setPosition(Vec2(0, MY_INFO_LAYER_Y));
    
    addChild(myInfoLayer, 0, TAG_MY_INFO_LAYER);
    
    
    menuButtonLayer = MenuButtonLayer::create();
    menuButtonLayer->retain();
    
    menuButtonLayer->setAnchorPoint(Vec2(0,0));
    menuButtonLayer->setPosition(Vec2(0,0));
    
    addChild(menuButtonLayer, 0, TAG_MENU_BUTTON_LAYER);
    
    
    lobbyGameLayer = LobbyGameLayer::create();
    lobbyGameLayer->retain();
    
    lobbyGameLayer->setAnchorPoint(Vec2(0, 0));
    lobbyGameLayer->setPosition(Vec2(0, LOBBY_LAYER_Y));
    
    lobbyChannelLayer = LobbyChannelLayer::create();
    lobbyChannelLayer->retain();
    
    lobbyChannelLayer->setAnchorPoint(Vec2(0, 0));
    lobbyChannelLayer->setPosition(Vec2(0, LOBBY_LAYER_Y));
    
    lobbyFriendLayer = LobbyFriendLayer::create();
    lobbyFriendLayer->retain();
    
    lobbyFriendLayer->setAnchorPoint(Vec2(0, 0));
    lobbyFriendLayer->setPosition(Vec2(0, LOBBY_LAYER_Y));
    
    lobbyClanLayer = LobbyClanLayer::create();
    lobbyClanLayer->retain();
    
    lobbyClanLayer->setAnchorPoint(Vec2(0, 0));
    lobbyClanLayer->setPosition(Vec2(0, LOBBY_LAYER_Y));
    
    lobbyRankingLayer = LobbyRankingLayer::create();
    lobbyRankingLayer->retain();
    
    lobbyRankingLayer->setAnchorPoint(Vec2(0, 0));
    lobbyRankingLayer->setPosition(Vec2(0, LOBBY_LAYER_Y));
    
    lobbyBoardLayer = LobbyBoardLayer::create();
    lobbyBoardLayer->retain();
    
    lobbyBoardLayer->setAnchorPoint(Vec2(0, 0));
    lobbyBoardLayer->setPosition(Vec2(0, LOBBY_LAYER_Y));
    
    
    
    
    
    
    addChild(lobbyGameLayer, 1, TAG_LOBBY_GAME_LAYER);
    
    currentLayer = CURRENT_LAYER_GAME;
    GameClient::GetInstance().currentScene = LOBBY_SCENE_NOW;
    
    
    
//	Size editboxSize = CCSizeMake(500, 70);
//	textBox = EditBox::create(editboxSize, Scale9Sprite::create("typefield_01.png"));
//	textBox->setAnchorPoint(ccp(0, 0));
//	textBox->setPosition(ccp(0, 0));
//	textBox->setFontSize(20);
//	textBox->setFontColor(ccWHITE);
//	textBox->setMaxLength(15);
//	textBox->setPlaceHolder("CHATTING");
//	textBox->setReturnType(EditBox::KeyboardReturnType::DONE);
//	textBox->setInputMode(EditBox::InputMode::ANY);
//	textBox->setDelegate(this);
//	this->addChild(textBox);


//    menuLayer = Layer::create();
//	menuLayer->setContentSize(Size(SCREEN_WIDTH / 4, SCREEN_HEIGHT));
//	menuLayer->setAnchorPoint(Vec2(0, 0));
//	menuLayer->setPosition(0, 0);
//    auto menuLayerbackGroundSprite = Sprite::create("back_ground_01.png");
//    menuLayerbackGroundSprite->setAnchorPoint(Vec2(0, 0));
//    menuLayerbackGroundSprite->setPosition(0, 0);
//    menuLayerbackGroundSprite->setScale((SCREEN_WIDTH / 4) / menuLayerbackGroundSprite->getContentSize().width, SCREEN_HEIGHT / menuLayerbackGroundSprite->getContentSize().height);
//    menuLayer->addChild(menuLayerbackGroundSprite, 0);
//    this->addChild(menuLayer, 100201);
//    
//    userListLayer = UserListLayer::create();
//    userListLayer->setAnchorPoint(Vec2(0, 0));
//    userListLayer->setPosition(Vec2(0, 0));
//    userListLayer->setContentSize(Size(SCREEN_WIDTH / 4, SCREEN_HEIGHT * 2));
//    
//    
//    scrollView = ScrollView::create(Size(SCREEN_WIDTH / 4, SCREEN_HEIGHT), userListLayer);
//    scrollView->retain();
//    scrollView->setBounceable(false);
//    scrollView->setDirection(ScrollView::Direction::VERTICAL);
//    scrollView->setAnchorPoint(Vec2(0, 0));
//    scrollView->setPosition(0, 0);
//    menuLayer->addChild(scrollView, 1);
//    scrollView->setContentOffset(Vec2(0, (-1 * userListLayer->getContentSize().height)), false);

/*
	auto moveChannel = MenuItemImage::create(
		"channel_list.png",
		"channel_list.png",
		CC_CALLBACK_1(LobbyScene::GetChannelList, this));

	moveChannel->setAnchorPoint(ccp(0, 0));
	moveChannel->setPosition(0, 1000);

	auto userList = MenuItemImage::create(
		"user_list.png",
		"user_list.png",
		CC_CALLBACK_1(LobbyScene::GetUserList, this));

	userList->setAnchorPoint(ccp(0, 0));
	userList->setPosition(0, 900);

	auto friendList = MenuItemImage::create(
		"friend_list.png",
		"friend_list.png",
		CC_CALLBACK_1(LobbyScene::GetFriendList, this));

	friendList->setAnchorPoint(ccp(0, 0));
	friendList->setPosition(0, 800);

	auto roomList = MenuItemImage::create(
		"room_list.png",
		"room_list.png",
		CC_CALLBACK_1(LobbyScene::GetRoomList, this));

	roomList->setAnchorPoint(ccp(0, 0));
	roomList->setPosition(0, 700);

	auto requestList = MenuItemImage::create(
		"request_list.png",
		"request_list.png",
		CC_CALLBACK_1(LobbyScene::GetRequestList, this));

	requestList->setAnchorPoint(ccp(0, 0));
	requestList->setPosition(0, 600);

	int reqCount = GameClient::GetInstance().requestInfoCount;
	std::string reqCountStr;
	GameClient::intToString(reqCountStr, reqCount);
	requestCountLabel = LabelTTF::create(reqCountStr, "Arial", 24);
	requestCountLabel->setColor(Color3B(0, 0, 0));
	requestCountLabel->setPosition(500, 650);
	menuLayer->addChild(requestCountLabel, 101);

	Menu* menu1 = Menu::create(moveChannel, userList, friendList, roomList, requestList, NULL);
	menu1->setAnchorPoint(ccp(0, 0));
	menu1->setPosition(ccp(0, 0));
	menuLayer->addChild(menu1, 100, TAG_MENU);


	channelListLayer = ChannelListLayer::create();
	channelListLayer->retain();

	userListLayer = UserListLayer::create();
	userListLayer->retain();

	roomListLayer = RoomListLayer::create();
	roomListLayer->retain();
	RoomInfo roomInfo[3];
	memset(roomInfo, 0, sizeof(roomInfo));
	for (int i = 0; i < 3; i++)
	{
		roomInfo[i].roomNo = i;
		memcpy(roomInfo[i].roomName, "room", sizeof(5));
	}
	roomListLayer->SetRoomList(3, roomInfo);


	requestListLayer = RequestListLayer::create();
	requestListLayer->retain();
	requestListLayer->SetRequestList();

*/
    
    
    
    
    
    EventDispatcher* dispatcher = Director::getInstance()->getEventDispatcher();
    //터치 위치를 알려주는 리스너. 단일 터치.
    //바로 만들어쓰는 식별자는 auto를 사용한다.
    auto positionListener = EventListenerTouchOneByOne::create();
    //zOrder에 따라 밑에 깔린애도 동작할지 아닐지를 결정한다.
    positionListener->setSwallowTouches(true);
    //콜백 함수 대입
    positionListener->onTouchBegan = CC_CALLBACK_2(LobbyScene::onTouchBegan, this);
    //디스패처를 이용해 객체와 리스너를 이어준다. 화면 전체를 터치할 수 있게 만들어야 하므로 객체는 this
    dispatcher->addEventListenerWithSceneGraphPriority(positionListener, this);

    
	return true;
}
Esempio n. 15
0
//层进入的时候会调用该函数,进行物理世界的碰撞检测
void FirstBossScene::onEnter()
{
	Layer::onEnter();
	Size visibleSize = Director::getInstance()->getVisibleSize();
	Vec2 origin = Director::getInstance()->getVisibleOrigin();

	auto listener = EventListenerPhysicsContact::create();

	listener->onContactBegin = [=](PhysicsContact& contact)
	{


		auto spriteA = (Sprite *)contact.getShapeA()->getBody()->getNode();
		auto spriteB = (Sprite *)contact.getShapeB()->getBody()->getNode();
		int tag1 = spriteA->getTag();
		int tag2 = spriteB->getTag();
		Vec2 vec1 = spriteA->getPosition();
		Vec2 vec2 = spriteB->getPosition();

		//当人物和不可碰撞鱼碰撞后
		if (tag1 + tag2 == 206 || tag1 + tag2 == 110) {
			blood_for_man--;

			if (blood_for_man < 0) {
				gameOver();
			}

			auto scoreSpire = (Label *)this->getChildByTag(100);
			scoreSpire->setString(String::createWithFormat("HP:%d", blood_for_man)->_string);

			auto * system = ParticleSystemQuad::create("particle_texture.plist");
			if (tag1 == 104) {
				system->setPosition(vec1);
				this->addChild(system);
				spriteA->removeFromParent();
			}
			else {
				system->setPosition(vec2);
				this->addChild(system);
				spriteB->removeFromParent();
			}
		}
		else if (tag1 + tag2 == 207 || tag1 + tag2 == 111) {//当人物和可碰撞鱼碰撞后
			Magic += 3;

			auto * system = ParticleSystemQuad::create("particle_texture.plist");
			if (tag1 == 105) {
				system->setPosition(vec1);
				this->addChild(system);
				spriteA->removeFromParent();
			}
			else {
				system->setPosition(vec2);
				this->addChild(system);
				spriteB->removeFromParent();
			}

			if (getTypeSkill() == 3) {
				manscale = manscale * 0.9;
				speed_for_man++;
				if (manscale < 0.4) {
					manscale = 0.4;
				}
				if (speed_for_man > 10) {
					speed_for_man = 10;
				}
				man->setScale(manscale);
			}
		}
		else if (tag1 + tag2 == 112) {//当Boss被武器一击中时
			blood_for_boss -= weapon_eff;

			auto * system = ParticleSystemQuad::create("particle_texture.plist");
			if (tag1 == 1) {
				system->setPosition(vec1);
				this->addChild(system);
				spriteA->removeFromParent();
			}
			else {
				system->setPosition(vec2);
				this->addChild(system);
				spriteB->removeFromParent();
			}
			// 发出音效
			SimpleAudioEngine::getInstance()->playEffect("music/boom.mp3");

			//更新boss的血量
			auto scoreSpire = (Label *)this->getChildByTag(121);
			scoreSpire->setString(String::createWithFormat("HP:%d", blood_for_boss)->_string);

			if (blood_for_boss <= 0) {
				//这里要有Bosss死亡的特效
				win();
			}
		}
		else if (tag1 + tag2 == 113) {//当Boss被武器二击中时
			blood_for_boss --;

			auto * system = ParticleSystemQuad::create("particle_texture.plist");
			if (tag1 == 2) {
				system->setPosition(vec1);
				this->addChild(system);
				spriteA->removeFromParent();
			}
			else {
				system->setPosition(vec2);
				this->addChild(system);
				spriteB->removeFromParent();
			}
			//更新boss的血量
			auto scoreSpire = (Label *)this->getChildByTag(121);
			scoreSpire->setString(String::createWithFormat("HP:%d", blood_for_boss)->_string);

			if (blood_for_boss <= 0) {
				//这里要有Bosss死亡的特效
				win();
			}
		}

		return true;
	};

	//注册监听器
	EventDispatcher * eventDispatcher = Director::getInstance()->getEventDispatcher();
	eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);
}
Esempio n. 16
0
bool IdleLayer::init() {
    if(!LayerColor::init()) {
        return false;
    }
    
    Director* director = Director::getInstance();
    Vec2 visibleOrigin = director->getVisibleOrigin();
    Size visibleSize = director->getVisibleSize();
    
    setContentSize(visibleSize);
    
    GameLayer* gameLayer = GameLayer::create(IDLE);
    gameLayer->getUiLayer()->setVisible(false);
    addChild(gameLayer);
    
//    gameLayer->setColor(Color3B::RED);
    
    Widget* idleForeground = GUIReader::getInstance()->widgetFromJsonFile("ui/connect/idle_foreground.json");
    Node* background = idleForeground->getChildByName("background");
    background->setContentSize(visibleSize);
    
    Text* touchToStart = dynamic_cast<Text*>(idleForeground->getChildByName("touchToStart"));
    touchToStart->setString(LANG->getLang("touch_to_start"));
    touchToStart->setPosition(Vec2(visibleSize.width/2, visibleSize.height/2));
    touchToStart->runAction(RepeatForever::create(Blink::create(1, 1)));

    addChild(idleForeground);
    
    EventDispatcher* eventDispatcher = director->getEventDispatcher();
    
    EventListenerTouchOneByOne* eventListener = EventListenerTouchOneByOne::create();
    eventListener->setSwallowTouches(true);
    eventListener->onTouchEnded = [=](Touch* touch, Event* event){
        auto scene = MainMenuLayer::createScene();
        director->replaceScene(scene);
    };
    eventListener->onTouchBegan = [](Touch* touch, Event* event){
        return true;
    };
    
    eventDispatcher->addEventListenerWithSceneGraphPriority(eventListener, touchToStart);
    
    CallFunc* connectAction = CallFunc::create([=](){
        auto game = gameLayer->getGame();
        if (!game->isEmpty() && gameLayer->getAcceptInput()) {
            auto path = game->getRandomPath();
            if(path) {
                auto front = path->getPath().front();
                auto back = path->getPath().back();
                gameLayer->doConnect(front->getX(), front->getY(), back->getX(), back->getY());
            }

        }
    });
    
    CallFunc* shuffleAction = CallFunc::create([=](){
        auto game = gameLayer->getGame();
        if (!game->isEmpty()) {
            if (rand()%10 == 0) {
                gameLayer->doShuffle();
            }
        }
    });
    
    runAction(RepeatForever::create(Sequence::create(DelayTime::create(1.5), connectAction, shuffleAction, NULL)));
    
    return true;
}
Esempio n. 17
0
bool GameUILayer::init()
{
	CCLayer::init();
	waitInitUIQueue.push(UI_ZORDER_INIT);
	waitInitUIQueue.push(UI_ZORDER_ROLE_HEAD);
	waitInitUIQueue.push(UI_ZORDER_NPC_DIALOG);
	waitInitUIQueue.push(UI_ZORDER_TASK_DIALOG);
	//初始化面板关系
	int panelIdx[] = {UI_ZORDER_ROLE,UI_ZORDER_SOCIETY,UI_ZORDER_MYTEAM,UI_ZORDER_BACKPACK,UI_ZORDER_SMALLMAP,UI_ZORDER_PET,\
		UI_ZORDER_REFINE,UI_ZORDER_GUILD,UI_ZORDER_SETTING,UI_ZORDER_AUTOGAME,UI_ZORDER_GOALS,UI_ZORDER_MOLD,UI_ZORDER_REBORN,\
		UI_ZORDER_SHOPPANEL,UI_ZORDER_MAIL_PANEL,/*UI_ZORDER_INSTANCETIP*/UI_ZORDER_TASK_PANEL,UI_ZORDER_CHAT,UI_ZORDER_SKILL,\
		UI_ZORDER_STALL_PANEL,UI_ZORDER_PRAY_PANEL,UI_ZORDER_ACTIVITY,UI_ZORDER_RANK_PANEL,UI_ZORDER_DANMEDICINE_PANEL,UI_ZORDER_BATTLE_FIELD,\
		UI_ZORDER_OFFLINE_EXP_PANEL,UI_ZORDER_TASK_DIALOG,UI_ZORDER_MOUNT};
	int counter = sizeof(panelIdx)/sizeof(panelIdx[0]);
	char relation[sizeof(panelIdx)/sizeof(panelIdx[0])][sizeof(panelIdx)/sizeof(panelIdx[0])] = {//0:自己,1:互斥,2:共存
		{0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
		{1,0,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
		{1,2,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
		{1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
		{1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
		{1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
		{1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
		{1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
		{1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
		{1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
		{1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
		{1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
		{1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
		{1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1},
		{1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1},
		{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1},
		{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1},
		{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1},
		{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1},
		{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1},
		{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1},
		{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1},
		{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1},
		{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1},
		{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1},
		{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1},
		{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0}
	};
	for (int i=0;i<counter;i++)
	{
		std::map<int, char> relationDic;
		for (int j=0;j<counter;j++)
		{
			relationDic.insert(std::map<int,char>::value_type(panelIdx[j], relation[i][j]));
		}
		relationshipBetweenPanel.insert(std::map<int, std::map<int,char> >::value_type(panelIdx[i], relationDic));
	}
	GameGobal::getInstance().getLoadingLayer()->addTotalSize(waitInitUIQueue.size());
	this->setTouchEnabled(true);
	this->setTouchMode(Touch::DispatchMode::ONE_BY_ONE); 
	EventDispatcher* eventDispatcher = Director::getInstance()->getEventDispatcher();
	auto oneTouch = EventListenerTouchOneByOne::create();  
	oneTouch->onTouchBegan = CC_CALLBACK_2(GameUILayer::onTouchBegan,this);  
	oneTouch->onTouchMoved = CC_CALLBACK_2(GameUILayer::onTouchMoved,this);  
	oneTouch->onTouchEnded = CC_CALLBACK_2(GameUILayer::onTouchEnded,this);  
	oneTouch->onTouchCancelled = CC_CALLBACK_2(GameUILayer::onTouchCancelled,this); 
	oneTouch->setSwallowTouches(true);//不向下传递触摸
	eventDispatcher->addEventListenerWithSceneGraphPriority(oneTouch,this); 
	 
	return true;
}
Esempio n. 18
0
bool WelComeLayer::init(){

    if (!Layer::init()) {
        return false;
    }
    auto visibleSize = Director::getInstance()->getVisibleSize();
    auto origin = Director::getInstance()->getVisibleOrigin();
    
    background = ImgLoader::getInstance()->getSpriteFramesByName("deepocean_background_strip.png");
    background->setPosition(visibleSize.width/2 + origin.x,visibleSize.height/2 + origin.y);
    background->setScale(visibleSize.width/background->getContentSize().width, visibleSize.height/background->getContentSize().height);
    this->addChild(background,0);
    
    Sprite * wreckboard = ImgLoader::getInstance()->getSpriteFramesByName("deepocean_background_wreck1.png");
    wreckboard->setPosition(wreckboard->getContentSize().width/4 + visibleSize.width/2,visibleSize.height/2 + origin.y);
    wreckboard->setScale(1.5, visibleSize.height/wreckboard->getContentSize().height);
    this->addChild(wreckboard,1);
    
    shinei = ImgLoader::getInstance()->getSpriteFramesByName("mainMenuBackground.png");
    shinei->setPosition(visibleSize.width/2,visibleSize.height/2);
    shinei->setScale(visibleSize.width/shinei->getContentSize().width, visibleSize.height/shinei->getContentSize().height);
    this->addChild(shinei,3);
    
    Sprite * labellogo = ImgLoader::getInstance()->getSpriteFramesByName("submarine_logo1.png");
    labellogo->setPosition(shinei->getContentSize().width/9, visibleSize.height/2 + origin.y);
    labellogo->setScale(visibleSize.width/shinei->getContentSize().width , visibleSize.height/shinei->getContentSize().height);
    this->addChild(labellogo,2);
    
    this->sand = Sprite::createWithSpriteFrameName("deepocean_foreground_sand1.png");
    this->sand->setPosition(this->sand->getContentSize().width-10.0f,origin.y + this->sand->getContentSize().height/2);
    this->addChild(this->sand,2);
    
    Sprite * scoreboard = ImgLoader::getInstance()->getSpriteFramesByName("menu_best.png");
    scoreboard->setPosition(visibleSize.width/2-scoreboard->getContentSize().width/2,150);
    this->addChild(scoreboard,4);

    this->plane = ImgLoader::getInstance()->getSpriteFramesByName("submarine_mockup_sub.png");
    this->plane->setRotation(-10);
    ActionInterval * up = MoveBy::create(0.4f, Point(0,8));
    ActionInterval * upBack = up->reverse();
    Action *swingAction = RepeatForever::create(Sequence::create(up,upBack, NULL));
    this->plane->runAction(swingAction);
    this->plane->setPosition(Point(origin.x +this->plane->getContentSize().width/2 , origin.y + 100));
    this->addChild(this->plane,5);
    
    this->labelStart = Label::createWithTTF("click here to start", "fonts/Marker Felt.ttf", 25);
    this->labelStart->setPosition(visibleSize.width/2,visibleSize.height/2);
    ActionInterval *scale = ScaleTo::create(2, 2.5);
    ActionInterval *scaleback = ScaleTo::create(2, 1.5);
    Action * action = RepeatForever::create(Sequence::create(scale,scaleback,NULL));
    this->labelStart->runAction(action);
    this->addChild(this->labelStart,6);
    
    //this->setTouchEnabled(true);
    EventDispatcher* eventDispatcher = Director::getInstance()->getEventDispatcher();
    listener= EventListenerTouchOneByOne::create();
    //listener->setSwallowTouches(true);
    listener->onTouchBegan = CC_CALLBACK_2(WelComeLayer::CheckTouchLabelStart,this);
    eventDispatcher->addEventListenerWithSceneGraphPriority(listener,this);
    
    return true;
}
Esempio n. 19
0
void GamePlayLayer::onEnter()
{
    Layer::onEnter();

    Size visibleSize = Director::getInstance()->getVisibleSize();

    //初始化暂停按钮.
    auto pauseSprite = Sprite::createWithSpriteFrameName("gameplay.button.pause.png");
    auto pauseMenuItem = MenuItemSprite::create(pauseSprite, pauseSprite,
                         CC_CALLBACK_1(GamePlayLayer::menuPauseCallback, this));
    auto pauseMenu = Menu::create(pauseMenuItem, NULL);
    pauseMenu->setPosition(Vec2(30, visibleSize.height - 28));
    this->addChild(pauseMenu,20,999);

    //添加陨石1.
    auto stone1 = Enemy::createWithEnemyTypes(EnemyTypeStone);
    stone1->setVelocity(Vec2(0, -100));
    this->addChild(stone1, 10 , GameSceneNodeBatchTagEnemy);

    //添加行星.
    auto planet = Enemy::createWithEnemyTypes(EnemyTypePlanet);
    planet->setVelocity(Vec2(0, -50));
    this->addChild(planet, 10 , GameSceneNodeBatchTagEnemy);

    //添加敌机1.
    auto enemyFighter1 = Enemy::createWithEnemyTypes(EnemyTypeEnemy1);
    enemyFighter1->setVelocity(Vec2(0, -80));
    this->addChild(enemyFighter1, 10 , GameSceneNodeBatchTagEnemy);

    //添加敌机2.
    auto enemyFighter2 = Enemy::createWithEnemyTypes(EnemyTypeEnemy2);
    enemyFighter2->setVelocity(Vec2(0, -100));
    this->addChild(enemyFighter2, 10 , GameSceneNodeBatchTagEnemy);

    //玩家的飞机.
    this->fighter = Fighter::createWithSpriteFrameName("gameplay.fighter.png");
    this->fighter->setHitPoints(5);
    this->fighter->setPosition(Vec2(visibleSize.width / 2, 70));
    this->addChild(this->fighter, 10, GameSceneNodeTagFighter);

    //注册 触摸飞机事件监听器
    touchFighterlistener = EventListenerTouchOneByOne::create();
    touchFighterlistener->setSwallowTouches(true);

    //移动飞机.
    touchFighterlistener->onTouchBegan = [](Touch* touch, Event* event) {
        return true;
    };

    touchFighterlistener->onTouchMoved = [](Touch* touch, Event* event) {
        auto target = event->getCurrentTarget();
        target->setPosition(target->getPosition() + touch->getDelta());
    };

    // 添加 触摸飞机事件监听器
    EventDispatcher* eventDispatcher = Director::getInstance()->getEventDispatcher();
    eventDispatcher->addEventListenerWithSceneGraphPriority(touchFighterlistener, this->fighter);

    //注册 碰撞事件监听器
    contactListener = EventListenerPhysicsContact::create();
    contactListener->onContactBegin = [this](PhysicsContact& contact)
    {
        auto spriteA = contact.getShapeA()->getBody()->getNode();
        auto spriteB = contact.getShapeB()->getBody()->getNode();
        Node* enemy1 = nullptr;

        ////////////////////////////检测 飞机与敌人的碰撞 start//////////////////////////////////
        log("A = %d  ------------ B = %d", spriteA->getTag(), spriteB->getTag());
        if (spriteA->getTag() == GameSceneNodeTagFighter && spriteB->getTag() == GameSceneNodeBatchTagEnemy)
        {
            enemy1 = spriteB;
        }
        if (spriteA->getTag() == GameSceneNodeBatchTagEnemy && spriteB->getTag() == GameSceneNodeTagFighter)
        {
            enemy1 = spriteA;
        }
        if (enemy1 != nullptr) {//发生碰撞
            this->handleFighterCollidingWithEnemy((Enemy*)enemy1);
            return false;
        }
        /////////////////////////检测 飞机与敌人的碰撞 end/////////////////////////////////////

        ////////////////////////////检测 炮弹与敌人的碰撞 start////////////////////////////////
        Node* enemy2 = nullptr;

        if (spriteA->getTag() == GameSceneNodeBatchTagBullet &&
                spriteB->getTag() == GameSceneNodeBatchTagEnemy)
        {
            //不可见的炮弹不发生碰撞
            if (!spriteA->isVisible())
                return false;
            //使得炮弹消失
            spriteA->setVisible(false);
            enemy2 = spriteB;
        }
        if (spriteA->getTag() == GameSceneNodeBatchTagEnemy
                && spriteB->getTag() == GameSceneNodeBatchTagBullet)
        {
            //不可见的炮弹不发生碰撞
            if (!spriteB->isVisible())
                return false;
            //使得炮弹消失
            spriteB->setVisible(false);
            enemy2 = spriteA;
        }
        if (enemy2 != nullptr) {//发生碰撞

            this->handleBulletCollidingWithEnemy((Enemy*)enemy2);
            return false;
        }
        /////////////////////////检测 炮弹与敌人的碰撞 end/////////////////////////////////////

        return false;
    };


    eventDispatcher->addEventListenerWithFixedPriority(contactListener,1);

    //每0.2s 调用shootBullet函数发射1发炮弹.
    this->schedule(schedule_selector(GamePlayLayer::shootBullet), 0.2f);

    this->score = 0;
    this->scorePlaceholder = 0;

    //在状态栏中设置玩家的生命值
    this->updateStatusBarFighter();
    //在状态栏中显示得分
    this->updateStatusBarScore();
}
Esempio n. 20
0
bool GameScene::init(bool _clickRed) {
	if (!Layer::init()){
		return false;
	}
	this->aiPlayer = new AIPlayer(this);

	clickRed = _clickRed;
	Size visibleSize = Director::getInstance()->getVisibleSize();
	Vec2 origin = Director::getInstance()->getVisibleOrigin();
	auto closeItem = MenuItemImage::create(
		"CloseNormal.png",
		"CloseSelected.png",
		CC_CALLBACK_1(GameScene::menuCloseCallback, this));
	closeItem->setPosition(Vec2(origin.x + visibleSize.width - closeItem->getContentSize().width / 2,
		origin.y + closeItem->getContentSize().height / 2));

	MenuItemImage* backMenu = MenuItemImage::create("res/regret.png", "res/regret_selected.png", CC_CALLBACK_1(GameScene::backQIMenuCallback, this));
	backMenu->setPosition(Vec2(visibleSize.width - 200, visibleSize.height / 2 - 100));

	MenuItemImage* newGameMenu = MenuItemImage::create("res/new.png", "res/new_selected.png", CC_CALLBACK_1(GameScene::newGameMenuCallback, this));
	newGameMenu->setPosition(Vec2(visibleSize.width - 200, visibleSize.height / 2));

	auto menu = Menu::create(closeItem, backMenu, newGameMenu, NULL);
	menu->setPosition(Vec2::ZERO);
	this->addChild(menu, 1);
	/*
	auto label = Label::createWithTTF(getStringByKey("GuideStart"), "fonts/fangzheng.ttf", 24);
	label->setPosition(Vec2(origin.x + visibleSize.width/2,
	origin.y + visibleSize.height - label->getContentSize().height));
	this->addChild(label, 1);
	*/

	Vec2 offset = Vec2(20.0, 10.0);
	auto floor = Sprite::create("res/floor.png");
	floor->setPosition(Vec2(visibleSize.width / 2 + origin.x, visibleSize.height / 2 + origin.y));
	floor->setScaleX(visibleSize.width / floor->getContentSize().width);
	floor->setScaleY(visibleSize.height / floor->getContentSize().height);
	this->addChild(floor);

	Sprite* qipan = Sprite::create("res/background.png");
	qipan->setAnchorPoint(Vec2::ZERO);
	qipan->setPosition(offset);
	qipan->setScale((visibleSize.height - offset.y * 2) / qipan->getContentSize().height);
	this->addChild(qipan);
	// 给棋盘添加touch监听
	EventListenerTouchOneByOne *touchListener = EventListenerTouchOneByOne::create();
	touchListener->onTouchBegan = CC_CALLBACK_2(GameScene::onTouchesBegan, this);
	touchListener->onTouchCancelled = CC_CALLBACK_2(GameScene::onTouchCancelled, this);
	touchListener->onTouchEnded = CC_CALLBACK_2(GameScene::onTouchEnded, this);
	touchListener->onTouchMoved = CC_CALLBACK_2(GameScene::onTouchMoved, this);
	EventDispatcher* eventDispatcher = Director::getInstance()->getEventDispatcher();
	eventDispatcher->addEventListenerWithSceneGraphPriority(touchListener->clone(), qipan);

	for (int i = 0; i < 32; i++){
		sts[i] = Stone::create(i, clickRed);
		sts[i]->setPosition(Vec2(rand_0_1()*visibleSize.width, rand_0_1()*visibleSize.height));
		MoveTo* moveTo = MoveTo::create(0.6f, Vec2(sts[i]->getRealX(), sts[i]->getRealY()));
		//MoveTo* moveTo = MoveTo::create(0.6f, Vec2(stone_x + sts[i]->getX()*def, stone_y + sts[i]->getY()*def));
		//sts[i]->setPosition(Vec2(stone_x + sts[i]->getX()*def, stone_y + sts[i]->getY()*def));
		sts[i]->runAction(moveTo);
		this->addChild(sts[i]);
	}

	spriteSelected = Sprite::create("res/selected.png");
	spriteSelected->setVisible(false);
	addChild(spriteSelected, 10);
	select_id = -1;
	//level = 1;
	isRedTurn = true;
	steps = Array::create();
	steps->retain();

	scheduleOnce(CC_SCHEDULE_SELECTOR(GameScene::updateAutoGo), 1.0f);
	return true;
}
Esempio n. 21
0
bool GameOverLayer::init()
{
    //////////////////////////////
    // 1. super init first
    if ( !Layer::init() )
    {
        return false;
    }
    
    Size visibleSize = Director::getInstance()->getVisibleSize();
    //bg
    auto bg = TMXTiledMap::create("map/blue_bg.tmx");
    this->addChild(bg);
    
    //eff
    ParticleSystem *ps = ParticleSystemQuad::create("particle/light.plist");
    ps->setPosition(Vec2(visibleSize.width, visibleSize.height - 200) / 2);
    this->addChild(ps);
    
    auto top = Sprite::createWithSpriteFrameName("gameover.top.png");
    //top
    top->setAnchorPoint(Vec2(0,0));
    top->setPosition(Vec2(0, visibleSize.height - top->getContentSize().height));
    this->addChild(top);
    
    UserDefault *defaults = UserDefault::getInstance();
    int highScore = defaults->getIntegerForKey(HIGHSCORE_KEY);
    if (highScore < score) {
        highScore = score;
        defaults->setIntegerForKey(HIGHSCORE_KEY,highScore);
    }
    __String *text = __String::createWithFormat("%i points", highScore);
    auto lblHighScore = Label::createWithTTF(HellcUtils::getUTF8Char("lblHighScore"), "fonts/hanyi.ttf", 25);
    lblHighScore->setAnchorPoint(Vec2(0,0));
    lblHighScore->setPosition(Vec2(60, top->getPosition().y - 30));
    addChild(lblHighScore);
    
    auto lblScore = Label::createWithTTF(text->getCString(), "fonts/hanyi.ttf", 24);
    lblScore->setColor(Color3B(75,255,255));
    lblScore->setAnchorPoint(Vec2(0,0));
    lblScore->setPosition(lblHighScore->getPosition() - Vec2(0, 40));
    addChild(lblScore);
    
    auto text2 = Label::createWithTTF("Tap the Screen to Play", "fonts/hanyi.ttf", 24);
    text2->setAnchorPoint(Vec2(0,0));
    text2->setPosition(lblScore->getPosition() - Vec2(10, 45));
    addChild(text2);
    
    //touch
    auto listener = EventListenerTouchOneByOne::create();
    listener->setSwallowTouches(true);
    
    listener->onTouchBegan = [](Touch* touch, Event* event){
        Director::getInstance()->popScene();
        if (UserDefault::getInstance()->getBoolForKey(SOUND_KEY)) {
            SimpleAudioEngine::getInstance()->playEffect(sound_1);
        }
        return false;
    };
    
    //touch
    EventDispatcher* eventDispatcher = Director::getInstance()->getEventDispatcher();
    eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);
    
    return true;
}