示例#1
0
///Referencing previous location results in garbage values
///Use only for hover
void HelloWorld::onMouseMove(Event* event)
{
#ifdef MOUSE_DOUBLE_LISTEN_FUDGE
    mouseMoveFudge = !mouseMoveFudge;
    if(!mouseMoveFudge)
        return;
#endif
    EventMouse* e = (EventMouse*)event;
    lastCursor.x = e->getCursorX();
    lastCursor.y = e->getCursorY();
    repaintCursor();
    Protractor* p = (Protractor*)protractor;
    p->setCursorAngle(StaticHelpers::headingAngle(lastCursor - Director::getInstance()->getVisibleSize()/2));

    if(isMouseDown[0])
    {//LMB drag

    }
    if(isMouseDown[1])
    {//RMB drag

    }
    if(isMouseDown[2])
    {//MMB drag

    }

    std::stringstream ss;
    ss << "MousePosition X:";
    ss << e->getCursorX() << " Y:" << e->getCursorY();
}
示例#2
0
void MouseTest::onMouseUp(Event *event)
{
    EventMouse* e = (EventMouse*)event;
    std::string str = "Mouse Up detected, Key: ";
    str += tostr(e->getMouseButton());
    _labelAction->setString(str.c_str());
}
示例#3
0
void HelloWorld::onMouseDown(Event* event)
{
#ifdef MOUSE_DOUBLE_LISTEN_FUDGE
    mouseDownFudge = !mouseDownFudge;
    if(!mouseDownFudge)
        return;
#endif
    EventMouse* e = (EventMouse*)event;
    isMouseDown[e->getMouseButton()] = true;
    std::stringstream ss;
    ss << "Mouse Down ";
    ss << e->getMouseButton();

    if(e->getMouseButton() == 1)
    {
        if(!getChildByName("animtest"))
        {
            auto s = new O3Sprite("", true);
            addSprite(s);
            s->addAnimation("idle", "animtest", 9, 12);
            s->setAnimation("idle");
            s->playAnimation();
            s->setName("animtest");
        }
        else
        {
            removeChildByName("animtest");
        }
    }
}
示例#4
0
void MouseTest::onMouseMove(Event *event)
{
    EventMouse* e = (EventMouse*)event;
    std::string str = "MousePosition X:";
    str = str + tostr(e->getCursorX()) + " Y:" + tostr(e->getCursorY());
    _labelPosition->setString(str.c_str());
}
示例#5
0
void HelloWorld::testMouseEvent()
{
	auto listener = EventListenerMouse::create();

	listener->onMouseDown = [&](Event* event){
		log("onMouseDown");
	};

	listener->onMouseMove = [&](Event* event){
		log("onMouseMove");
		EventMouse* e = (EventMouse*)event;
		touch_pos = e->getLocation();
		streak->setPosition(touch_pos);
	};

	listener->onMouseUp = [&](Event* event){
		log("onMouseUp");
	};

	listener->onMouseScroll = [&](Event* event){
		log("onMouseScroll");
	};

	dispatcher->addEventListenerWithSceneGraphPriority(listener, this);
}
示例#6
0
void LCBattleScene::onMouseUp(Event *event)
{
    EventMouse* e = (EventMouse*)event;
    //world->setGravity(Point(0 ,-98));
    //world->setSpeed(1);
//    Vect vct = world->getGravity();
//    float speed = world->getSpeed();
    // right clicked move hero
    if(e->getMouseButton() == 1) {
        // retain screen double length
        //Point pos = CCDirector::getInstance()->convertToGL(Point(e->getCursorX(), e->getCursorY()));//glLocation, origin(0,0)
        //pos.y = CCDirector::getInstance()->getWinSize().height - pos.y / 2;
        //CCLOG("%f %f", pos.x, pos.y);

        //Point origin = hero->getrootObj()->getPosition();

        //CCLOG("%f %f", origin.x, origin.y);

        //Point convertedToNodeLocation = backGround->convertToNodeSpace(pos);

        //Point p = getPointInMap();
        hero->actionWalk(this, backGround->convertToNodeSpace(Point(e->getCursorX(), e->getCursorY())));
    } else if(e->getMouseButton() == 0) {
        hero->actionAttack();
    }
}
示例#7
0
void Tower::onMouseUp(cocos2d::Event* _event)
{
    if(_isClosing == true || _returnFromSave == true)
    {
        _returnFromSave = false;
        return;// if we are pressing the close button, we dont want to build things!
    }
    
	EventMouse* e = (EventMouse*)_event;

	if(_isMovingToolPanal == true)
	{
		_isMovingToolPanal = false;

		return; //if we are moving a window, we dont want to build things!
	}

	if(_isBuildingFloor == true)
	{
		_isBuildingFloor = false;
	}

	float mPPY = e->getCursorY()+_mouseYOffset;
	float mPPX = e->getCursorX();
    
    this->createStructure(Vec2(mPPX,mPPY));
    
}
示例#8
0
void Tower::onMouseDown(cocos2d::Event* _event)
{
    if(_isClosing == true || _returnFromSave == true)
        return;// if we are pressing the close button, we dont want to build things!
    
	EventMouse* e = (EventMouse*)_event;

	Vec2 tPP = _toolPanalLayer->getPosition();
	float mPPY = e->getCursorY();
	float mPPX = e->getCursorX();

	mPPY=mPPY+_mouseYOffset;

	if(mPPY < tPP.y + TOOLPANAL_HEIGHT+2 && mPPY > tPP.y-2)
		if(mPPX > tPP.x -2 && mPPX < tPP.x + TOOLPANAL_WIDTH+2){
			_isMovingToolPanal = true;
			
			_windowOffsetX = mPPX - tPP.x;
			_windowOffsetY = mPPY - tPP.y;
			return;
		}

	if(_currentStructure == OT::OTFLOOR)
	{
		_isBuildingFloor = true;//have to handle differently from other structures
	}
}
void InputManager::getInput()
{
	int c = getch();

	if (c != ERR)
	{
		MEVENT m_event;
		if ((c == KEY_MOUSE) && (getmouse(&m_event) != ERR))
		{
			if (m_event.bstate & BUTTON1_CLICKED)
			{
				int y = m_event.y;
				int x = m_event.x;

				EventMouse m;

				m.setMouseY(y);
				m.setMouseX(x);
				m.setMouseAction(LEFT_BUTTON_CLICK);

				onEvent((Event*) &m);
			}

		}
		else
		{

			EventKeyboard k;
			k.setKey(c);

			onEvent((Event*) &k);
		}
	}
}
示例#10
0
void MouseTest::onMouseScroll(Event *event)
{
    EventMouse* e = (EventMouse*)event;
    std::string str = "Mouse Scroll detected, X: ";
    str = str + tostr(e->getScrollX()) + " Y: " + tostr(e->getScrollY());
    _labelAction->setString(str.c_str());
}
// on "init" you need to initialize your instance
bool HelloWorld::init()
{
    if ( !Layer::init() )
    {
        return false;
    }
	FileUtils::getInstance()->addSearchPath("../QtCocos2d/Resources");
	FileUtils::getInstance()->addSearchResolutionsOrder("resource-auto");
	Director::getInstance()->setContentScaleFactor(2.0f);
	Director::getInstance()->setAnimationInterval(FLT_MIN);

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


	auto centerNode = Node::create();
	centerNode->setAnchorPoint(Point::ANCHOR_MIDDLE);
//	centerNode->setContentSize(visibleSize);
	centerNode->setPosition(origin + visibleSize/2);
	this->addChild(centerNode);

	auto frame = Sprite::create("system/frame_iphone4.png");
	frame->setAnchorPoint(Point::ANCHOR_MIDDLE);
	centerNode->addChild(frame);

	auto worldPos = centerNode->convertToWorldSpace(frame->getPosition());
	qDebug() << worldPos.x << "," << worldPos.y;

	auto listener = EventListenerMouse::create();
	listener->onMouseScroll = [this, frame](Event* event){
		EventMouse *e = dynamic_cast<EventMouse *>(event);
		if (NULL != e)
		{
			float scrollY = e->getScrollY();
			frame->setScale(scrollY / 10.0f + frame->getScale());
		}
	};
	_eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);

	auto baseNode = Node::create();
	baseNode->setContentSize(Size(480, 320));
	baseNode->setPosition(baseNode->getContentSize() / -2 + frame->getContentSize()/2);
	frame->addChild(baseNode);
	worldPos = frame->convertToWorldSpace(baseNode->getPosition());
	qDebug() << worldPos.x << "," << worldPos.y;
	/*
	ControlButton * button = ControlButton::create();
	button->setTitleLabelForState(Label::createWithSystemFont("aaa", "MS Gothic", 12), Control::State::NORMAL);
	baseNode->addChild(button);
	*/
	_metaInfo = InterfaceLoader::getInstance().loadJSon("interface/scene/scenetest.json");
	if (_metaInfo)
	{
		_metaInfo->retain();
		baseNode->addChild(_metaInfo->getBaseNode());
	}
	    
    return true;
}
示例#12
0
void GameMenu::OnMouseMove(Event *event)
{
	EventMouse *e = (EventMouse*)event;

	int x = e->getCursorX();
	int y = e->getCursorY();

<<<<<<< HEAD
示例#13
0
void HelloWorld::onMouseMove(Event* event) {
	EventMouse* e = (EventMouse*)event;
	CCPoint mousePosition = CCPoint(e->getCursorX(), e->getCursorY() + 640);

	auto block1 = startMenuItem->getBoundingBox();
	if (block1.containsPoint(mousePosition)) largerItem(startMenuItem, 1);
	else largerItem(NULL, 0);
}
示例#14
0
void GameLayer::onMouseMove(cocos2d::Event* event)
{
	EventMouse* e = (EventMouse*)event;

	auto p = Vec2(e->getCursorX(), e->getCursorY());

	auto pPlayer = dynamic_cast<LeadingMan*>(this->getChildByTag(kTagPlayer));

}
示例#15
0
void Tower::onMouseScroll(cocos2d::Event* _event)
{
    if(_isClosing == true || _returnFromSave == true)
        return;// if we are pressing the close button, we dont want to build things!
    
	EventMouse* e = (EventMouse*)_event;

	_towerLayer->runAction(MoveBy::create(1/SCROLL_SPEED ,Vec2((-1*e->getScrollX())*SCROLL_MULTIPLIER, e->getScrollY()*SCROLL_MULTIPLIER)));
}
示例#16
0
void BaseScene::onMouseDown(Event* event){
	cocos2d::log("down");	
	EventMouse * e = (EventMouse*)event;
	if(e->getMouseButton() == 0) cocos2d::log("left mouse");
	else if(e->getMouseButton() == 1) cocos2d::log("right mouse");
	else if(e->getMouseButton() == 2) cocos2d::log("middle mouse");

	/* 都是获取当前点坐标,但e->getDelta()左上角是原点,y轴向下;
	/* e->getCursorX(), e->getCursorY()左上角是原点,y轴向上  */
}
示例#17
0
void HelloWorld::onMouseUp(Event* event)
{
#ifdef MOUSE_DOUBLE_LISTEN_FUDGE
    mouseUpFudge = !mouseUpFudge;
    if(!mouseUpFudge)
        return;
#endif
    EventMouse* e = (EventMouse*)event;
    isMouseDown[e->getMouseButton()] = false;
    timeSinceLastMouseUp = 0;
    std::stringstream ss;
    ss << "Mouse Up detected, Key: ";
    ss << e->getMouseButton();
}
示例#18
0
void ScreenTest::onMouseScroll(Event *event)
{
    EventMouse* e = (EventMouse*)event;

    float scrolly = e->getScrollY();
    m_scale += scrolly / 10;
    
    if(m_scale < 0)
    {
        m_scale = 0;
    }

    refeshInfo();
}
示例#19
0
///Input is 1 or -1
void HelloWorld::onMouseScroll(Event* event)
{
#ifdef MOUSE_DOUBLE_LISTEN_FUDGE
    mouseScrollFudge = !mouseScrollFudge;
    if(!mouseScrollFudge)
        return;
#endif
    EventMouse* e = (EventMouse*)event;
    if(e->getScrollY() > 0)
    {
        auto vect = screenspaceToWorldspace(lastCursor);
    }
    else if(e->getScrollY() < 0)
    {
    }
}
void WorldScene::mouseClick(cocos2d::Event* event, Player* player) {
	CCLOG("mouse");
	CCLOG("Category %x", player->getPhysicsBody()->getCategoryBitmask());
	CCLOG("Collision %x", player->getPhysicsBody()->getCollisionBitmask());
	if (player->getArrow() > 0) {
		Vec2 loc = player->getPosition();
		CCLOG("%d", player->getArrow());
		EventMouse* mouseEvent = dynamic_cast<EventMouse*>(event);
		mouseEvent->getMouseButton();
		//auto pro = Sprite::create("CloseNormal.png");
		auto pro = Projectile::create();
		pro->setPosition(loc);

		this->addChild(pro, 1);
		//pro->setPosition(mouseEvent->getLocation().x, this->getContentSize().height-mouseEvent->getLocation().y);
		if (player->getMode() == 'a') {
			pro->setMode('a');
			Vec2 offset = mouseEvent->getLocation();
			offset.y = this->getContentSize().height - offset.y;
			offset -= player->getPosition();
			offset.normalize();

			auto deg = atan(offset.x / offset.y) * 180 /3.14;
			if (offset.y<0) {
				deg += 180;
			}
			CCLOG("%f", deg);

			auto target = offset*1000 + player->getPosition();
			auto rotate = RotateBy::create(0, deg);
			auto shoot = MoveTo::create(2.0f, target);
			auto remove = RemoveSelf::create();
			pro->runAction(Sequence::create(rotate, shoot, remove, nullptr));
			player->setArrow(player->getArrow() - 1);
		}
		else {
			pro->setMode('b');
			auto shoot = MoveBy::create(2.0f, Vec2(0, 500));
			auto remove = RemoveSelf::create();
			pro->runAction(Sequence::create(shoot, remove, nullptr));
			player->setArrow(player->getArrow() - 4);
		}
		
		
		setArrow(player->getArrow());
	}
}
示例#21
0
void InputManager::getInput(){
    int key = getch();

    if(key != ERR){
        MEVENT m_event;
        if(key == KEY_MOUSE && getmouse(&m_event) == OK){
            if(m_event.bstate & BUTTON1_CLICKED){
                EventMouse* em = new EventMouse();
                em->setMouseAction(LEFT_BUTTON_CLICK);
                em->setMouseX(m_event.x);
                em->setMouseY(m_event.y);
                onEvent(em); 
            }
        }else{
            EventKeyboard* ek = new EventKeyboard();
            ek->setKey(key);
            onEvent(ek);
        }
    }   
}
示例#22
0
void GameScene::onMouseDown(Event* ev1)
{
	EventMouse* ev = (EventMouse*)ev1;
	Vec2 loc = ev->getLocation();
	int size = map.size();
	/*for (int i = 0; i < 9; i++) {
		for (int j = 0; j < 9; j++) {
			map.at(i + j).label->setColor(Color3B::BLUE);
			Vec2 mao = (map.at(i + j)).image->getPosition();
			Vec2 origin = Vec2(mao.x - 19, mao.y - 19);
			Size size = Size(38.0, 38.0);
			Rect rect = Rect(origin, size);
			if (rect.containsPoint(loc)) {
				current = map.at(i + j);
				map.at(i + j).label->setColor(Color3B::RED);
				return;
			}
		}
	}*/
}
bool MouseScene::init()
{
	if (!Layer::init())
	{
		return false;
	}

	auto listener = EventListenerMouse::create();
	listener->onMouseDown = [](cocos2d::Event* event)
	{
		try
		{
			EventMouse* mouseEvent = dynamic_cast<EventMouse*>(event);
			mouseEvent->getMouseButton();
			std::stringstream message;
			message << "Mouse event: Button: " << mouseEvent->getMouseButton() << "pressed at point (" << mouseEvent->getLocation().x << ", " << mouseEvent->getLocation().y << ")";
			MessageBox(message.str().c_str(), "Mouse Event Details");
		}
		catch (std::bad_cast& e)
		{
			//not sure what kind of event you passed us cocos, but it was a wrong one
			return;
		}
	};
	listener->onMouseMove = [](cocos2d::Event* event){
		// Cast Event to EventMouse for position details like above
		cocos2d::log("Mouse moved event");
	};

	listener->onMouseScroll = [](cocos2d::Event* event){
		cocos2d::log("Mouse wheel scrolled");
	};

	listener->onMouseUp = [](cocos2d::Event* event){
		cocos2d::log("Mouse button released");
	};

	_eventDispatcher->addEventListenerWithFixedPriority(listener, 1);

	return true;
}
示例#24
0
void Tower::onMouseMove(cocos2d::Event* _event)
{

	if(_isClosing == true || _returnFromSave == true)
    {
        _returnFromSave = false;
        return;// if we are pressing the close button, we dont want to build things!
    }

	EventMouse* e = (EventMouse*)_event;

	if(_isMovingToolPanal == true)
	{
		Vec2 tPP = _toolPanalLayer->getPosition();
		float mPPY = e->getCursorY();
		float mPPX = e->getCursorX();
		mPPY=mPPY+_mouseYOffset;

		_toolPanalLayer->setPosition(Vec2(mPPX-_windowOffsetX,mPPY-_windowOffsetY));
	}

	if(_isBuildingFloor == true)
	{
		float mPPY = e->getCursorY()+_mouseYOffset;
		float mPPX = e->getCursorX();
		createStructure(Vec2(mPPX,mPPY));
	}

    _mouseLayer->setPosition(e->getCursorX()-_currentStructureSize.width/2, _mouseYOffset + e->getCursorY() - _currentStructureSize.height/2);
}
示例#25
0
void MapLayer::onMouseMove(Event *event){
    if(!mapEdit)
        return;
    
    EventMouse *e = (EventMouse*)event;
    Vec2 mousePos = e->getLocation();
    mousePos.y = Director::getInstance()->getWinSize().height - mousePos.y;
    mousePos -= CreatureLayer::GetInstance()->getPosition();
    mouseX = (int)mousePos.x/TILE_SIZE;
    mouseY = (int)mousePos.y/TILE_SIZE;
    
    if(mouseX < 0 || mouseX > width-1)
        mouseX = oldMouseX;
    if(mouseY < 0 || mouseY > height-1)
        mouseY = oldMouseY;
    
    if(oldMouseX != mouseX || oldMouseY != mouseY){
        SetNavigationString();
        if(isMouseDown){
            if(isEraser) {
                Erase(mouseX, mouseY);
            }
            else{
                Add(nowTile, mouseX, mouseY, 0.0f, false);
                if(nowTile < 10){
                    
                }
                else if(nowTile < 100){
                    obstacleCount++;
                }
                else{
                    objectCount++;
                }
            }
        }
        oldMouseX = mouseX;
        oldMouseY = mouseY;
    }
}
bool AppDelegate::applicationDidFinishLaunching() {
    // initialize director
	auto director = Director::getInstance();
	auto glview = CCQGLView::getInstance();
	//glview->setBgColor(Color4B(50, 50, 50, 255));

	director->setOpenGLView(glview);
	_mainWindow.setGLView(glview->getGLWidget());
	_mainWindow.initActionListWidget();
	_mainWindow.show();

    // turn on display FPS
    director->setDisplayStats(false);

    // set FPS. the default value is 1.0/60 if you don't call this
    director->setAnimationInterval(1.0 / 60);

    // create a scene. it's an autorelease object
    auto scene = Scene::create();
	scene->setAnchorPoint(Vec2::ANCHOR_MIDDLE);
	
	scene->setContentSize(Director::getInstance()->getVisibleSize());
	//scene->setPosition(Director::getInstance()->getVisibleSize() / 2);
	QString path;
	QDir dir;
	path = dir.currentPath();
	FileUtils::getInstance()->addSearchPath(path.toStdString() + "/Resources");
	FileUtils::getInstance()->addSearchPath("D://Resources");
	auto keyboardEvent = EventListenerKeyboard::create();

	keyboardEvent->onKeyPressed = [=](EventKeyboard::KeyCode code, Event*event)
	{
		if (code == EventKeyboard::KeyCode::KEY_CTRL)
		{
			m_dragMode = true;
		}
	};

	keyboardEvent->onKeyReleased = [=](EventKeyboard::KeyCode code, Event*event)
	{
		if (code == EventKeyboard::KeyCode::KEY_CTRL)
		{
			m_dragMode = false;
		}
	};

	Director::getInstance()->getEventDispatcher()->addEventListenerWithFixedPriority(keyboardEvent, -1);


	auto scrollEvent = EventListenerMouse::create();
	scrollEvent->onMouseScroll = [=](Event* event)
	{
		EventMouse* e = (EventMouse*)event;
		int scrollX = e->getScrollX();
		int scrollY = e->getScrollY();
		scene->setScale(scene->getScale() + (float)scrollY / 100.0f);
		Size currentSize = scene->getContentSize() * scene->getScale();
	//	scene->setScale();
	};

	auto eventListener = EventListenerTouchOneByOne::create();

	eventListener->onTouchBegan = [=](Touch*touch, Event*event)->bool{
		if (!m_dragMode)
			return false;
		return true;
	};

	eventListener->onTouchMoved = [=](Touch*touch, Event*event)
	{
		scene->setPosition(scene->getPosition() + touch->getDelta());
	};
	eventListener->setSwallowTouches(true);

	Director::getInstance()->getEventDispatcher()->addEventListenerWithFixedPriority(eventListener, -3);
	Director::getInstance()->getEventDispatcher()->addEventListenerWithFixedPriority(scrollEvent, -2);
    // run
    director->runWithScene(scene);

	CCRect rect(0, 0, scene->getContentSize().width, scene->getContentSize().height);

	CCSprite* grid = CCSprite::create("grid1_16x16_new_aaa.png");

	grid->setTextureRect(rect);

	Texture2D::TexParams params = {

		GL_LINEAR,

		GL_LINEAR,

		GL_REPEAT,

		GL_REPEAT

	};

	grid->getTexture()->setTexParameters(&params);
	grid->setAnchorPoint(Vec2::ZERO);
	grid->setPosition(Vec2::ZERO);

	scene->addChild(grid,0);

	//

	return true;
}
示例#27
0
文件: MousePaddle.cpp 项目: Zaka/yap
void MousePaddle::onMouseMove(Event *event) {
    EventMouse *e = (EventMouse*)event;
    this->setPosition(Point(910, e->getCursorY()));

    // std::cout << "Paddle pos: " << toString(getPosition()) << std::endl;
}
示例#28
0
bool SplashLayer::init() {

	if (!Layer::init()) {
		return false;
	}

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

	//change splash image here:
	auto splash = Sprite::create("Splash.png");
	splash->setPosition(Vec2(visibleSize.width / 2, visibleSize.height / 2));
	this->addChild(splash);

	auto start = Sprite::create("Splash_start.png");
	start->setPosition(Vec2(visibleSize.width / 2, 300));
	this->addChild(start);


	auto quit = Sprite::create("Splash_quit.png");
	quit->setPosition(Vec2(visibleSize.width / 2, 200));
	this->addChild(quit);


	//鼠标悬停,start按钮变大
	auto startlistener = EventListenerMouse::create();
	startlistener->onMouseMove = [=](Event* event) {
		Sprite* start = static_cast<Sprite*>(event->getCurrentTarget());
		EventMouse* mouse = static_cast<EventMouse*>(event);
		if (mouse->getCursorX() > 417 && mouse->getCursorX() < 607 &&
			mouse->getCursorY() > -484 && mouse->getCursorY() < -452) {
			if (aboveStart) {
				auto scale = ScaleTo::create(0.1f, 1.2f);
				start->runAction(scale);
				aboveStart = false;
				notAboveStart = true;
			}
		}
		else {
			if (notAboveStart) {
				auto scaleback = ScaleTo::create(0.1f, 1);
				start->runAction(scaleback);
				aboveStart = true;
				notAboveStart = false;
			}
		}
	};
	_eventDispatcher->addEventListenerWithSceneGraphPriority(startlistener, start);

	//鼠标悬停,quit按钮变大
	auto quitlistener = EventListenerMouse::create();
	quitlistener->onMouseMove = [=](Event* event) {
		Sprite* quit = static_cast<Sprite*>(event->getCurrentTarget());
		EventMouse* mouse = static_cast<EventMouse*>(event);
		if (mouse->getCursorX() > 446 && mouse->getCursorX() < 578 &&
			mouse->getCursorY() > -585 && mouse->getCursorY() < -551) {
			if (aboveQuit) {
				auto scale = ScaleTo::create(0.1f, 1.2f);
				quit->runAction(scale);
				aboveQuit = false;
				notAboveQuit = true;
			}
		}
		else {
			if (notAboveQuit) {
				auto scaleback = ScaleTo::create(0.1f, 1);
				quit->runAction(scaleback);
				aboveQuit = true;
				notAboveQuit = false;
			}
		}
	};
	_eventDispatcher->addEventListenerWithSceneGraphPriority(quitlistener, quit);


	//点击start按钮,场景切换进入关卡选择界面
	auto startclick = EventListenerMouse::create();
	startclick->onMouseDown = [](Event* event) {
		EventMouse* mouse = static_cast<EventMouse*>(event);
		if (mouse->getCursorX() > 417 && mouse->getCursorX() < 607 &&
			mouse->getCursorY() > -484 && mouse->getCursorY() < -452) {

			//获取当前时间作为随机数种子
			srand((unsigned int)time(nullptr));
			//生成范围为[1, 20]的随机数,20中随机动画
			int a = (rand() % 20) + 1;
			switch (a) {
			case 1:
				Director::getInstance()->replaceScene(TransitionProgressRadialCCW::create(0.5f, HomeScene::create()));
				break;
			case 2:
				Director::getInstance()->replaceScene(TransitionProgressRadialCW::create(0.5f, HomeScene::create()));
				break;
			case 3:
				Director::getInstance()->replaceScene(TransitionProgressHorizontal::create(0.5f, HomeScene::create()));
				break;
			case 4:
				Director::getInstance()->replaceScene(TransitionProgressVertical::create(0.5f, HomeScene::create()));
				break;
			case 5:
				Director::getInstance()->replaceScene(TransitionProgressInOut::create(0.5f, HomeScene::create()));
				break;
			case 6:
				Director::getInstance()->replaceScene(TransitionProgressOutIn::create(0.5f, HomeScene::create()));
				break;
			case 7:
				Director::getInstance()->replaceScene(TransitionFadeTR::create(0.5f, HomeScene::create()));
				break;
			case 8:
				Director::getInstance()->replaceScene(TransitionFadeBL::create(0.5f, HomeScene::create()));
				break;
			case 9:
				Director::getInstance()->replaceScene(TransitionFadeUp::create(0.5f, HomeScene::create()));
				break;
			case 10:
				Director::getInstance()->replaceScene(TransitionFadeDown::create(0.5f, HomeScene::create()));
				break;
			case 11:
				Director::getInstance()->replaceScene(TransitionTurnOffTiles::create(0.5f, HomeScene::create()));
				break;
			case 12:
				Director::getInstance()->replaceScene(TransitionMoveInL::create(0.5f, HomeScene::create()));
				break;
			case 13:
				Director::getInstance()->replaceScene(TransitionMoveInR::create(0.5f, HomeScene::create()));
				break;
			case 14:
				Director::getInstance()->replaceScene(TransitionMoveInT::create(0.5f, HomeScene::create()));
				break;
			case 15:
				Director::getInstance()->replaceScene(TransitionMoveInB::create(0.5f, HomeScene::create()));
				break;
			case 16:
				Director::getInstance()->replaceScene(TransitionSlideInB::create(0.5f, HomeScene::create()));
				break;
			case 17:
				Director::getInstance()->replaceScene(TransitionSlideInL::create(0.5f, HomeScene::create()));
				break;
			case 18:
				Director::getInstance()->replaceScene(TransitionSlideInR::create(0.5f, HomeScene::create()));
				break;
			case 19:
				Director::getInstance()->replaceScene(TransitionSlideInT::create(0.5f, HomeScene::create()));
				break;
			case 20:
				Director::getInstance()->replaceScene(TransitionPageTurn::create(0.5f, HomeScene::create(), true));
				break;
			default:
				log("ERROR!");
				break;
			}
		}
	};
	_eventDispatcher->addEventListenerWithSceneGraphPriority(startclick, start);


	//点击quit按钮退出整个app
	auto quitclick = EventListenerMouse::create();
	quitlistener->onMouseDown = [](Event* event) {
		EventMouse* mouse = static_cast<EventMouse*>(event);
		if (mouse->getCursorX() > 446 && mouse->getCursorX() < 578 &&
			mouse->getCursorY() > -585 && mouse->getCursorY() < -551) {

			Director::getInstance()->end();
		}
	};
	_eventDispatcher->addEventListenerWithSceneGraphPriority(quitclick, quit);
	
	return true;
}
示例#29
0
bool EditorScene::init()
{
    if (!Scene::init()) {
        return false;
    }

    auto size = Director::getInstance()->getVisibleSize();
    // 3d
    _3dLayer = Layer::create();
    this->addChild(_3dLayer, 1);
    auto bg = BillBoard::create("images/logo_only.png");
    bg->setPosition3D({0,0,0});
//    _3dLayer->addChild(bg);
    bg->setScale(0.5f);


    // cubepack
    CubeCenter::get()->initWithTest();
    for (int i = 0; i < CubeCenter::get()->cubePack.cubes.size(); i++) {
        Cube cube =CubeCenter::get()->cubePack.cubes[i];
        auto sp3d = Sprite3D::create("3d/jingbix.c3b");
        float length_scale = 10.f;
        sp3d->setPosition3D(Vec3{static_cast<float>(cube.x), static_cast<float>(cube.y), static_cast<float>(cube.z)}*length_scale);
        sp3d->setScale(4.f);
        _3dLayer->addChild(sp3d);
    }

    // cube sprite
    auto cubeSprite = CubeSprite::create(Vec3(0,0,0), 0);
    cubeSprite->setPosition3D({0,0,20});
    cubeSprite->setScale(2.f);
    _3dLayer->addChild(cubeSprite);

    // camera
    _camera = Camera::createPerspective(60, size.width/size.height, 1, 1000);
    _camera->setPosition3D({0, 0, 200});
    _camera->lookAt({0,0,0});
    _camera->setCameraFlag(CameraFlag::USER1);
    _3dLayer->addChild(_camera);
    _3dLayer->setCameraMask((unsigned short)CameraFlag::USER1);

    // UI layer
    _uiLayer = EditorUILayer::create();
    this->addChild(_uiLayer, 2);

    // state label
    _stateLabel = Label::createWithTTF("state string", "fonts/consola.ttf", 14);
    _stateLabel->setPosition(Vec2{size.width*0.1f,size.height*0.9f});
    _uiLayer->addChild(_stateLabel, 0);

    // keyboard
    _keyboardListener = EventListenerKeyboard::create();
    _keyboardListener->onKeyPressed = [&](EventKeyboard::KeyCode code, Event* event) {
        switch (code) {
        case EventKeyboard::KeyCode::KEY_SPACE:
            CCLOG("key space, shot");
            //TODO
            break;

        case EventKeyboard::KeyCode::KEY_W:
        case EventKeyboard::KeyCode::KEY_CAPITAL_W:
            CCLOG("key W down");
            _zoomIn = true;
            break;

        case EventKeyboard::KeyCode::KEY_S:
        case EventKeyboard::KeyCode::KEY_CAPITAL_S:
            CCLOG("key S down");
            _zoomOut = true;
            break;

        case EventKeyboard::KeyCode::KEY_A:
        case EventKeyboard::KeyCode::KEY_CAPITAL_A:
            CCLOG("key A down");
            _left = true;
            break;

        case EventKeyboard::KeyCode::KEY_D:
        case EventKeyboard::KeyCode::KEY_CAPITAL_D:
            CCLOG("key D down");
            _right = true;
            break;

        case EventKeyboard::KeyCode::KEY_Q:
        case EventKeyboard::KeyCode::KEY_CAPITAL_Q:
            CCLOG("key Q down");
            _up = true;
            break;

        case EventKeyboard::KeyCode::KEY_E:
        case EventKeyboard::KeyCode::KEY_CAPITAL_E:
            CCLOG("key E down");
            _down = true;
            break;

        case EventKeyboard::KeyCode::KEY_UP_ARROW:
            up();
            break;
        case EventKeyboard::KeyCode::KEY_DOWN_ARROW:
            down();
            break;
        case EventKeyboard::KeyCode::KEY_LEFT_ARROW:
            left();
            break;
        case EventKeyboard::KeyCode::KEY_RIGHT_ARROW:
            right();
            break;

        default:
            break;
        }
    };
    _keyboardListener->onKeyReleased = [&](EventKeyboard::KeyCode code, Event* event) {
        switch (code) {
        case EventKeyboard::KeyCode::KEY_SPACE:
            CCLOG("key space, shot");
            //TODO
            break;

        case EventKeyboard::KeyCode::KEY_W:
        case EventKeyboard::KeyCode::KEY_CAPITAL_W:
            CCLOG("key W up");
            _zoomIn = false;
            break;

        case EventKeyboard::KeyCode::KEY_S:
        case EventKeyboard::KeyCode::KEY_CAPITAL_S:
            CCLOG("key S up");
            _zoomOut = false;
            break;

        case EventKeyboard::KeyCode::KEY_A:
        case EventKeyboard::KeyCode::KEY_CAPITAL_A:
            CCLOG("key A up");
            _left = false;
            break;

        case EventKeyboard::KeyCode::KEY_D:
        case EventKeyboard::KeyCode::KEY_CAPITAL_D:
            CCLOG("key D up");
            _right = false;
            break;
        case EventKeyboard::KeyCode::KEY_Q:
        case EventKeyboard::KeyCode::KEY_CAPITAL_Q:
            CCLOG("key Q up");
            _up = false;
            break;

        case EventKeyboard::KeyCode::KEY_E:
        case EventKeyboard::KeyCode::KEY_CAPITAL_E:
            CCLOG("key E up");
            _down = false;
            break;

//            case EventKeyboard::KeyCode::KEY_UP_ARROW:
//                up();
//                break;
//            case EventKeyboard::KeyCode::KEY_DOWN_ARROW:
//                down();
//                break;
//            case EventKeyboard::KeyCode::KEY_LEFT_ARROW:
//                left();
//                break;
//            case EventKeyboard::KeyCode::KEY_RIGHT_ARROW:
//                right();
//                break;

        default:
            break;
        }

    };
    _eventDispatcher->addEventListenerWithSceneGraphPriority(_keyboardListener, this);

    // mouse
    _mouseListener = EventListenerMouse::create();

    _mouseListener->onMouseMove = [&](Event *event) {
        if (!_isFPS) return;

        EventMouse* e = (EventMouse*)event;
        auto now = e->getLocation();
        Vec2 diff = now - _fpsAnchor;
        _fpsAnchor = now;
        _rotateY -= ROTATE_SCALE*diff.x;
        _rotateX -= ROTATE_SCALE*diff.y;
        if (_rotateX > UP_DOWN_MAX*0.5f*PI) _rotateX = UP_DOWN_MAX*0.5f*PI;
        if (_rotateX < -UP_DOWN_MAX*0.5f*PI) _rotateX = -UP_DOWN_MAX*0.5f*PI;

    };
    _mouseListener->onMouseUp = [&](Event *event) {
        EventMouse* e = (EventMouse*)event;
        switch(e->getMouseButton()) {
        case MOUSE_BUTTON_LEFT:
            break;

        case MOUSE_BUTTON_RIGHT:
            _isFPS = false;
            break;

        default:
            break;
        }
    };
    _mouseListener->onMouseDown = [&](Event *event) {
        EventMouse* e = (EventMouse*)event;
        switch(e->getMouseButton()) {
        case MOUSE_BUTTON_LEFT:
            break;

        case MOUSE_BUTTON_RIGHT:
        {
            _isFPS = true;
            _fpsAnchor = e->getLocation();
            auto ro = _camera->getRotation3D();
            CCLOG("%f,%f,%f", ro.x, ro.y, ro.z);
            break;
        }
        default:
            break;
        }
    };
    _mouseListener->onMouseScroll = [&](Event *event) {
        EventMouse* e = (EventMouse*)event;
        CCLOG("%f, %f", e->getScrollX(), e->getScrollY());
        float diff = e->getScrollY();
        Vec3 dir = _camera->getRotationQuat() * Vec3{0.f, 0.f, -1.f};
        dir.normalize();
        _camera->setPosition3D(_camera->getPosition3D() + SCALL_MOVE_SCALE * -diff * dir);
    };
    _eventDispatcher->addEventListenerWithSceneGraphPriority(_mouseListener, this);

    scheduleUpdate();
    return true;
}
示例#30
0
void MenuScene::onMouseScroll(Event * event)
{
    EventMouse * mouseEvent = static_cast<EventMouse *>(event);
    float deltaY = mouseEvent->getScrollY() * 6;
    this->moveMenuBy(deltaY);
}