2013-10-31 16 views
5

Tôi đã trải qua tài liệu SpriteKit của Apple và đi qua một tính năng thực sự hữu ích mà tôi có thể sử dụng khi lập trình UI của mình. Vấn đề là tôi không thể làm cho nó hoạt động được.iOS Sprite Kit - thuộc tính .centerRect của SKSpriteNode không hoạt động

Xin xem trang này và di chuyển xuống "Thay đổi kích thước một Sprite" - Apple Docs

Tôi có nghĩa là sao chép kích thước hình ảnh và sử dụng cùng mã trong trường hợp tôi đã làm sai điều gì. Nhưng tôi luôn kết thúc bằng một hình ảnh được kéo dài thay vì "mũ kết thúc" chính xác ở cùng một tỷ lệ.

tôi đề cập đến mã này:

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); 

Tôi đang làm gì sai? Có một bước tôi đã bỏ lỡ?

EDIT:

Đây là mã tôi đang sử dụng. Tôi đã loại bỏ nó khỏi lớp nút của tôi và cố gắng sử dụng nó với một SKSPriteNode nhưng vẫn còn vấn đề vẫn tồn tại. Tôi cũng đã thay đổi hình ảnh chỉ để chắc chắn rằng nó không phải là điều đó. Hình ảnh im sử dụng là 32x32 ở kích thước bình thường.

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

Ảnh chụp màn hình vui lòng? –

+0

Khi nào/làm cách nào để bạn thêm nút vào chế độ xem của mình? – jacerate

+0

Tôi thêm nút trong phương pháp init của SKScene – Tomoso

Trả lời

2

9/32 là phân chia số nguyên, vì vậy kết quả truyền cho CGRectMake là zero. Ditto ba tham số khác. Nếu bạn sử dụng các chữ nổi như ví dụ bạn trích dẫn, bạn có thể nhận được kết quả tốt hơn.

-2

Có, tôi nhận thấy rằng sau khi kiểm tra NSLOG, tôi đã đưa ra và sửa nó ngay sau khi đăng.

Nhưng theo bài viết này thuộc tính '.centerRect' bị hỏng và không hoạt động.

Link

(Ngoài ra tôi đã tìm kiếm các diễn đàn nhà phát triển của Apple và phát hiện 3 bài viết trích dẫn cùng một vấn đề. Apple đã không cố định vấn đề này được nêu ra.

+1

Nó không bị hỏng, vì rwr nói bạn nên sử dụng tỷ lệ để thay đổi kích thước của nó. –

11

Thuộc tính .centerRect hoạt động như tài liệu nếu bạn điều chỉnh sprites .scale tài sản

Hãy thử:.

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

Có lỗi cắt và dán trên dòng mã cuối cùng không? Có nên là yScale & height? –

1

Dựa trên câu trả lời của RWR đây là một phương pháp init làm việc cho một SKSpriteNode. Tôi sử dụng điều này trong trò chơi của riêng tôi. Về cơ bản bạn làm cho insets của 10px tất cả xung quanh hình ảnh đầu ra. Và sau đó gọi nó như thế này:

[[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

Thật không may cho tôi phương pháp này không hoạt động. Tôi đang thử nghiệm trên iOS8. – Ramis

2

Đây là cách làm mới chính xác hoạt động này. Nhân tiện, chiều rộng hình ảnh của tôi là 48 pixel và chiều cao là 52 pixel, nhưng điều này không quan trọng chút nào. Bất kỳ hình ảnh có thể được sử dụng:

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]; 

Đọc phần gọi là "Thay đổi kích thước một Sprite" trong tài liệu này: https://developer.apple.com/library/ios/documentation/GraphicsAnimation/Conceptual/SpriteKit_PG/Sprites/Sprites.html#//apple_ref/doc/uid/TP40013043-CH9-SW10

'Hình 2-4 Một nút kết cấu căng ra' chứng minh như thế nào (x, y, width , chiều cao) hoạt động.

Các vấn đề liên quan