고정된 화면을 이동시켜줄 화면스크롤을 만들생각이다.

일단 함수 이름을 MoveScene으로 지었다.

이 함수는 캐릭터가 기준이 되어 모니터 상에 40%~60%를 넘어가면 맵이 이동하는 기능이다.

메인씬에서 init에서 세팅하고있다.

CGSize size = CCDirector::sharedDirector()->getWinSize();

Left = size.width * 0.4f;

Right = size.width * 0.6f;

Up = size.height * 0.4f;

Down = size.height * 0.6f;

for (int i = 0; i < 4; i++){

pLine[i] = CCSprite::spriteWithFile("dnf\\line.png");

this->addChild( pLine[i] );

pLine[i]->setAnchorPoint( ccp(0.5,0.5) );

pLine[i]->setScaleY(100.f);

}

pLine[0]->setPosition(ccp(Left,0));

pLine[1]->setPosition(ccp(Right,0));

pLine[2]->setPosition(ccp(0, Up));

pLine[3]->setPosition(ccp(0, Down));

pLine[2]->setRotation(90);//업 스프라이트가 서 있어서 눕혀줌

 

pLine[3]->setRotation(90);//위와 같다.

 

void MyScene::MoveScene(ccTime dt)

{

CGPoint mapPos = m_pBackGround->getPosition();

float fWorldposX = pHero->getPosition().x + mapPos.x;

float fWorldposY = pHero->getPosition().y + mapPos.y;

if(fWorldposX > Left) m_destPos.x -= 300.f * dt;

if(fWorldposX < Right) m_destPos.x += 300.f * dt;

if(fWorldposY > Up) m_destPos.y -= 300.f * dt;

if(fWorldposY < Down) m_destPos.y += 300.f * dt;

if(m_destPos.x > 0)m_destPos.x = 0;

if(m_destPos.y > 0)m_destPos.y = 0;

float fScreenXEnd = CCDirector::sharedDirector()->getWinSize().width - m_pGround->getContentSize().width;

float fScreenYEnd = CCDirector::sharedDirector()->getWinSize().height - m_pGround->getContentSize().height;

if(m_destPos.x < fScreenXEnd) m_destPos.x = fScreenXEnd;

if(m_destPos.y < fScreenYEnd) m_destPos.y = fScreenYEnd;

 

CGPoint gap = ccp(m_destPos.x - mapPos.x, m_destPos.y - mapPos.y);

gap.x /= 16;

gap.y /= 16;

mapPos.x += gap.x;

mapPos.y += gap.y;

m_pBackGround->setPosition( mapPos );

}

 

이해를 돕는 그림

 

 

결과 동영상

반응형