2012-03-13 6 views
14

Rozwijam grę na iPhone'a za pomocą COCOS2d Framework i Objective-C (w trybie poziomym/widoku).Brak współrzędowania między warstwami, podczas gdy Bakground porusza się z różną prędkością

W grze używam tła, które ma cztery warstwy ("Sky" na górze, "Mountain" pod niebem, "Hill" poniżej góry i "pierwszy plan" poniżej). Tutaj muszę przesunąć każdą warstwę tła z inną prędkością, np. "Niebo" powinno poruszać się wolniej niż góra, "góra" powinna poruszać się wolniej niż góra, a "góra" powinna poruszać się wolniej niż na pierwszym planie.

Podczas przenoszenia każdej warstwy z inną prędkością, gra doświadcza PRZERWY MIĘDZY WSPÓŁRZĘDNIENIEM WARSTW.

Próbowałem rozwiązać to za pomocą logiki, jak: zwiększenie rozmiaru obrazu/warstwy (szerokości) zgodnie z jego prędkością, tak aby każda warstwa powinna kończyć się i zacząć ponownie działać z koordynacją. Nie można go uruchomić.

To jest mój kod Przesuwanie Tło:

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

} 

Powyższy kod daje mi ten problem tła. Dołączam linki screenshot dla odniesienia:

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

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

żadnej pomocy wskazując mnie we właściwym kierunku byłoby bardzo mile widziane.

z góry dzięki :)

+0

Cześć przyjaciele, proszę spojrzeć na moje zapytanie. Czekam wciąż. Jeszcze nie ma rozwiązania. Proszę mi pomóc @ALL – NSExpression

+0

Myślę, że może nam brakować pewnych informacji potrzebnych do udzielenia bardziej precyzyjnej odpowiedzi. Jakiego rozmiaru są twoje warstwy? Jak je zapętlasz, kiedy przewijają do końca? – BobbyScon

Odpowiedz

1

Cocos2d ma wbudowane wsparcie dla tego, kasy jakiś przykładowy kod z Parallax przewijania. http://www.cocos2d-iphone.org/archives/22

+0

Nie zrozumiałem za pomocą podanego linku. Mam kod ruchomego tła, jedynym problemem z tą linią kodu jest szarpanie/fluktuacja w tle podczas powtarzania. Zapoznaj się z pełnymi zapytaniami, które zamieściłem na liście, a także zobacz zrzut ekranu, aby zrozumieć mój problem. Dzięki – NSExpression

0

Na podstawie pytania i zrzutów ekranowych, interpretuję Twój problem polegający na tym, że masz problem z bezproblemowym układaniem warstw. Amleszk miał rację wskazując na przewijanie paralaksy. To właśnie próbujesz osiągnąć i wygląda na to, że Twoje podejście jest wyłączone. Myślę, że problem polega na zrozumieniu, co masz na myśli przez zerwanie między koordynacją warstw. Pracuj nad nim 1 warstwą na raz. Spraw, aby Twój pierwszy plan był płynnie przechwytywany, następnie uzyskaj kolejną warstwę i tak dalej. Twoje warstwy nie powtórzą się w tym samym czasie, kiedy poruszają się z różnymi prędkościami i osiągną swoje punkty końcowe w różnych momentach. Z twoich zrzutów ekranu wynika, że ​​szybciej poruszające się warstwy nie wirują, dopóki najwolniejsza warstwa ruchoma nie zacznie pętli. Wiem, że próbowałeś to zwalczyć zmieniając szerokość warstw, aby to zrekompensować, ale byłoby to czystsze, łatwiejsze i lepiej, gdybyś martwił się każdą warstwą niezależnie. Ale to tylko moja opinia.

Jeśli problem jest to, że zapętlone warstwy mają linię pomiędzy duszków lub lekkim jitter, a następnie szybkie rozwiązanie, które pomogło mi na trema/miga między zapętlone duszków było dodanie CCDirectorProjection2D do rachunku inicjującego:

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