2013-08-15 20 views
6

Tôi đang sử dụng bộ nhớ cache khung sprite để tải lên plists và sprite-sheets, để sử dụng cho hoạt ảnh. tôi có 2 cách tiếp cận và tôi chắc chắn rằng một trong số đó là sai.Sử dụng bộ nhớ cache khung sprite trong cocos2d-đúng cách

  1. tôi phải tải tất cả những gì tôi có thể để bộ nhớ cache vào đầu vì phải mất thời gian, vì vậy vào lúc bắt đầu của cảnh tôi tải tất cả những gì tôi cần phải tương lai gần. (Nhưng bây giờ bộ nhớ cache của tôi là đầy đủ!)

  2. bộ nhớ cache nên để trống như tôi có thể, vì vậy tôi đang tải vào bộ nhớ cache tại thời điểm tôi bắt đầu hoạt ảnh (phải mất một thời gian không phải là nó? Tôi nghĩ rằng nó flicks trò chơi của tôi), và loại bỏ nó tại cùng một khoảnh khắc tôi được làm với nó. (Nay là bộ nhớ cache là không đầy đủ nhưng tôi phải tải/tải lại nhiều lần.)

  3. làm i phải chăm sóc để loại bỏ các sprites không sử dụng từ bộ nhớ cache mỗi lần?

tải để bộ nhớ cache là:

[[CCSpriteFrameCache sharedSpriteFrameCache] removeSpriteFrameByName:@"stopAnim.plist"]; 

loại bỏ không sử dụng là:

[[CCSpriteFrameCache sharedSpriteFrameCache] removeUnusedSpriteFrames]; 

tôi có thể nhìn thấy trong iPad của tôi rằng hệ thống đang cố gắng để loại bỏ sprites không sử dụng và có vấn đề. chính xác cách làm việc là gì?

Trả lời

3

Sau nhiều nghiên cứu, tôi đã đến một số kết luận:

Đầu tiên, nó làm mất thời gian để tải các khung hình trong thời gian thực (trong khi hoạt hình đang bắt đầu) đến batchNode, và trong trường hợp hình ảnh lớn (iPad) đôi khi đóng băng cảnh.

Vì vậy, trong một số trường hợp như vậy, bạn phải tải những hình ảnh để cache tại phương pháp init để tránh điều đó, bởi vì bạn không có cách nào khác, và đây là lý do tại sao chúng tôi có bộ nhớ cache anyway:

[[CCTextureCache sharedTextureCache] addImage:@"the_heavy_image.png"]; 

và nếu hoạt ảnh này xảy ra thường xuyên, bạn không muốn xóa nó khỏi bộ nhớ cache.

thứ khác nên được xóa khỏi bộ nhớ cache nếu bạn không sử dụng nó

[[CCTextureCache sharedTextureCache] removeUnusedTextures]; 

sẽ bị xóa khỏi bộ nhớ cache chỉ sprites đó đã bị xóa khỏi màn hình rồi.

của nó không đủ để chỉ xóa các khung:

[[CCSpriteFrameCache sharedSpriteFrameCache] removeUnusedSpriteFrames]; 

Trong tình huống khác, nơi sprites-sheets hình ảnh không phải là lớn, bạn có thể tải chúng vào batchNode tại thời điểm các hình ảnh động là bắt đầu, và loại bỏ cuối cùng.

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