2013-10-09 53 views
0

我有一個圖像的圖集,他們是80 80.但SKTexture說,一些幀是33x80,儘管他們顯然是80x80。哪裏不對?運行時我的動畫看起來非常錯誤。SKTexture返回錯誤的大小?

下面是代碼:

SKTextureAtlas *myAtlas = [SKTextureAtlas atlasNamed:@"my"]; 
NSInteger numberOfImages = [run.textureNames count]; 

NSLog(@"atlas: %@", myAtlas); 

for (int i = 0; i < numberOfImages; i++) { 
    NSString *textureName = [NSString stringWithFormat:@"walk%.2d", i]; 
    SKTexture *temp = [myAtlas textureNamed:textureName]; 
    [self.runningFrames addObject:temp]; 
} 

日誌返回此:

<SKTextureAtlas> 'my' 16 textures: 
(
    "<SKTexture> 'walk00.png' (33 x 80)", 
    "<SKTexture> 'walk01.png' (80 x 80)", 
    "<SKTexture> 'walk02.png' (33 x 80)", 
... omitted 
) 

這是爲什麼?我的動畫完全失控,它從一側移到另一側,等等。

+0

確實有一個有很多透明的空間(alpha)區域?看到這個視頻解釋爲什麼我問http://www.youtube.com/watch?v=TDwSR3e6nN0 – DogCoffee

+0

@Smick是的,它有很多的alpha。所以我應該添加1%alpha作爲背景以避免這種情況?這看起來像一個黑客 – Dvole

+0

是的,是一個黑客,所以我會做什麼在視頻中的人。 – DogCoffee

回答

5

我找到了問題的解決方案。我正在使用方法進行動畫製作

[self.player runAction:[SKAction repeatActionForever:[SKAction animateWithTextures:self.runningFrames timePerFrame:0.05 resize:NO restore:YES]] withKey:@"playerRunning"]; 

更改調整大小爲YES解決了我所有的問題。

+0

幹得好!我在SKTextureAtlas尋找東西,沒有想到在SKAction看。將不得不用這種方法做一些測試。 – DogCoffee

+0

太棒了!這也解決了我的問題,謝謝!但仍然不明白爲什麼..我只是做animateWithTextures:timePerFrame:,並在開始時一切正常,但一段時間後開始的問題.. – Ilario

1

儘管問題相當老舊,但在我的跑步者中仍然存在碰撞檢測問題。早些時候,我曾經使用這樣的方法:

- (CGRect)collisionBoundingBox 
{ 
    return self.frame; 
} 

然而,似乎SKAction或有新的變化,儘管「調整」標誌我精靈的框架(的iOS 7.1)。一旦我改變了執行到:

- (CGRect)collisionBoundingBox 
{ 
    CGFloat x = self.position.x; 
    CGFloat y = self.position.y; 
    CGFloat w = self.texture.size.width; 
    CGFloat h = self.texture.size.height; 
    return CGRectMake(x - w/2, y - h/2, w, h); 
} 

它工作得很好,因爲texture.size是不變的!無論如何,我認爲這是一個小故障 - 我不想讓一些引擎改變我的精靈的框架!

相關問題