Có cách nào (thực hành tốt nhất) trong lớp để móc các sự kiện khi SKSpriteNode (hoặc SKNode) được thêm vào và bị xóa khỏi nút cha không?SKSpriteNode, được thêm vào/gỡ bỏ khỏi móc chính
Trả lời
Kobold Kit thêm phương thức gọi lại didMoveToParent
và willMoveFromParent
cho tất cả các lớp Nút KK *.
Điều này đạt được bằng cách phân lớp tất cả các lớp nút SK * và ghi đè các phương thức addChild
và removeChild
tương ứng và các biến thể của chúng. Sau đó, họ gọi các phương thức danh mục ở trên trên nút, tùy thuộc vào việc nút đã được thêm hay xóa.
Thật không may chúng tôi không thể phân lớp SKNode để thêm phương thức cho tất cả các lớp SKNode - tất cả nút SK * khác sẽ vẫn có SKNode ban đầu làm cha mẹ của nó. Bên cạnh lớp con, bạn cũng có thể thêm các phương thức addChild/removeChild tùy chỉnh (giả sử addNode/removeNode) trong một danh mục SKNode và chỉ sử dụng chúng. Sau đó, họ sẽ gửi một thông báo willAdd/didRemove đến nút trước khi gọi thực hiện addChild/removeChild gốc.
Về mặt lý thuyết, điều này cũng có thể được thực hiện bằng cách làm lộn xộn các phương thức addChild/removeChild trên lớp SKNode. Nhưng nếu tôi nhớ chính xác đó là những gì ban đầu tôi đã thử, và nó không hiệu quả - tôi không nhớ tại sao chính xác, một trong những lý do có thể là các lớp con của SKNode có thể thực hiện các phiên bản addChild/removeChild của riêng chúng mà không cần gọi thực hiện, hoặc gọi thực hiện siêu đơn giản là không chạy các phương thức bị xáo trộn. Một lý do khác có thể là các phương thức addChild/removeChild trong nội bộ được chuyển tiếp trực tiếp đến công cụ C++ Sprite Kit bên dưới chứ không phải được chuyển lên trên trong phân cấp lớp SKNode.
Nếu không cần Kobold Kit, bạn có thể phân lớp SKSpriteNode (hoặc bất kỳ SKNode nào cho thực tế) và mở rộng hàm removeFromParent
mà SKNodes sở hữu.
Ví dụ:
FLSprite.m:
#import "FLSprite.h"
@implementation FLSprite
-(void)removeFromParent {
[super removeFromParent];
NSLog(@"I print when I'm Removed");
//here's where you'll add your hooking functions
}
@end
MyScene.m:
-(id)initWithSize:(CGSize)size {
if (self = [super initWithSize:size]) {
FLSprite* sprite = [FLSprite spriteNodeWithColor:[UIColor blackColor] size:CGSizeMake(200, 100)];
[sprite setPosition:CGPointMake(100.0, 50.0)];
[self addChild:sprite];
[sprite removeFromParent];
}
return self;
}
Như để thêm một đứa trẻ, kể từ khi bạn thêm một đứa trẻ như vậy (trong hầu hết các trường hợp) [self addChild:node];
bạn cần mở rộng addChild
trong chế độ xem bạn thêm vào. Ví dụ, bạn sẽ thêm dòng sau vào MyScene.m
của bạn, vì chúng tôi có thêm sprite để xem rằng
-(void)addChild:(SKNode *)node {
[super addChild:node];
NSLog(@"added child");
}
này là khá nhiều những gì Steffen Itterheim đã làm để đạt được chức năng này, như ông giải thích trong gửi bài của mình .
Vấn đề ở đây có thể là một vài các biến thể khác như insertChild và các công cụ khác như removeChild của cha mẹ. Nó có thể nhận được khó khăn để nắm bắt tất cả những người. Dù sao làm công cụ như một lớp trong trò chơi tạm dừng bật lên (có thể là một sknode hoặc skspritenode) là khó khăn để có được quyền. – Jonny
không phải nếu bạn đang phân lớp SKNode/SKSpriteNode, nó sẽ không phức tạp. nhưng tbh, nếu bạn đang dựa vào một cái móc với addChild, bạn có thể đi về những điều sai đường. –
- 1. Thêm móc vào TortoiseHg
- 2. Thêm hiệu ứng hình ảnh vào SKSpriteNode khi nhấn
- 3. Thêm nhãn vào SKSpriteNode mà không bị chạm vào
- 4. Sprite Kit iOS 7 - cách thêm bóng vào SKSpriteNode?
- 5. Gắn nhãn SKLabelNode trên SKSpriteNode
- 6. React biết thành phần được loại bỏ khỏi DOM bằng cách nào?
- 7. SKSpriteNode bị ẩn bên dưới nút cha
- 8. Tự động thêm .gitignore và móc vào git init
- 9. Thay đổi hình ảnh SKSpriteNode
- 10. Thêm móc thông thường vào chế độ js
- 11. Khi móc của Gradle được thêm vào vòng đời xây dựng?
- 12. Buộc dỡ bỏ DLL khỏi assembly
- 13. Có thể thêm một "móc Precommit" vào TFS không?
- 14. Kích thước và chia tỷ lệ SKSpriteNode
- 15. Thêm bộ lọc vào móc từ xa trước của OneRemote
- 16. Làm cách nào để thêm móc vào gitlab?
- 17. Cách xóa thuộc tính khỏi mục được thêm bằng jquery
- 18. làm thế nào để ném SKSpriteNode?
- 19. Loại bỏ - Xóa mục khỏi ViewModel không xóa khỏi DOM
- 20. Góc 2 - Chọn mục danh sách được nhấp (Thêm 'hoạt động' và loại bỏ khỏi anh chị em)
- 21. Để móc hoặc không móc - git
- 22. chức năng Javascript móc
- 23. git hooks: có móc móc không?
- 24. jQuery & Chrome - Tìm móc móc nút
- 25. Dỡ bỏ/Xóa nội dung khỏi iFrame
- 26. móc git được nhận trước bị từ chối với heroku
- 27. Làm thế nào để ngăn chặn móc tắt máy khỏi bị bế tắc?
- 28. Móc Drupal được kích hoạt sau khi nút được tạo
- 29. Cách thêm tập tin vào chỉ mục trong móc trước git
- 30. Cách thêm hệ thống "móc cửa sổ" để được thông báo về cửa sổ đang được tạo/kích hoạt?
Dòng dưới cùng, Bộ công cụ Sprite có thể lớn và tuyệt vời nhưng những gì nó thiếu là cộng đồng nguồn mở ... – Jonny
Bạn có thể nói điều tương tự về SDK iOS ... @Jonny –