这一期我们实现游戏的交互。简单的说,就是搭建触摸的框架。
在HelloWorldScene.cpp中添加触摸事件
auto listener = EventListenerTouchOneByOne::create();
listener->onTouchBegan = [this](Touch* t, Event* e)
{
log("onTouch");
auto bs = Block::getBlocks();
Block *b;
for(auto it = bs->begin(); it != bs->end(); it++)
{
b = *it;
if(b->getLineIndex()==1&&b->getBoundingBox().containsPoint(t->getLocation()))
{
if(b->getColor()==Color3B::BLACK)
{
b->setColor(Color3B::GRAY);
this->moveDown();
}
else
{
MessageBox("GameOver","失败");
}
}
}
return false;
};
Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, this);
利用触摸事件onTouchBegan,然后得到所有的Blocks,一个个遍历。先判断lineIndex是不是1而且触摸式在这一行,紧接着如果方块是黑色的话,然后将黑色变为灰色,并使所有方块下移moveDown;如果方块不是黑色,然后出现一个失败的对话框。
moveDown函数,我们先用一个空函数实现,后续会添加具体的逻辑。
//方块下移
void HelloWorld::moveDown()
{
}
在Block.cpp中添加getBlocks函数
Vector<Block*> * Block::getBlocks()
{
return Block::blocks;
}
运行项目,效果如下:
点击非第一行区域,会输出
点击第一行的白色块,会出现失败对话框
点击第一行黑色块,黑色块会变成灰色
效果还不错吧?哈哈哈