Odpowiedz na ten temat
Strona 1 z 2 1 2 OstatniaOstatnia
Pokaż wyniki od 1 do 10 z 14

  1. Dołączył
    Aug 2011
    Skąd
    Gliwice
    Postów
    15

    Cytuj | #1

    Witam, dopiero zaczynam zabawę z Cocos2d i natknąłem na spory dla mnie problem. Otóż piszę sobie taką małą gierkę. Tworzę 6 sprite'ów (każdy dla autka jednego koloru) wrzucam je do tablicy NSArray, a następnie w funkcji moveCars którą odpalam powiedzmy co 0.01s, przesuwam każdy z nich o 1px. Po odpaleniu wywala grę. 2 dni nad tym siedzę i nic.
    mój plik .h :
    Kod:
    @interface PlayerCarLayer : CCLayer {
    	CCSprite *playerCar;
    	CCSprite *car1grey;
    	CCSprite *car1black;
    	CCSprite *car1white;
    	CCSprite *car1blue;
    	CCSprite *car1yellow;
    	CCSprite *car1green;
    	CCSprite *obj;//pomocniczy
    	NSArray *arrayOfCars;
    ....
    }
    @property(nonatomic, assign) NSArray *arrayOfCars;
    w pliku .m :
    w init():
    Kod:
    car1grey = [CCSprite spriteWithFile:@"car1.png"];
    [self addChild:car1grey z:2];
    car1black = [CCSprite spriteWithFile:@"car1black.png"];
    [self addChild:car1black z:1];
    car1blue = [CCSprite spriteWithFile:@"car1blue.png"];
    [self addChild:car1blue z:1];
    car1green = [CCSprite spriteWithFile:@"car1green.png"];
    [self addChild:car1green z:1];
    car1white = [CCSprite spriteWithFile:@"car1white.png"];
    [self addChild:car1white z:1];
    car1yellow = [CCSprite spriteWithFile:@"car1yellow.png"];
    [self addChild:car1yellow z:1];
    arrayOfCars=[NSArray arrayWithObjects: car1grey, car1black, car1blue, car1green, car1white, car1yellow, nil];
    
    [self schedule:@selector(moveCars:) interval:0.01];
    no i nieszczęsna funkcja moveCars:

    Kod:
    -(void)moveCars:(ccTime)dt
    {
    	for(int i=0; i<[arrayOfCars count]; i++){
    		obj=[arrayOfCars objectAtIndex: i];
    		if (obj.visible==YES) {
    			if (obj.position.y <= -obj.contentSize.height/2) {
    				obj.visible=NO;
    				[self addCar];
    			}
    			else {
    				obj.position=ccp(obj.position.x, obj.position.y - (speed*dt));
    			}
    		}
    	}
    }
    Próbowałem znaleźć coś w debugerze, ale też mi się nie udało.
    Tak więc pomocy !
    Komputer: MacBook White 2.4GHz C2D
    Telefon: iPhone 3G


  2. Avatar m1entus
    Dołączył
    Feb 2011
    Skąd
    Kraków, PL
    Postów
    43

    Cytuj | #2

    Po pierwsze jaki masz msg ? Daj tablice retain zamiast assign i wskaznik do obj pomocniczego nie musisz deklarowac w naglowku wystarczy jak dasz w move cars na poczatku deklaracje ale to taki offtop
    Komputer: MacBook Pro 13,3" 2,26GHz
    Telefon: iPhone 4 16Gb
    Tablet: iPad 2 16Gb WiFi


  3. Dołączył
    Aug 2011
    Skąd
    Gliwice
    Postów
    15

    Cytuj | #3

    Kompilator nie pluje się o nic, nawet żadnych ostrzeżeń. Gra się włącza, ukazuje się na ułamek sekundy i ją wywala.
    W konsoli jest takie info: Program received signal: “EXC_BAD_ACCESS”. W debugerze to samo.
    Komputer: MacBook White 2.4GHz C2D
    Telefon: iPhone 3G

  4. Avatar m1entus
    Dołączył
    Feb 2011
    Skąd
    Kraków, PL
    Postów
    43

    Cytuj | #4

    Cytat Napisał axgrzesiek Zobacz post
    Kompilator nie pluje się o nic, nawet żadnych ostrzeżeń. Gra się włącza, ukazuje się na ułamek sekundy i ją wywala.
    W konsoli jest takie info: Program received signal: “EXC_BAD_ACCESS”. W debugerze to samo.
    w takim razie w property zamiast assign daj retain i daj znac czy smiga
    Komputer: MacBook Pro 13,3" 2,26GHz
    Telefon: iPhone 4 16Gb
    Tablet: iPad 2 16Gb WiFi


  5. Dołączył
    Aug 2011
    Skąd
    Gliwice
    Postów
    15

    Cytuj | #5

    Cytat Napisał m1entus Zobacz post
    w takim razie w property zamiast assign daj retain i daj znac czy smiga
    Dałem retain, wsk do obj zadeklarowałem w ciele funkcji, ale nadal brak poprawy
    Komputer: MacBook White 2.4GHz C2D
    Telefon: iPhone 3G

  6. Avatar m1entus
    Dołączył
    Feb 2011
    Skąd
    Kraków, PL
    Postów
    43

    Cytuj | #6

    Nie wyrzucasz czegos po drodze? Chodzi o to ze probujesz sie odwolac do obiektu ktory nie istnieje juz w pamieci (zostal usuniety).
    Komputer: MacBook Pro 13,3" 2,26GHz
    Telefon: iPhone 4 16Gb
    Tablet: iPad 2 16Gb WiFi


  7. Dołączył
    May 2010
    Postów
    97

    Cytuj | #7

    Pewnie niewiele pomoge ale ja w takich sytuacjach zawsze bawie sie w komentowanie linii i szukanie na czym sie wywala, dodatkowo tez masa wyswietlen na konsole, wszystko co sie da, zaczynajac od wyswietlenia ilosci el. w tablicy zaraz po ich dodaniu, po wyswietlanie w funkcji moveCars i sprawdzenie czy jest tyle samo.
    Dodatkowo probuj wyswietlac sobie te wspolrzedne ktore chcesz zmieniac. Moze sie okazac ze probujesz zmienic cos czego nie ma i program sie wysypie.
    Komputer: MacBook pro 15" 2010
    Telefon: iPhone 4
    Odtwarzacz: iPhone 4


  8. Dołączył
    Aug 2011
    Skąd
    Gliwice
    Postów
    15

    Cytuj | #8

    Cytat Napisał izdum Zobacz post
    Pewnie niewiele pomoge ale ja w takich sytuacjach zawsze bawie sie w komentowanie linii i szukanie na czym sie wywala
    Tak zrobiłem i się okazuje że jeśli w moveCars dam komentarz w ten sposób (jednym słowem funkcja nic nie robi):
    Kod:
    -(void)moveCars:(ccTime)dt
    {
    	CCSprite *obj;
    	/*for(unsigned i=0; i<[arrayOfCars count]; i++){
    		.......
    	}
    	*/
    }
    to wszystko gra. Ale wystarczy wykomentować wnętrze pętli:
    Kod:
    -(void)moveCars:(ccTime)dt
    {
    	CCSprite *obj;
    	for(unsigned i=0; i<[arrayOfCars count]; i++){
            /*
    		.......
            */
    	}
    }
    a program się sypie.
    Komputer: MacBook White 2.4GHz C2D
    Telefon: iPhone 3G


  9. Dołączył
    May 2010
    Postów
    97

    Cytuj | #9

    Sprobuj zrobic tak:

    for(id obj in arrayOfCars){

    }

    czy tam poprostu for( obj in ...)
    Ostatnio edytowane przez izdum ; 05.02.2012 o 22:34
    Komputer: MacBook pro 15" 2010
    Telefon: iPhone 4
    Odtwarzacz: iPhone 4


  10. Dołączył
    Dec 2010
    Skąd
    Kraków
    Postów
    18

    Stosując zapis jak poniżej nie odnosisz się do @property arrayOfCars tylko bezpośrednio do zmiennej o tej nazwie:
    Kod:
    arrayOfCars=[NSArray arrayWithObjects: car1grey, car1black, car1blue, car1green, car1white, car1yellow, nil];
    Dostęp do property za pomocą self.arrayOfCars

    Później w pętli próbujesz wysłać message "count" do arrayOfCars, które jest nil, bo nie skorzystałeś z @property.
    Ostatnio edytowane przez gzajac ; 05.02.2012 o 22:40
    Komputer: Mac Mini, PC

Odpowiedz na ten temat
Strona 1 z 2 1 2 OstatniaOstatnia