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];
}
}
}
是的所有節點都在一個數組中。我沒有使用任何圖像或紋理。我正在使用爲我繪製的ShapeNodes和LabelNodes。我試圖在不同的縮放級別移除並重新添加點(Shapenodes)和Labelnodes。它們就像像素化一樣,只是在縮放時將它們留在那裏。 –
我們在這裏談論的放大多少? – sangony
編輯我的帖子以顯示縮放方法。用於世界精靈的world.png爲6310x3353,並且在初始化期間縮放以適合該世界精靈。然後,每個縮放比例放大或縮小1.5。 –