2012-03-15 40 views
0

我正在製作一個小型遊戲,其中主要的遊戲玩法圖層根據大量參數放大和縮小。這是通過將.scale屬性設置爲小數部分來完成的。Cocos2d CCLayer.scale

但是,我有一個問題,當從任何子節點調用[[CCDirector sharedDirector] winSize];,我得到一個縮放窗口大小,這有點吸:)除了乘​​以所有我的離屏檢查比例加1呢?

下面是一個例子

我創建一個CCLayer,並把精靈就可以了。所有的精靈與初始化過程中屏幕尺寸的靜態變量,基本上

static CGRect screenRect; //stored as a static variable for performance reasons 
... 
-(id)init{ 
    ... 
    // make sure to initialize the screen rect only once 
    if (CGRectIsEmpty(screenRect)){ 
     CGSize screenSize = [[CCDirector sharedDirector] winSize]; 
     screenRect = CGRectMake(0, 0, screenSize.width, screenSize.height); 

     CCLOG(@"Screen Size during init: %f, %f", screenSize.width, screenSize.height); 
    } 
} 

那麼我當精靈圍繞它是否關閉屏幕上移動的檢查,如果是的話,我把它自動給對面:

if(newPosition.x > screenRect.size.width){ 
    newPosition.x = 0; 
}else if(newPosition.x < 0){ 
    newPosition.x = screenRect.size.width; 
} 

if(newPosition.y > screenRect.size.height){ 
    newPosition.y = 0; 
}else if(newPosition.y < 0){ 
    newPosition.y = screenRect.size.height; 
} 

所有的作品都很好,和預期的一樣。但是,如果我更改父CCLayer的scale屬性,那麼屏幕外定位將與圖層一起「縮放」,這有點奇怪。因此,如果我設置了CCLayer.scale = 0.5f;,那麼它看起來好像屏幕邊界已經移動到手機屏幕的「內部」。我想避免這種情況。怎麼樣?

+0

嗨。我檢查了它。它爲我工作很好。我縮放了我的圖層並檢查了winSize。它給予正確的價值。我無法理解你是如何從子節點呼叫的?其處處都是相同的代碼 – 2012-03-16 05:37:17

+0

嗨,謝謝!我剛剛添加了一個代碼示例! – clops 2012-03-16 07:29:30

回答

0

談話相當多的開發商後,關閉邊界檢查需要採取比例考慮在內,即

newPosition.x > screenRect.size.width/CCLayer.scale