Trong ứng dụng của tôi, tôi cần một cái gì đó giống như một hệ thống hạt vì vậy tôi đã điều sau đây:Làm thế nào để hiển thị hiệu quả nhiều Hình ảnh? (IPhone lập trình)
Trong khi ứng dụng khởi Tôi tải một UIImage
laserImage = [UIImage imageNamed:@"laser.png"];
UIImage * laserImage được khai báo trong giao diện của Bộ điều khiển của tôi. Bây giờ mỗi khi tôi cần một hạt mới mã này làm cho con người:
// add new Laserimage
UIImageView *newLaser = [[UIImageView alloc] initWithImage:laserImage];
[newLaser setTag:[model.lasers count]-9];
[newLaser setBounds:CGRectMake(0, 0, 17, 1)];
[newLaser setOpaque:YES];
[self.view addSubview:newLaser];
[newLaser release];
Xin lưu ý rằng những hình ảnh chỉ 17px * 1px nhỏ và model.lasers là một mảng nội bộ để làm tất cả những tính toán tách từ sản lượng đồ họa. Vì vậy, trong vòng lặp vẽ chính của tôi, tôi đặt tất cả các vị trí của UIImageView đến các vị trí tính theo model.lasers mảng của tôi:
for (int i = 0; i < [model.lasers count]; i++) {
[[self.view viewWithTag:i+10] setCenter:[[model.lasers objectAtIndex:i] pos]];
}
tôi tăng lên các thẻ bằng cách 10 vì mặc định là 0 và tôi không muốn di chuyển tất cả các chế độ xem với thẻ mặc định.
Vì vậy, hoạt ảnh có vẻ đẹp với khoảng 10 - 20 hình ảnh nhưng thực sự chậm khi làm việc với khoảng 60 hình ảnh. Vì vậy, câu hỏi của tôi là: Có cách nào để tối ưu hóa điều này mà không cần bắt đầu lại trong OpenGl ES không?
Đây là câu trả lời đúng. Mã của bạn sẽ hoạt động tốt miễn là CALayers sử dụng của bạn và có từng sử dụng cùng một layer.contents đặt cho cùng một hình ảnh CG. Việc thưởng cho toàn bộ trò chơi của bạn trong OpenGL sẽ là quá mức cần thiết, bạn chỉ cần không phân bổ tấn UIImageView, đó là gốc của vấn đề triển khai của bạn. Xem http://developer.apple.com/library/ios/#DOCUMENTATION/Cocoa/Conceptual/CoreAnimation_guide/SettingUpLayerObjects/SettingUpLayerObjects.html#//apple_ref/doc/uid/TP40004514-CH13-SW12 – MoDJ