大家好!我在一个场景多点触摸和一个触摸与组合有困难。让我逐步描述我的问题。
我使用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;游戏场景......在开始它的伟大工作,但一段时间后(在不同的设备 - 不同的时间)游戏开始奇怪的行为:越野车,
你能帮帮我吗?感谢您的任何想法和建议。答案 0 :(得分:0)
我通过以下方式解决了我的问题:我删除方法onEnter中的scheduleUpdateForTarget并删除onExit方法中的unscheduleAllForTarget并删除方法更新。 谢谢你的关注!