2010-12-15 42 views
5

Tôi đang làm việc trên một ứng dụng mà tôi muốn sử dụng cocos2d trong màn hình chính của ứng dụng, nhưng không phải ở nơi khác (ở những nơi khác tiêu chuẩn UIKit công cụ là thích hợp hơn). Vì vậy, tôi đã có EAGLView của tôi thiết lập như là xem gốc trong một UINavigationController, và khi người dùng gõ vào đúng nơi tôi đẩy một bộ điều khiển xem mới vào bộ điều khiển nav.cocos2d và UINavigationController rắc rối

Điều đó hoạt động rất tốt, cho đến nay. Công cụ cocos2d/chipmunk trong chế độ xem ở nhà hoạt động rất tốt, đẩy một bộ điều khiển chế độ xem mới hoạt động như mong đợi.

Nhưng khi tôi quay lại chế độ xem nhà, không có gì ở đó. Tất cả những gì tôi thấy là nền cửa sổ và thanh điều hướng.

Tôi đặt điểm ngắt trong chế độ xem -viewDidAppear của trình điều khiển chế độ xem gốc: để xem điều gì đang diễn ra sau cửa sổ bật lên và cho đến nay mọi thứ xuất hiện bình thường (hoặc ít nhất cũng giống như trước khi nhấn).

Việc đẩy chỉ là một bộ điều khiển điều hướng tiêu chuẩn bog-standard. Tôi không thấy bất kỳ cảnh báo bộ nhớ nào. Bất cứ ai có suy nghĩ về những gì đang xảy ra?

Có một dự án trình diễn đơn giản cho thấy hành vi này tại http://cl.ly/1Q050s0h2k47032K1Y1N

này được dựa trên cocos2d + chipmunk mẫu dự án. Chạm vào Grossini và một bộ điều khiển xem mới được đẩy lên ngăn xếp. Nhấn vào nút quay lại và Grossini đã biến mất.

Và chỉ để làm cho nó thú vị, vấn đề này chỉ tồn tại trên một thiết bị iOS (tôi đang chạy 4.1), không phải trong giả lập.

+0

tôi nghi ngờ đây là vấn đề, nhưng bạn đang bị rò rỉ hai chàng trai này: http://cl.ly/1J26180i383F3H0z3V2L –

+0

Tôi thậm chí không chắc chắn những gì những người đang có, nhưng chúng không liên quan. –

+0

Tôi thấy rằng nếu my -viewDidLoad gọi -setNeedsLayout trên EAGLview, các đối tượng cocos2d được khôi phục và chế độ xem chính hiển thị sau khi trình điều khiển điều hướng bật lên gốc. Có một nhấp nháy đáng chú ý, mặc dù-- trong một khoảnh khắc, các đối tượng cocos2d không nhìn thấy được, nhưng sau đó chúng xuất hiện. Một phiên bản sửa đổi của bản demo của tôi mà kết hợp này là tại http://cl.ly/1L423a1x27373t1q0s0y Điều này cảm thấy như tiến bộ nhưng đó là một nhấp nháy khó chịu. –

Trả lời

6

Tôi đã giải quyết được sự cố của bạn. Bạn phải làm theo một số bước trong mã của mình.

Trong tệp tin RootViewController nib thay đổi chế độ xem Nhận dạng từ HomeView thành UIView.

Tạo một Trang chủ Xem Object trong RootViewController Lớp

@interface RootViewController : UIViewController { 
    HomeView *homeViewObj; 
} 

trong tập tin RootViewController.m trong phương pháp viewDidLoad thêm mã này

homeViewObj = [[HomeView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)]; 
[self.view addSubview:homeViewObj]; 

và thay thế mã này trong phương pháp viewDidLoad bạn tại địa điểm theo yêu cầu.

CCDirector *director = [CCDirector sharedDirector]; 

    // attach the openglView to the director 
    [director setOpenGLView:(EAGLView *)homeViewObj]; 

    [director setDeviceOrientation:kCCDeviceOrientationPortrait]; 
    [director setAnimationInterval:1.0/60]; 
    [director setDisplayFPS:YES]; 

Sau đó, sự cố sẽ được giải quyết, Tốt nhất.

Kính trọng,

Satya

+0

Cảm ơn bạn đã khắc phục sự cố. Tôi không hoàn toàn hiểu tại sao, mặc dù. Bạn có thể giải thích nó không? –

+0

Tom, tôi đã thực thi mã của bạn và thử nghiệm nó, tôi đã tìm thấy một thứ, khi bạn trở về nhà Xem, nó không hiển thị "EAGLView" nhưng nó đang phát hiện các chạm và thực hiện các hoạt động. Tại thời điểm khai thác kép, khung nhìn đã đi đến 2ndView Controller và sau đó tôi bấm lại, sau đó được hiển thị EAGLView. Sau đó, tôi hiểu rằng một số xem là lớp phủ trên "EAGLView", vì vậy tôi đặt chế độ xem bình thường trong InterfaceBuilder và thêm EAGLView làm chế độ xem phụ. Sau đó, vấn đề được giải quyết – Satya

+0

Hey !! Tôi đang tìm kiếm như vậy, Thanx Satya –

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