遇见个触屏问题,在写3消游戏,有仿照网上的代码写,但是触屏那里出了问题,大概是这样的:我写了响应,触屏,我想点击每个精灵都能响应并且做出响应的移动,但是,我写出来的响应就只能够点击其中一个精灵并移动,以后鼠标就失灵了,这是什么原因呢?麻烦木头大哥帮忙看下。谢谢啦~~~
代码如下:
bool PlayLayer::init()
{
if (!Layer::init())
{
return false;
}
initFlag();
auto listener = EventListenerTouchOneByOne::create();
//listener->setSwallowTouches(true);//only the up sprite can be response
listener->onTouchBegan = CC_CALLBACK_2(PlayLayer::onTouchBegan, this);
listener->onTouchMoved = CC_CALLBACK_2(PlayLayer::onTouchMoved, this);
//_eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener,this);
//scheduleUpdate();
//CalDelete();
return true;
}
bool PlayLayer::onTouchBegan(Touch* touch, Event event)
{
m_src = NULL;
m_dest = NULL;
if (m_isTouchEnable) {
auto location = touch->getLocation();//获取触摸屏幕时对应的坐标
m_src = OfPoint(&location);
}
return m_isTouchEnable;
}
void PlayLayer::onTouchMoved(Touch touch, Event *event)
{
//点击到了,现在要检查往什么方向进行了
if (!m_src || !m_isTouchEnable) {
return;
}
Point pos = touch->getLocation();
int row = m_src->getMI();
int col = m_src->getMJ();
log("%f%f",pos.x,pos.y);
//up
auto upRect = Rect(m_src->getPositionX()-20,
m_src->getPositionY() + 20,
m_src->getContentSize().width,
m_src->getContentSize().height);
if (upRect.containsPoint(pos)) {
col++;
if (row <maxY) {
m_dest = cirSprite;
}
swapSprite();
return;
}
//down
auto downRect = Rect(m_src->getPositionX()-20,
m_src->getPositionY() - 60,
m_src->getContentSize().width,
m_src->getContentSize().height);
if (downRect.containsPoint(pos)) {
col--;
if (row >= 0) {
m_dest = cirSprite;
}
swapSprite();
return;
}
auto leftRect = Rect(m_src->getPositionX() - 60,
m_src->getPositionY() -20,
m_src->getContentSize().width,
m_src->getContentSize().height);
if (leftRect.containsPoint(pos)) {
row--;
if (col >= 0) {
m_dest = cirSprite;
}
swapSprite();
return;
}
auto rightRect = Rect(m_src->getPositionX() + 20,
m_src->getPositionY() -20,
m_src->getContentSize().width,
m_src->getContentSize().height);
if (rightRect.containsPoint(pos)) {
row++;
if (col < maxX) {
m_dest = cirSprite;
}
swapSprite();
return;
}
}
复制代码