以下爲player移動的控制代碼
在此之前還要添加windos的鍵盤識別代碼
#if(CC_TARGET_PLATFORM == CC_PLATFORM_WIN32) // #include <windows.h>
#define KEY_DOWN(vk_code) (GetAsyncKeyState(vk_code) & 0x8000 ? 1 : 0)
#define KEY_UP(vk_code) (GetAsyncKeyState(vk_code) & 0x8000 ? 0 : 1)
#endif
//添加到頭文件中就可以了,接下來讓player動起來
void HelloWorld::move()
{
#if(CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
if(KEY_DOWN(VK_UP)&&jump) //jump
{
yVel=4;
xVel=2;
}
if(KEY_DOWN(VK_RIGHT)) //right
{
xVel=2;
}
else if(KEY_DOWN(VK_LEFT)) //left
{
xVel=-2;
}
else if(KEY_UP(VK_LEFT)||KEY_UP(VK_RIGHT))
{
xVel=0;
}
#endif
}
現在player可以窗口內快樂的運動了,但是空間還是不夠廣闊,對於橫版遊戲,player需要在地圖中不斷的穿行,由於手機內存的關係,不可能做一張很大的地圖,如此需要小地圖來進行拼接,合理利用資源,如此設計瞭如下函數:
void HelloWorld::MapControl()
{
//地Ì?圖ª?處ä|理¤¨ª算?法¤¡§
CCTMXTiledMap* map = (CCTMXTiledMap*) getChildByTag(kTagTileMap);
int mapWidth=map->getMapSize().width*map->getTileSize().width;
int mapHeight=map->getMapSize().height*map->getTileSize().height;
CCSize winSize=CCDirector::sharedDirector()->getWinSize();
float deltax=player->getPosition().x-winSize.width/2; //
float deltay=player->getPosition().y-32; //
if(deltax<0)
{
deltax=0;
}
if(deltax>mapWidth-winSize.width)
{
deltax=mapWidth-winSize.width;
}
if(-deltay>0)
{
deltay=0;
}
if(deltay>mapHeight-winSize.height)
{
deltay=mapHeight-winSize.height;
}
map->setPosition(ccp(-deltax,-deltay)); //
}
void HelloWorld::gameLoop(ccTime dt)
{
if(player->getPosition().x>970)
{//我的地圖是1024x1024
CCUserDefault::sharedUserDefault()->setIntegerForKey("lvl",
CCUserDefault::sharedUserDefault()->getIntegerForKey("lvl") + 1);
CCDirector::sharedDirector()->replaceScene(CCTransitionRotoZoom::transitionWithDuration(0.01,HelloWorld::scene()));//scene切換部分
}//將此段代碼和地圖初始化的代碼配合就可以實現地圖的切換了