Odpowiedz na ten temat
Pokaż wyniki od 1 do 2 z 2
  1. Avatar Moriquendi
    Dołączył
    Oct 2009
    Skąd
    Zamość
    Postów
    233

    Cytuj | #1

    Mam problem z wybieraniem leveli w swojej grze.
    Używam cocos2d.

    Najpierw ładuję 1 level. Wszystko działa bez problemów.
    Następnie, wybieram 2 level. Żeby to zrobić muszę 'wyczyścić' poprzednie Sprity mapy....

    Może po kolei.
    Najpierw tworzę CCSprite:
    Kod:
    CCSprite *sprite
    sprite = [CCSprite spriteWithSpriteFrameName:stttt];
    Teraz mam pewną klasę, w której ten CCsprite jest przechowywany:
    Kod:
    class Obiekt
    {
      CCSprite* texture;
    };
    
    .....
    
    Obiekt obiekty[100];
    obiekty[0].texture = sprite;
    No i w tym momencei mam wskaźnik do tego CCSprite'a i mogę potem na nim wykonywać różne operacje.

    .....
    Teraz zmieniam level na 2.
    Najpierw czyszczę te obiekty:
    Kod:
    obiekty[i].texture = nil;
    i wszystko powtarzam.
    Problem w tym,że nie mogę przypisać nowego CCSprite do tego wskaźnika.
    Gdy robię:
    Kod:
    obiekty[0].texture = sprite;
    NSLog(@"wskaźnik z obiektu: %p", obiekty[0].texture);
    to NSlog zwraca "0x0"


    Coś nie tak... Jak mogę wyczyścić te wszystkie obiekty żebym mógł ponownie przypisywać do nich CCSprite.
    Komputer: iMac 27"
    Telefon: iPhone 3G
    Tablet: iPad 2 64GB



  2. Dołączył
    Sep 2010
    Postów
    24

    Cytuj | #2

    Po pierwsze jeśli masz CCsprite to pewnie dodałeś go gdzieś wczesniej [Layer addObject:Sprite] zwiększając 'retainCount', żeby go usunąć musisz najpierw usunać z rodzica (removeObject) a potem ewentualnie zwolnić go z pamięci (release, jeśli był wczesniej retain) ,inaczej będziesz miał wycieki pamięci.

    Wg twojego kodu podmieniasz pointer tekstury która jest już dodana do rodzica, więc dla rodzica nie ma widocznej zmiany - czyli jak pisałem musisz najpierw usunąć z rodzica, i ponownie dodać. Inna możliwość to podmiana samego obrazka nie zmieniając sprita (nie pamiętam nazwy metody)
    Ostatnio edytowane przez FFranekk ; 29.12.2010 o 10:27

Odpowiedz na ten temat