void MapScene::ccTouchesBegan(CCSet *pTouches, CCEvent *pEvent) { CCSetIterator it = pTouches->begin(); CCTouch* touch = (CCTouch*)(*it); CCPoint m_tBeginPos = touch->getLocationInView(); m_tBeginPos = CCDirector::sharedDirector()->convertToGL( m_tBeginPos ); char mch[256]; CCTMXTiledMap* map = (CCTMXTiledMap*) getChildByTag(kTagTileMap); CCPoint mapp = map->getPosition(); //获得触摸点位置在地图上的索引(行列) CCPoint aimmapindex = convertto2d(m_tBeginPos.x - mapp.x,m_tBeginPos.y - mapp.y); if(aimmapindex.x < 0 || aimmapindex.y < 0 || aimmapindex.x >= map->getMapSize().width || aimmapindex.y >= map->getMapSize().height) { return; } CCPoint herop = m_tamara->getPosition(); CCPoint mapindex = convertto2d(herop.x,herop.y); CCTMXLayer* layer = map->layerNamed("grass"); int tilegid = layer->tileGIDAt(ccp(aimmapindex.x,aimmapindex.y)); CCDictionary *tiledic = map->propertiesForGID(tilegid); CCString *mvalue = (CCString *)tiledic->objectForKey("conflict"); int mv = mvalue->intValue(); if(mv == 1){ return; } //A星搜索 path = myastar->findPath(mapindex.x,mapindex.y,aimmapindex.x,aimmapindex.y,map); stepindex = 1; smallstepindex = 0; }
void MapScene::ccTouchesBegan(CCSet *pTouches, CCEvent *pEvent) { CCSetIterator it = pTouches->begin(); CCTouch* touch = (CCTouch*)(*it); CCPoint m_tBeginPos = touch->locationInView(); m_tBeginPos = CCDirector::sharedDirector()->convertToGL( m_tBeginPos ); CCPoint playerpoint = gameplayer->getPosition(); CCSize palyersize = gameplayer->getContentSize(); CCTMXTiledMap* map = (CCTMXTiledMap*) getChildByTag(kTagTileMap); CCPoint mappoint = map->getPosition(); //根据触摸点的位置判断人物移动方向 if(m_tBeginPos.x < playerpoint.x - palyersize.width / 2 + mappoint.x){ hmove = -1;//左移 }else if(m_tBeginPos.x > playerpoint.x + palyersize.width / 2 + mappoint.x){ hmove = 1;//右移 }else{ hmove = 0; } if(m_tBeginPos.y > playerpoint.y + palyersize.height + mappoint.y){ vmove = 6;//上跳 }else{ vmove = 0; } }
/** * 聚焦到某人身上,必须先设置场景代理 * * 聚焦: * 1.假定人物位于屏幕中间 * 2.消除地图滚动的偏移 */ void MCCamera::focus(MCRole *aRole) { if (sceneDelegate_) { CCSize winSize = CCDirectorGetWindowsSize(); MCScene *scene = sceneDelegate_->getScene(); CCTMXTiledMap *map = sceneDelegate_->getScene()->getMap(); CCSize sceneSize = scene->getSceneSize(); CCPoint mapOffset = map->getPosition(); CCPoint rolePosition = ccpSub(aRole->getEntity()->getPosition(), mapOffset); CCPoint expectedViewportOrigin = ccp(rolePosition.x - winSize.width / 2, rolePosition.y - winSize.height / 2); /* 清除偏移 */ /* 基于地图 */ float viewportLeft = expectedViewportOrigin.x; float viewportRight = expectedViewportOrigin.x + viewport_.size.width; float viewportTop = expectedViewportOrigin.y + viewport_.size.height; float viewportBottom = expectedViewportOrigin.y; if (sceneSize.width < winSize.width) { sceneSize.width = winSize.width; } if (sceneSize.height < winSize.height) { sceneSize.height = winSize.height; } if (viewportLeft < 0) { expectedViewportOrigin.x -= viewportLeft; } else if (viewportRight > sceneSize.width) { expectedViewportOrigin.x -= (viewportRight - sceneSize.width); } if (viewportTop > sceneSize.height) { expectedViewportOrigin.y -= (viewportTop - sceneSize.height); } else if (viewportBottom < 0) { expectedViewportOrigin.y -= viewportBottom; } viewport_.origin = expectedViewportOrigin; sceneDelegate_->moveSceneToLocation(ccpNeg(expectedViewportOrigin)); } }