【已解决】如何在cocos2dx中用多点触摸实现cocostudio地图的缩放

如何在cocos2dx中用多点触摸实现cocostudio地图的缩放 ,求大神指点

最后改了方案,用别的做地图,不用cocostudio

cocostudio地图是指什么?

楼主可以参考此文哦,多点触摸,进行缩放:

http://blog.csdn.net/somestill/article/details/10581277

还有一篇是类似coc的地图缩放,但是一时没找到,你也可以再找找。

m_pUIlayer = UILayer::create();
addChild(m_pUIlayer,3);
//加入背景json文件,即背景地图
m_pWidget = static_cast<Layout*>(GUIReader::shareReader()->widgetFromJsonFile(“MyGameMap_4/MyGameMap_1.ExportJson”));
m_pUIlayer->addWidget(m_pWidget);
CCSize screenSize = CCDirector::sharedDirector()->getWinSize();
CCSize rootSize = m_pWidget->getSize();
m_pUIlayer->setPosition(CCPoint((screenSize.width - rootSize.width) / 2,(screenSize.height - rootSize.height) / 2));

//操作部分
CCSize size = CCDirector::sharedDirector()->getWinSize();
m_pUIlayer->setScale(0.5);
CCActionInterval* actionTo = CCMoveTo::create(1.0f,ccp(size.width,size.height));
m_pUIlayer->runAction(actionTo);

对json文件操作啊。没办法它默认是单点触摸,我用多点触摸会被单点触摸吞噬。直接对UILayer进行操作。程序里用scale 或 moveTo是可以实现。关键现在要借助多点触摸来触发这些动作,你懂的。单点触摸的等级优先于多点触摸。。。

楼主可以参考此文哦,多点触摸,进行缩放:

http://blog.csdn.net/somestill/article/details/10581277

还有一篇是类似coc的地图缩放,但是一时没找到,你也可以再找找。

多点触摸缩放拖拽我自己知道怎么实现,也用过。关键是用到cocostudio的json文件时候,多点触摸事件相应不了。不过还是要谢谢你的推荐:14:

— Begin quote from ____

引用第3楼lanbo张于2014-04-12 11:28发表的 回 1楼(孤独の快乐) 的帖子 :
m_pUIlayer = UILayer::create();
addChild(m_pUIlayer,3);
//加入背景json文件,即背景地图
m_pWidget = static_cast<Layout*>(GUIReader::shareReader()->widgetFromJsonFile(“MyGameMap_4/MyGameMap_1.ExportJson”));
m_pUIlayer->addWidget(m_pWidget);
http://www.cocoachina.com/bbs/job.php?action=topost&tid=197792&pid=925182

— End quote

测试了下修改触摸优先级,发现单点触摸还是比多点触摸优先,没辙了

— Begin quote from ____

引用第5楼孤独の快乐于2014-04-12 11:35发表的 Re:回 1楼(孤独の快乐) 的帖子 :

测试了下修改触摸优先级,发现单点触摸还是比多点触摸优先,没辙了
http://www.cocoachina.com/bbs/job.php?action=topost&tid=197792&pid=925194

— End quote

— Begin quote from ____

引用第5楼孤独の快乐于2014-04-12 11:35发表的 Re:回 1楼(孤独の快乐) 的帖子 :

测试了下修改触摸优先级,发现单点触摸还是比多点触摸优先,没辙了
http://www.cocoachina.com/bbs/job.php?action=topost&tid=197792&pid=925194

— End quote

了解。所以我也才不懂怎么搞。难道要去改底层代码。这样会很纠结的……

求类似coc的地图缩放
没搜索到

你自己实现缩放时,特别在真机上,出现这种现象,闪动的现象,在ccTouchesMoved方法中,判断了是单点,还是多点,分别逻辑是多点的话,就是缩放,单点,就是拖动,在缩放时,会触发拖动的逻辑,导致会闪动!
第二个问题是,缩放的点,不知道你是按那个参考点缩放的,默认是node(就是要缩放的精妙、层、等)的锚点,这样的话,当先拖动到某一块区域后,对那个区域缩放,而实际是相对锚点缩放的,有没有按当前触摸区域缩放?
第三个问题是,缩放到一定程度,如缩小到与可视区域一样时,停止 缩小,放大到2倍或几倍时,停止放大?
以上问题是否遇到,如果有什么建议意见,也请指点下,在此谢过!
这是我目前实现的代码,希望给指点!
void Fight::ccTouchesMoved(cocos2d::CCSet *pTouches, cocos2d::CCEvent pEvent){
//如果移动时触摸点的个数不少于两个
if(pTouches->count()>1)
{
CCSetIterator iter = pTouches->begin();
CCPoint pos1Pre = ((CCTouch
)(iter))->getPreviousLocation();
CCPoint pos1 = ((CCTouch
)(iter))->getLocation();
iter++;
CCPoint pos2Pre = ((CCTouch
)(iter))->getPreviousLocation();
CCPoint pos2 = ((CCTouch
)(*iter))->getLocation();

    float dis1 = pos1Pre.getDistance(pos2Pre);
    float dis2 = pos1.getDistance(pos2);
    
    CCPoint mid1 = CCPoint((pos1.x+pos2.x)/2, (pos1.y+pos2.y)/2);
    CCPoint mid2 = CCPoint((pos1Pre.x+pos2Pre.x)/2, (pos1Pre.y+pos2Pre.y)/2);
    CCPoint mid = CCPoint((mid1.x+mid2.x)/2, (mid1.y+mid2.y)/2);
    
    CCPoint anchor = CCPoint(mid.x/bg->getContentSize().width, mid.y/bg->getContentSize().height);
    bg->setAnchorPoint(anchor);
    float scale = bg->getScale() * (dis2 / dis1);
    scale = MIN(4, MAX(0.3, scale));
    bg->setScale(scale);
    CCLog("bg pos(%f,%f), anchor(%f,%f), scale=%f", bg->getPositionX(),bg->getPositionY(),bg->getAnchorPoint().x,bg->getAnchorPoint().y,bg->getScale());
}
//如果触摸点为一个
else if(pTouches->count() == 1)
{
    CCLog("===========come here?");

    CCSetIterator iter = pTouches->begin();
    CCPoint pos1Pre = ((CCTouch*)(*iter))->getPreviousLocation();
    CCPoint pos1 = ((CCTouch*)(*iter))->getLocation();
    float nMoveX = pos1.x - pos1Pre.x;
    float nMoveY = pos1.y - pos1Pre.y;
    CCPoint curPos = bg->getPosition();
    CCPoint nextPos = ccp(curPos.x + nMoveX, curPos.y + nMoveY);
    //        if (nextPos.x >= 0.0f) {
    //            nextPos.x = 0.0f;
    //        }
    //        if (nextPos.x <= 0 - this->getContentSize().width*2 + visibleSize.width) {
    //            nextPos.x = 0 - this->getContentSize().width*2 + visibleSize.width;
    //        }
    //        if (nextPos.y >= 0.0f) {
    //            nextPos.y = 0.0f;
    //        }
    //        if (nextPos.y <= 0 - this->getContentSize().height*2 + visibleSize.height) {
    //            nextPos.y = 0 - this->getContentSize().height*2 + visibleSize.height;
    //        }
    bg->setPosition(nextPos);
}

}

楼主,我也遇到和你一样的问题,我使用了scrollview,然后相对scrollview进行双指缩放,但是我注册的多点触摸的回掉都不响应,不知道你之前遇到的问题是怎么解决的呢?