cocos2dx多点触控和触控

时间:2016-01-24 11:08:04

标签: android cocos2d-x

大家好!我在一个场景多点触摸和一个触摸与组合有困难。让我逐步描述我的问题。

我使用cocos2dx(对于android),所以我有场景,在这个场景中我添加了图层Pan Zoom Layer进行滚动和缩放。接下来,我在PanZoomLayer上添加新图层(Game Layer)。我需要点击Game Layer(在这一层找到我的游戏内容)我尝试这样做,使用模式观察者,我已经完成了PanZoom Layer by" Subject"我的游戏图层 - "观察者",以及在PanZoomLayer中创建了枚举事件和struct touchEvent

enum EVENTS{
   EVENT_ONCE_CLICK,
   EVENT_MOVE,
   ANOTHER,
};

struct  touchEvent {
  EVENTS eventName;
};

并在类PanZoomLayer字段中创建m_events:

std::stack<EVENTS> m_events;

并在onTouchesBegan上添加此类代码

if (_touches.size() == 1) {
    m_events.push(EVENTS::EVENT_ONCE_CLICK);
}
else {
    m_events.push(EVENTS::ANOTHER);
}
如果_touches.size()== 1:

,onTouchesMoved中的

在分支中添加此类代码

Vec2 curTouchPosition = Director::getInstance()->convertToGL(touch->getLocationInView());
    Vec2 prevTouchPosition = Director::getInstance()->convertToGL(touch->getPreviousLocationInView());
    Vec2 deltaPosition = curTouchPosition - prevTouchPosition;
    float pos = curTouchPosition.distance(prevTouchPosition);
    if (fabs(pos) < 0.5f) {
        m_events.push(EVENTS::EVENT_ONCE_CLICK);
    }
    else {
        m_events.push(EVENTS::ANOTHER);
    }

onTouchesEnded,添加此类代码:

if (m_events.empty())
     return;
 EVENTS ev = m_events.top();
while (!m_events.empty()) {
    m_events.pop();
}
if (ev == EVENTS::EVENT_ONCE_CLICK) {
 //    MessageBox("once click", "title");
     Touch *touch = (Touch *)_touches.at(0);
     Vec2 position = touch->getLocation();
     notifyClick(position);
}

其中notifyClick:

std::shared_ptr<CSceneSession> sessionShared = m_session.lock();
if (sessionShared)
    sessionShared->clickOnScene(point);

所以我进入游戏周期:游戏场景 - &gt;菜单场景转换 - &gt;游戏场景......在开始它的伟大工作,但一段时间后(在不同的设备 - 不同的时间)游戏开始奇怪的行为:越野车,

你能帮帮我吗?感谢您的任何想法和建议。

1 个答案:

答案 0 :(得分:0)

我通过以下方式解决了我的问题:我删除方法onEnter中的scheduleUpdateForTarget并删除onExit方法中的unscheduleAllForTarget并删除方法更新。 谢谢你的关注!