2014-07-08 11 views
8

Sistemin farklı bir ekran görüntüsü yakaladığını görüyorum. Uyguladığım uygulamanın applicationWillResignActive numaralı telefondan aldığını gördüm. Benim için sürpriziOS multitasking switcher sistemi resmi vs uygulama görüntüsü farklılığı geçici çözümü

sistemiyle tarafından alınan görüntünün arasına yaklaşık 0.6 saniye arasında bir gecikme var, (b) ve oyun (d) tarafından alınan görüntü. Sistemin ekran görüntüsünü applicationWillResignActive'dan önce alması gerekiyorsa, hızlı hareket eden nesneler içeren bir oyun için bu özellik oyuncu tarafından kolayca fark edilebilir.

Bunu nasıl çözebilirim?

aşağıdaki oyuncu yapar adımlardır ve böyle farklılığa neden olur nasıl:

enter image description here

(a) oyuncu o oynuyor ev düğmesine bakliyat. (b) Sistem ekran görüntüsü çekiliyor. (c) Müzikçalar oyun simgesine dokunur. (d) Oyun, applicationWillResignActive tarihinde çekilen ekran görüntüsü ile başlatıldı. (e) Oyun, hızlı hareket eden bir nesnede tutarsızlığı gösteren duraklatıldı.

+1

Oyununu ne zaman durdurdun? '_saveSnapshotWithName:' üzerinde bir kesme noktası koyabilirsiniz ve ne zaman çağrıldığını görebilirsiniz. –

+0

@LeoNatan Ekran görüntüsü, applicationDidEnterBackground uygulamasında çekilse de applicationWillResignActive üzerinde duraklatıldı, ben applicationWillResignActive'daki ekran görüntüsünü test ettim, ancak sonuç aynı – rraallvv

+0

ile aynı ise, 'applicationWillResignActive' içinde duraklatılıyorsa,' applicationDidEnterBackground 'da alınan ekran görüntüsü Doğru olmalı. Belki de senin sorunun ne zaman dönüyor. –

cevap

0

Bunun nedeni oyununuzun ana iş parçacığındaki (kesinlikle ana iş parçacığında olmamalı) ana iş parçacığından kaynaklandığına inanıyorum. Bu nedenle, applicationDidEnterBackground/applicationWillResignActive döndüğünde, sistem hemen ekran kartının arabelleğinden bir ekran görüntüsü alır.

Şu anda oyun döngü iş parçacığınız hala çalışıyor, bu nedenle duraklatılmadan önce bazı kareleri güncelleyebilir.

ben size oyun döngü uygulamak bilmiyorum, ama bu deneyebilirsiniz: semafor gözlemlemek, oyun döngü içinde, ana iş parçacığı applicationDidEnterBackground/applicationWillResignActive yılında

, küresel semaforu (dispatch_semaphore_t) koymak ve engellemek ve eğer varsa, oyun döngüsünü duraklatın, ardından semaforu işaret edin.

Bu, oyunun duraklatılmasından sonra ekran görüntüsünün çekilmesini sağlar. Ayrıca, applicationWillResignActive'dan sonra sistemin görev değiştirici için anlık görüntüsünü alacağını ve applicationDidEnterBackground'dan sonra sistemin ön plana girdiğiniz bir sonraki sefer için anlık görüntü alacağını da unutmayın.

Bu yardımcı olur umarım.

İlgili konular