2012-03-13 9 views
14

Tôi đang phát triển một trò chơi iPhone bằng cách sử dụng COCOS2d Framework và Objective-C (trong chế độ Landscape/view).Không Co-Ordination giữa Layers trong khi Bakground Moves với tốc độ khác nhau

Đối với trò chơi, tôi đang sử dụng Nền có Bốn Lớp ('Bầu trời' trên đầu, 'Núi' bên dưới bầu trời, 'Đồi' bên dưới Núi và 'Phía trước' cực bên dưới). Ở đây tôi cần phải di chuyển từng lớp của nền với một tốc độ khác nhau như 'bầu trời' nên di chuyển chậm hơn so với núi, 'núi' nên di chuyển chậm hơn so với đồi và 'đồi' nên di chuyển chậm hơn so với Foreground.

Trong khi tôi di chuyển từng Lớp với một tốc độ khác, trò chơi sẽ trải nghiệm BREAK BẬT GIỮA ĐƠN XIN LỆNH CỦA LAYERS.

Tôi đã cố gắng giải quyết vấn đề này bằng cách: tăng kích thước hình ảnh/Lớp (chiều rộng) theo tốc độ của nó sao cho mỗi lớp sẽ kết thúc và bắt đầu chạy lại với sự phối hợp. Không thể làm cho nó hoạt động.

Đây là mã của tôi cho Moving Background:

-(void) backgroundmoving 
{ 

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { 
    //return kDevice_iPad; 

    // Code for Each Layer's Moving Speed FOR iPad 
    bk_f -=1.0; 
    bk_f1 -=1.4; 
    bk_f2 -=1.8; 
    bk_f3 -=2.2; 
} else { 

    // Code for Each Layer's Moving Speed FOR iPhone 
    bk_f -=0.2; 
    bk_f1 -=0.4; 
    bk_f2 -=0.6; 
    bk_f3 -=0.8; 

} 

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { 

    //return kDevice_iPad; 
    if (bk_f <= -920*1.1) {bk_f=0;} 
    if (bk_f1 <= -920*1.1) {bk_f1=0;} 
    if (bk_f2 <= -920*1.1) {bk_f2=0;} 
    if (bk_f3 <= -920*1.1) {bk_f3=0;} 
    if (bk_f4 <= +920*1.1) {bk_f4=0;} 
    } else { 
    if (bk_f <= -480*2) {bk_f=0;} 
    if (bk_f1 <= -480*2) {bk_f1=0;} 
    if (bk_f2 <= -480*2) {bk_f2=0;} 
    if (bk_f3 <= -480*2) {bk_f3=0;} 
    if (bk_f4 <= +480*2) {bk_f4=0;} 


} 

_level_bkgrnd.position = ccp(bk_f, 0); 
_level_bkgrnd1.position = ccp(bk_f1, 0); 
_level_bkgrnd2.position = ccp(bk_f2, 0); 
_level_bkgrnd3.position = ccp(bk_f3, 0); 

} 

Trên đang mang lại cho tôi những vấn đề xung quanh. Đang cung cấp liên kết ảnh chụp màn hình để tham khảo:

1) http://screencast.com/t/seUjXClz

2) http://screencast.com/t/8tHq2KYnnMa

Bất kỳ sự giúp đỡ chỉ cho tôi đi đúng hướng sẽ được đánh giá rất nhiều.

Cảm ơn trước :)

+0

Xin chào các bạn, xin hãy xem Truy vấn của tôi. Tôi đang đợi. Chưa có giải pháp nào. Xin hãy giúp tôi @ALL – NSExpression

+0

Tôi nghĩ rằng chúng tôi có thể thiếu một số thông tin cần thiết để cung cấp cho bạn câu trả lời chính xác hơn. Lớp của bạn có kích cỡ nào? Làm thế nào bạn lặp lại chúng khi chúng cuộn đến cuối? – BobbyScon

Trả lời

1

cocos2d đã hỗ trợ việc này, kiểm tra một số mã ví dụ với cuộn Parallax. http://www.cocos2d-iphone.org/archives/22

+0

Tôi không hiểu bởi liên kết bạn đã cung cấp. Tôi có mã chuyển động nền, vấn đề duy nhất với những dòng mã là Background jerking/dao động trong khi lặp lại. Vui lòng đọc Truy vấn đầy đủ của tôi mà tôi đã liệt kê và xem Ảnh chụp màn hình để bạn có thể hiểu được sự cố của mình. Cảm ơn – NSExpression

0

Dựa trên câu hỏi và ảnh chụp màn hình của bạn, tôi giải thích vấn đề của bạn là bạn đang gặp sự cố khi đưa lớp của bạn vào vòng lặp liền mạch. amleszk đã chính xác trong việc hướng bạn về phía di chuyển thị sai. Đó là những gì bạn đang cố gắng để thực hiện ở đây và nó có vẻ như có lẽ cách tiếp cận của bạn là tắt. Tôi nghĩ rằng có một vấn đề hiểu được ý của bạn bằng cách chia tay giữa sự phối hợp của các lớp. Làm việc trên nó 1 lớp cùng một lúc. Làm cho nền trước của bạn lặp lại một cách liền mạch, sau đó lấy lớp tiếp theo của bạn và tiếp tục di chuyển trở lại. Các lớp của bạn sẽ không lặp lại cùng lúc khi chúng di chuyển với tốc độ khác nhau và sẽ đạt đến điểm kết thúc của chúng ở những thời điểm khác nhau. Từ ảnh chụp màn hình của bạn, có vẻ như các lớp chuyển động nhanh hơn không lặp lại cho đến khi lớp di chuyển chậm nhất của bạn bắt đầu vòng lặp của nó. Tôi biết bạn đã cố gắng để chống lại điều này với việc thay đổi độ rộng lớp để bù đắp, nhưng nó sẽ được sạch hơn, dễ dàng hơn, và tốt hơn tổng thể phải lo lắng về mỗi lớp một cách độc lập. Nhưng đó chỉ là ý kiến ​​của tôi.

Nếu vấn đề của bạn là lớp looped của bạn có một ranh giới giữa các sprite hoặc jitter nhẹ, sau đó một giải pháp nhanh chóng mà đã giúp tôi cho bồn chồn/nhấp nháy giữa sprites lặp được thêm CCDirectorProjection2D để báo cáo kết quả init:

-(id) init 
{ 
    if((self=[super init])) 
    { 
     [[CCDirector sharedDirector] setProjection:CCDirectorProjection2D];