時間 2013-08-12 19:21:08 CSDN博客
相似文章 (0)
原文
http://blog.csdn.net/mydreamremindme/article/details/9933105 添加到推刊
當精靈在場景中移動的時候,不可能只限制在地圖的那一部分內移動吧。。我們還需要看到地圖更多的東西,這時就需要場景跟隨着精靈移動。我們假設精靈在任何一點都需要場景的移動。
void HelloWorld::screenMove(CCPoint point) { float x=heroSprite->getPosition().x; float y=heroSprite->getPosition().y; x=MAX(x,screenSize.width/2); y=MAX(y,screenSize.height/2); x=MIN(x,mapSize.width*mapTileSize.width-screenSize.width/2); y=MIN(y,mapSize.height*mapTileSize.height-screenSize.height/2); CCPoint targetPosition=CCPoint(screenSize.width/2-x,screenSize.height/2-y); this->setPosition(targetPosition); }
當精靈在場景中移動的時候,不可能只限制在地圖的那一部分內移動吧。。我們還需要看到地圖更多的東西,這時就需要場景跟隨着精靈移動。我們假設精靈在任何一點都需要場景的移動。
x=MAX(x,screenSize.width/2); y=MAX(y,screenSize.height/2);兩層意思:如果精靈的任何一個方向(x,y)的位置的值大於屏幕的大小,那麼就需要移動將屏幕中心移動到該點(這是我的這個遊戲的設定,其他的也可以),如果精靈就是在地圖的左下角那一部分(0,0)到(screenSize.width/2,screenSize.height/2),那麼我們還是一樣的想法,只不過這次是將屏幕中心移動原來的屏幕中心,實際上還是沒有移動。
但是我們不能一直這麼移動下去吧。。如果窗口顯示出了不存在地圖的那部分(黑色),那這遊戲就是失敗的。。
x=MIN(x,mapSize.width*mapTileSize.width-screenSize.width/2); y=MIN(y,mapSize.height*mapTileSize.height-screenSize.height/2);這就是限制我們的屏幕中心的方法,屏幕中心的範圍是從 ( screenSize.width/2, screenSize.height/2 )到(mapSize.width*mapTileSize.width-screenSize.width/2,mapSize.height*mapTileSize.height-screenSize.height/2)
此時我們的(x,y)就是屏幕中心最終要到的地方,(書上說是精靈要到的地方,我覺得不太好理解,甚至感覺不是這樣的,比如:精靈就在(0,0)到 ( screenSize.width/2, screenSize.height/2 )這部分之內,精靈實際的位置還是在x,y沒改變之前的那個位置,因爲測試x,y已經變成了 screenSize.width/2, screenSize.height/2。這是屏幕中心的位置啊!!我很費解。所以 擅自把它給 改了)。屏幕要移動到(x,y),那麼就需要場景從(screenSize.width/2-x,screenSize.height/2-y)這個方向去移動,屏幕肯定不會移動了啦,移動的是場景。。
this->setPosition(targetPosition);
這就是場景移動的算法。這樣寫估計性能不是太好,但是簡單吧。。
因爲場景移動是每時每刻都要監測的,所以要放在update()中。。