Cocos2D-X系列之RPG橫版過關遊戲完整版實例3

 以下爲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切換部分

    }//將此段代碼和地圖初始化的代碼配合就可以實現地圖的切換了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章