WebHU - Programozási kérdések és válaszok

Android gameLoop SurfaceView használatával; a gyorsan változó kameraképek fekete villanásokat eredményeznek stb

Egy egyszerű játékmotort építettem a SurfaceView segítségével.

Egy RectF-et használok „kamera” ablakként, hogy megjelenítsem a SurfaceView vászon méretezett pixelszélességét és magasságát, és kitaláljam, mi van a képernyőn.

A canvas.translate-t használom, hogy oda lépjek, ahová a kamera „mutat”. Íme a húzóhurok:

mCamera.UpdateCamera();
scaleWorld(c, mCamera);
c.translate(-mScreen.left, mScreen.top - miHeight
* (1 / mCamera.getScaleLevel()));
drawBehavior.drawGame(c);

Mindenesetre, ha lövök egy lövedéket, a játék zökkenőmentesen jelenik meg, és nem látok fekete vizuális felvillanást, ami az a szín, amelyet a vászon öblítésére használok.

Ha azonban azonnal megváltoztatom azt, amit a kamera lát, esetleg 3 vagy több „képernyővel” távolabb, gyakran, de nem mindig, fekete felvillan. Néha "szerencsém" van, és az átmenet zökkenőmentes.

Ezek a felvillanások általában a bittérképeim pozíciójában vannak, mivel a talajt és a hátteret rekurzívan rajzolom meg egy vagy két bittérkép segítségével.

Nekem úgy tűnt, hogy a hirtelen változás okozta a problémát, ezért megpróbáltam lényegében a gameLoop szálat kukába rakni, hogy mindent leállítsak, majd beállítani az új Rect koordinátákat, majd újraindítani egy másik szállal, de ez nem működik.

Gondolom, belegondolva, egyszerűen csak késleltetem a rendszer „sokkját” azzal, hogy ezt tettem, nem kezeltem.

Mielőtt megpróbálnám a szőnyeg alá söpörni ezt a talán szörnyű tervet, esetleg elhalványítással vagy más vizuális trükkel, kíváncsi vagyok, van-e valakinek mélyebb megértése a témában, és el tudna vezetni egy elegánsabb megoldáshoz.


Válaszok:


1

Feltételezem, hogy a képernyő frissül, mielőtt a sorsolás befejeződik. A többszörös szálhasználat még mindig elveszít egy kicsit – de itt van valami, amit érdemes kipróbálni: Próbálja lezárni a vásznat a játékhurok elején, és feloldani a végén: http://developer.android.com/reference/android/view/SurfaceHolder.html#lockCanvas()

05.05.2011
Új anyagok

A rádiógomb ellenőrzött eseményének használata a jQueryben
Ebben a cikkben látni fogjuk, hogyan kell dolgozni a jquery választógombbal ellenőrzött eseményeivel. A választógombok HTML gombok, amelyek segítenek kiválasztani egyetlen értéket egy csoportból...

Körkörös függőségek megoldása terraformban adatforrásokkal – lépésről lépésre
Mi az a körkörös függőségek Dolgozzunk egy egyszerű eseten, amikor az SQS-sor és az S3-vödör közötti körkörös függőség problémája van egy egymástól függő címkeérték miatt. provider..

Miért érdemes elkezdeni a kódolást 2023-ban?
01100011 01101111 01100100 01100101 — beep boop beep boop Világunk folyamatosan fejlődik a technológia körül, és naponta fejlesztenek új technológiákat a valós problémák megoldására. Amint..

🎙 Random Noise #2  – Örökbefogadás és hit
az analitika íratlan világának gondozása Szeretné, hogy ezek a frissítések a postaládájába kerüljenek? Iratkozzon fel itt . "Ha önvezető autókat gyártanak, akkor mi miért ne..

A legrosszabb politika és prediktív modellek májátültetésre jelöltek számára az Egyesült Államokban
A máj (vagy óangolul lifer) az emberi test legnehezebb belső szervére utal, amely csendesen működik a nap 24 órájában. Mit csinál a máj? 500 feladatot hajt végre a szervezet egészségének..

5 webhely, amely 2022-ben fejleszti front-end fejlesztői készségeit
Frontendmentor.io A tényleges projektek létrehozásával a Frontendmentor.io segítséget nyújt a front-end kódolási képességeinek fejlesztésében. A kódolást azután kezdheti meg, hogy..

Mikor kell használni a Type-t az interfészhez képest a TypeScriptben?
A TypeScript a JavaScript gépelt szuperkészlete, amely statikus gépelést ad a nyelvhez. Ez megkönnyíti a robusztus és karbantartható kód írását azáltal, hogy a hibákat a fordítási időben..