2013-10-07 81 views
6

Pracowałem nad grą i przetestowałem ją z poprzednią wersją iOS, zagrałem setki razy i nie widziałem ani jednego wypadku, po tym jak Zainstalowałem iOS7 i zaktualizowałem xcode Właśnie wypróbowałem moją aplikację i ... teraz czasami się zawiesza. Wypadki nie zdarzają się w określonym momencie lub akcji, są po prostu całkowicie losowe, czasami natychmiast się zawieszają, czasami po 2-3 grach, próbowałem zrobić to samo, aby sprawdzić, czy jest to coś szczególnego, ale wydaje się, że nie bądź przynajmniej nie coś zauważalnego w ten sposób. Używam duszków i batchnodów w scenie gry.iOS 7 i Cocos2d, exc_bad_access na glDrawElements całkowicie losowo

Dokładnie w tej linii kodu (około 522) w pliku CCTextureAtlas.m:

glDrawElements(GL_TRIANGLES, (GLsizei) n*6, GL_UNSIGNED_SHORT, (GLvoid*) (start*6*sizeof(_indices[0]))); 

ponieważ nie dokonała żadnych zmian w kodzie Gorąco wątpliwości, że może być coś zrobiłem, prawdopodobnie to jest coś związanego ze zmianami w iOS7, które mają wpływ na cocos2d? Nawet nie jestem ekspertem z OpenGL, więc mam twardy czas, aby zrozumieć, co się dzieje ...

oczywiście w grze mam pewne animacje trwające ...

Dodatkowe informacje:

  • ten NIE dzieje się po ostrzeżeniu o pamięci (w ogóle nie mam ostrzeżenia o pamięci).
+1

upewnij się, że nie ma czegoś powodując połączeń OpenGL w innym wątku/kolejki, które mogłyby uszkodzić stan VBO (co glDrawElements próbuje narysować), tuż przed wywołaniem glDrawElements(). – mattorb

+0

to też dzieje się dla mnie ... ale tylko w symulatorze (pamiętaj, że "nie widząc" czegoś trudno udowodnić). Po uruchomieniu w symulatorze, po wyjściu z tego, mogę wznowić stamtąd !!! – YvesLeBorg

+1

Wyjaśniłem, że w moim przypadku problem był spowodowany przez CCLabelBMFont, prawdopodobnie po iOS7 coś się stało i podczas ich rysowania istnieje szansa na awarię. Właściwie zastąpiłem je CCLabelTTF i wszystko jest w porządku, ale skoro nie wiem jeszcze jak to naprawić (to tylko obejście), nie zamieszczam odpowiedzi ... Odkryłem, że prawdopodobnie są Zmiany, które należy wprowadzić, ale jeszcze nie próbowałem: https://github.com/jllust/cocos2d-x/commit/1f3c1145362c921bf5232c4ffbca4a5245042bae – Adarkuccio

Odpowiedz

4

Po dodaniu ccGLBindVAO(0); po każdym połączeniu z numerem glDeleteVertexArrays(1, &_VAOname); zatrzymano awarie.

Istnieją trzy pliki z tego zaproszenia:

CCDrawNode:164 
CCTextureAtlas:142 
CCParticleSystemQuad:164 
CCParticleSystemQuad:229 
CCParticleSystemQuad:492 

Podobnie jak w CCTextureAtlas:

#if CC_TEXTURE_ATLAS_USE_VAO 
    glDeleteVertexArrays(1, &_VAOname); 
    ccGLBindVAO(0); 
#endif 

Używam cocos2d-iphone classic 2.2.

kod tutaj: https://github.com/jllust/cocos2d-x/commit/1f3c1145362c921bf5232c4ffbca4a5245042bae

Zrobiłem cocos2d-iphone-classic żądania ściągania: https://github.com/zeraien/cocos2d-iphone-classic/commit/817a9c14a3aa1d4c162071521e45e2fcce473d77

+0

dziękuję bardzo bardzo bardzo ..... Mam stary projekt, ale nie mogę go rozwiązać. Jesteś moim Bogiem. – zszen

+0

Cieszę się, że było pomocne :-) – zeraien