2013-10-31 36 views
5

我正在瀏覽Apple的SpriteKit文檔,並且遇到了一個非常有用的功能,我可以在編程我的UI時使用它。問題是我無法讓它工作。iOS Sprite套件 - SKSpriteNode的.centerRect屬性不起作用

請參閱此頁面,向下滾動到「調整一個Sprite」 - Apple Docs

我已經逐字複製的圖像尺寸和使用相同的代碼櫃面我做錯了什麼。但是,我總是會看到延伸的圖像,而不是保持相同比例的正確的「端蓋」。

我指的是這樣的代碼:

SKSpriteNode *button = [SKSpriteNode spriteWithImageNamed:@"stretchable_button.png"]; 
button.centerRect = CGRectMake(12.0/28.0,12.0/28.0,4.0/28.0,4.0/28.0); 

我在做什麼錯?我錯過了一個步驟嗎?

編輯:

這是我一直在使用的代碼。我剝去了我的按鈕類,並嘗試將它與SKSPriteNode一起使用,但問題仍然存在。我也改變了圖像,以確保它不是這樣。我使用的圖像是正常尺寸的32x32。

SKSpriteNode *button = [SKSpriteNode spriteNodeWithImageNamed:@"Button.png"]; 
[self addChild:button]; 

button.position = ccp(200, 200); 
button.size = CGSizeMake(128, 64); 
button.centerRect = CGRectMake(9/32, 9/32, 14/32, 14/32); 
+0

Screenshot please? –

+0

何時/如何將按鈕添加到視圖中? – jacerate

+0

我在SKScene的初始化方法中添加了按鈕 – Tomoso

回答

2

9/32是整數除法,所以傳遞到CGRectMake結果爲零。同上另外三個參數。如果您使用浮點文字(例如您引用的示例),則可能會獲得更好的結果。

-2

是的,我注意到,我檢查了NSLOG後,我正在推出並在發佈後不久修復。

但根據這篇文章'.centerRect'屬性被打破,不起作用。

Link

(另外我搜索蘋果開發者論壇上,發現3分的帖子引用了同樣的問題。蘋果公司還沒有固定的這個問題呢。

+1

它沒有損壞,因爲rwr說你應該使用scale來調整它的大小。 –

11

的.centerRect財產可以作爲記錄,如果你調整精靈.scale財產

嘗試:

SKTexture *texture = [SKTexture textureWithImageNamed:@"Button.png"]; 
SKSpriteNode *button = [[SKSpriteNode alloc] initWithTexture:texture]; 
button.centerRect = CGRectMake(9/32, 9/32, 14/32, 14/32); 
[self addChild:button];  
button.xScale = 128.0/texture.size.width; 
button.yScale = 64.0/texture.size.height; 
+3

最後一行代碼是否存在剪切和粘貼錯誤?它應該是YScale和高度? –

1

基於RWR的答案這裏是一個工作的init方法SKSpriteNode。我在我自己的遊戲中使用這個。基本上你會在輸出圖像周圍製作10px的插頁。然後像這樣調用它:

[[HudBoxScalable alloc] initWithTexture:[atlas textureNamed:@"hud_box_9grid.png"] inset:10 size:CGSizeMake(300, 100) delegate:(id<HudBoxDelegate>)clickedObject]; 

-(id) initWithTexture:(SKTexture *)texture inset:(float)inset size:(CGSize)size { 
    if (self=[super initWithTexture:texture]) { 

     self.centerRect = CGRectMake(inset/texture.size.width,inset/texture.size.height,(texture.size.width-inset*2)/texture.size.width,(texture.size.height-inset*2)/texture.size.height); 

     self.xScale = size.width/texture.size.width; 
     self.yScale = size.height/texture.size.height; 

    } 
    return self; 
} 
+1

不幸的是,這種方法不起作用。我正在測試iOS8。 – Ramis

2

下面是如何工作的刷新。順便說一下,我的圖像尺寸寬度是48像素,高度是52像素,但這根本不重要。任何圖像可用於:

SKSpriteNode *button = [SKSpriteNode spriteNodeWithImageNamed:@"Button.png"]; 

//(x, y, width, height). First two values are the four corners of the image that you DON'T want touched/resized (They will just be moved). 
//The second two values represent how much of images width & height you want cut out & used as stretching material. Cut out happens from the center of the image. 
button.centerRect = CGRectMake(20/button1.frame.size.width, 20/button1.frame.size.height, 5/button1.frame.size.width, 15/button1.frame.size.height); 

button.position  = CGPointMake(self.frame.size.width/2, self.frame.size.height/2); //Positions sprite in the middle of the screen. 
button.xScale  = 4; //Resizes width (This is all I needed). 
//button.yScale  = 2; //Resizes height (Commented out because I didn't need this. You can uncomment if the button needs to be higher). 
[self addChild:button]; 

閱讀稱爲本文檔中「調整一個Sprite」的部分:https://developer.apple.com/library/ios/documentation/GraphicsAnimation/Conceptual/SpriteKit_PG/Sprites/Sprites.html#//apple_ref/doc/uid/TP40013043-CH9-SW10

「圖2-4可拉伸按鈕紋理」演示如何的(X,Y,寬度,身高)的作品。