2012-03-13 1 views
14

Sto sviluppando un gioco per iPhone utilizzando COCOS2d Framework e Objective-C (in modalità/vista orizzontale).Nessuna co-ordinazione tra livelli mentre Bakground si muove a velocità diversa

Per il gioco, sto usando uno sfondo che ha quattro livelli ("Cielo" in alto, "Montagna" sotto il cielo, "Collina" sotto Montagna e "Primo piano" estremo sotto). Qui devo spostare ogni livello dello sfondo con una velocità diversa, ad esempio "Cielo" dovrebbe spostarsi più lentamente della montagna, "Montagna" dovrebbe spostarsi più lentamente di Collina e "Collina" dovrebbe spostarsi più lentamente del Primo piano.

Mentre si sposta ciascun livello con una velocità diversa, il gioco presenta un BREAK-UP TRA COORDINAMENTO DEGLI STRATI.

Ho provato a risolvere questo con una logica come: aumentare le dimensioni dell'immagine/larghezza (larghezza) in base alla sua velocità in modo che ogni livello debba terminare e ricominciare a funzionare di nuovo con la coordinazione. Non riuscivo a farlo funzionare.

Questo è il mio codice per lo spostamento del fondo:

-(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); 

} 

Sopra il codice mi dà la questione di fondo. Sto fornendo collegamenti screenshot per riferimento:

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

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

Qualsiasi aiuto avermi nella giusta direzione sarebbe molto apprezzato.

Grazie in anticipo :)

+0

Ciao amici, per favore dai un'occhiata alla mia domanda. Sto ancora aspettando. Non ho ancora trovato alcuna soluzione. Per favore aiutatemi @ALL – NSExpression

+0

Penso che potremmo perdere alcune informazioni necessarie per fornirvi una risposta più precisa. Di che taglia sono i tuoi strati? Come li stai facendo scorrere quando scorrono fino alla fine? – BobbyScon

risposta

1

cocos2d ha un supporto incorporato per questo, verifica del codice di esempio con scorrimento parallasse. http://www.cocos2d-iphone.org/archives/22

+0

Non ho capito dal link che hai fornito. Ho il codice dello sfondo in movimento, l'unico problema con quella riga di codice è Background jerking/fluttuante mentre si ripete. Si prega di leggere la mia domanda completa che ho elencato e vedere anche Screenshot in modo da poter capire il mio problema. Grazie – NSExpression

0

In base alla domanda e agli screenshot, sto interpretando il problema per il fatto che si riscontrano problemi nel far scorrere i livelli senza interruzioni. amleszk aveva ragione nel mostrarti lo scrolling della parallasse. Questo è quello che stai cercando di realizzare qui e sembra che forse il tuo approccio è spento. Penso che ci sia un problema a capire cosa intendi per rottura tra la coordinazione degli strati. Lavora su di esso 1 strato alla volta. Fai in modo che il primo piano si muova senza interruzioni, quindi ottieni il tuo livello successivo e così via indietro. I tuoi strati non si ripeteranno nello stesso momento in cui si muovono a velocità diverse e raggiungeranno i loro punti finali in momenti diversi. Dai tuoi screenshot, sembra che i livelli più veloci non si fermino fino a quando il tuo strato più lento non inizia il suo ciclo. So che hai provato a combatterlo cambiando le larghezze dei livelli per compensare, ma sarebbe stato più pulito, più semplice e meglio complesso preoccuparti di ogni livello in modo indipendente. Ma questa è solo la mia opinione.

Se il problema è che i livelli loop hanno una linea tra gli sprite o leggero tremolio, quindi una soluzione rapida che mi ha aiutato per il nervosismo/lampeggia tra sprite in loop stava aggiungendo CCDirectorProjection2D alla dichiarazione init:

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