2014-04-17 56 views
1

Spritekit通過縮放場景來重繪兒童小精靈?

我有一個世界地圖作爲背景。我將ShapeNodes(dots)和LabelNodes放置爲世界精靈的子女,以標記世界各大城市。一切看起來不錯。

當我將世界精靈擴展到特定的國家時,點和標籤按照您預期的那樣縮放並保持其在世界中的位置。點和標籤變得像素化,看起來不太好。處理這個問題的最好方法是什麼?我需要孩子們始終保持自己的地位,但不管世界的規模如何,都要「重新繪製」或保持同樣的規模。

不知道如何解決這個問題。提前致謝。

編輯:表示的變焦方法

static const int MAX_ZOOM_AMOUNT = 6; 
static const CGFloat SCALE_AMOUNT = 1.5; 
static const CGFloat ANIMATION_DURATION = .15; 
- (void)zoomWorld:(BOOL)zoomIn fromLocation:(CGPoint)touchLocation { 

    CGPoint anchorPoint = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame)); 
    CGPoint mySkNodeShift = CGPointSubtract(anchorPoint, CGPointMultiplyScalar(anchorPoint, SCALE_AMOUNT)); 
    SKAction *scaleUp = [SKAction group:@[ 
             [SKAction scaleBy:SCALE_AMOUNT duration:ANIMATION_DURATION], 
             [SKAction moveBy:CGVectorMake(mySkNodeShift.x, mySkNodeShift.y) duration:ANIMATION_DURATION] 
             ]]; 
    SKAction *scaleDown = [scaleUp reversedAction]; 

    if (zoomIn) { 
     if (self.zoomLevel < MAX_ZOOM_AMOUNT) { 
      [self.world runAction:scaleUp]; 
      self.zoomLevel++; 
     } 
    } else if (!zoomIn) { 
     if (self.zoomLevel > 0) { 
      [self.world runAction:scaleDown]; 
      self.zoomLevel--; 
     } 
    } 
    self.world.position = [self boundLayerPos:self.world.position]; 

    //Reset UI after the zoom 
    if (self.zoomLevel > 2) [self toggleCityLabels:YES]; 
    else if (self.zoomLevel < 3) [self toggleCityLabels:NO]; 

    if (self.zoomLevel < 0) self.zoomLevel = 0; 
    else if (self.zoomLevel > MAX_ZOOM_AMOUNT) self.zoomLevel = MAX_ZOOM_AMOUNT; 
} 


-(void)toggleCityLabels:(BOOL)on { 
    if (on) { 
     for (AMCity *city in self.arrayOfCities) { 
      [self.world addChild:city.citySprite]; 
     } 
    } 
    else { 
     for (AMCity *city in self.arrayOfCities) { 
      [city.citySprite removeFromParent]; 
     } 
    } 
} 

回答

0

關於圖像質量,我建議具有用於不同的縮放水平不同的紋理。例如,使用texture1作爲1.0到0.8之間的比例。使用texture2爲0.8到0.6。等等......

至於標籤,你可以使用相同的邏輯。找出當前正在查看哪些點/標籤並創建新標籤以適合比例因子。這假設你將所有節點存儲在一個數組中。

+0

是的所有節點都在一個數組中。我沒有使用任何圖像或紋理。我正在使用爲我繪製的ShapeNodes和LabelNodes。我試圖在不同的縮放級別移除並重新添加點(Shapenodes)和Labelnodes。它們就像像素化一樣,只是在縮放時將它們留在那裏。 –

+0

我們在這裏談論的放大多少? – sangony

+0

編輯我的帖子以顯示縮放方法。用於世界精靈的world.png爲6310x3353,並且在初始化期間縮放以適合該世界精靈。然後,每個縮放比例放大或縮小1.5。 –