最近在学习cocos2d-x,遇到一个问题:在tiledMap中,怎么实现类似超级玛丽跳跃和移动那样的算法?
游戏主角假设也是一个瓦片大小,在如下的场景中如何实现游戏主角的自由移动?
m_pHero->InitializeMoveScope(this->m_pMap->getMapSize()); void GameobjHero::InitializeMoveScope(cocos2d::CCSize mapSize) { m_fMaxDisUp = mapSize.height; m_fMaxDisDown = 0; m_fMaxDisLeft = 0; m_fMaxDisRight = mapSize.width; }
//hero is at the right side of the collision tiled if(IS_FLOAT_POSITIVE(m_pHero->getPositionX() - (collisionTiledPosition.x + 1) * m_pMap->getTiledSize().width) && IS_FLOAT_POSITIVE((m_pHero->getPositionY() + m_pHero->getContentSize().height) - collisionTiledPosition.y * m_pMap->getTiledSize().height)) { m_pHero->setMaxDisLeft(max(m_pHero->getMaxDisLeft(), (collisionTiledPosition.x + 1) * m_pMap->getTiledSize().width)); m_pHero->setLeftCollided(true); } //hero is at the down side of the collision tiled else if(IS_FLOAT_POSITIVE((collisionTiledPosition.x + 1) * m_pMap->getTiledSize().width - m_pHero->getPositionX()) && IS_FLOAT_POSITIVE(collisionTiledPosition.y * m_pMap->getTiledSize().height - (m_pHero->getPositionY() + m_pHero->getContentSize().height))) { m_pHero->setMaxDisUp(min(m_pHero->getMaxDisUp(), (collisionTiledPosition.y - 1) * m_pMap->getTiledSize().height)); m_pHero->setUpCollided(true); } else { m_pHero->setMaxDisLeft(max(m_pHero->getMaxDisLeft(), (collisionTiledPosition.x + 1) * m_pMap->getTiledSize().width)); m_pHero->setMaxDisUp(min(m_pHero->getMaxDisUp(), (collisionTiledPosition.y - 1) * m_pMap->getTiledSize().height)); m_pHero->setLeftCollided(true); m_pHero->setUpCollided(true); }