10 Ekim 2026 Cumartesi

ਮੋਬਾਈਲ ਗੇਮਾਂ ਵਿੱਚ Google Play Games ਪ੍ਰਾਪਤੀਆਂ: ਸਟੋਰ ਪ੍ਰਭਾਵ, 2,000 XP ਸੀਮਾ, ਅਤੇ MonoGame ਆਰਕੀਟੈਕਚਰ




ਮੋਬਾਈਲ ਗੇਮਾਂ ਵਿੱਚ Google Play Games ਪ੍ਰਾਪਤੀਆਂ: ਸਟੋਰ ਪ੍ਰਭਾਵ, 2,000 XP ਸੀਮਾ, ਅਤੇ MonoGame ਆਰਕੀਟੈਕਚਰ

ਇੱਕ ਵਾਰ ਜਦੋਂ ਤੁਸੀਂ ਕੋਈ ਮੋਬਾਈਲ ਗੇਮ ਬਣਾ ਕੇ ਐਪ ਸਟੋਰ 'ਤੇ ਪ੍ਰਕਾਸ਼ਿਤ ਕਰ ਲੈਂਦੇ ਹੋ, ਤਾਂ ਅਸਲ ਚੁਣੌਤੀ ਸ਼ੁਰੂ ਹੁੰਦੀ ਹੈ: ਖਿਡਾਰੀ ਦੇ ਪਹਿਲੇ ਕੁਝ ਮਿੰਟਾਂ ਦੀ ਉਤਸੁਕਤਾ ਨੂੰ ਲੰਬੇ ਸਮੇਂ ਦੇ ਰੁਝੇਵੇਂ ਵਿੱਚ ਬਦਲਣਾ। ਜਦੋਂ ਖਿਡਾਰੀਆਂ ਨੂੰ ਸਿਰਫ਼ "ਪੱਧਰ ਪੂਰਾ ਕਰੋ, ਅਗਲਾ ਸ਼ੁਰੂ ਕਰੋ" ਦਾ ਇੱਕ ਸਧਾਰਨ ਲੂਪ ਦਿੱਤਾ ਜਾਂਦਾ ਹੈ, ਤਾਂ ਅੰਤ ਵਿੱਚ ਥਕਾਵਟ ਸ਼ੁਰੂ ਹੋ ਜਾਂਦੀ ਹੈ—ਜਾਂ ਉਹ ਤੁਹਾਡੇ ਦੁਆਰਾ ਮਿਹਨਤ ਨਾਲ ਬਣਾਏ ਗਏ ਗੇਮਪਲੇ ਮਕੈਨਿਕਸ ਦੇ ਅੱਧੇ ਹਿੱਸੇ ਨੂੰ ਖੋਜੇ ਬਿਨਾਂ ਹੀ ਐਪ ਨੂੰ ਬੰਦ ਕਰ ਦਿੰਦੇ ਹਨ।

ਪਹਿਲੀ ਨਜ਼ਰ ਵਿੱਚ, Google Play Games Services (GPGS) Achievements ਪ੍ਰਣਾਲੀ ਸਕ੍ਰੀਨ 'ਤੇ ਕੁਝ ਛੋਟੇ ਬੈਜਾਂ ਦੇ ਸੰਗ੍ਰਹਿ ਤੋਂ ਵੱਧ ਕੁਝ ਨਹੀਂ ਜਾਪ ਸਕਦੀ। ਹਾਲਾਂਕਿ, ਜਦੋਂ ਇਸਨੂੰ ਸੋਚ-ਸਮਝ ਕੇ ਡਿਜ਼ਾਈਨ ਕੀਤਾ ਜਾਂਦਾ ਹੈ, ਤਾਂ ਇਹ ਇੱਕ ਸ਼ਕਤੀਸ਼ਾਲੀ ਰਿਟੈਂਸ਼ਨ ਇੰਜਣ (retention engine) ਬਣ ਜਾਂਦਾ ਹੈ ਜੋ ਖਿਡਾਰੀਆਂ ਨੂੰ ਤੁਹਾਡੀ ਗੇਮ ਦੇ ਹਰੇਕ ਮਕੈਨਿਕਸ ਪੱਧਰ ਵਿੱਚੋਂ ਮਾਰਗਦਰਸ਼ਨ ਕਰਦਾ ਹੈ।

ਇਸ ਤਕਨੀਕੀ ਲੇਖ ਵਿੱਚ, ਅਸੀਂ ਵਿਸ਼ਲੇਸ਼ਣ ਕਰਦੇ ਹਾਂ ਕਿ Google Play ਈਕੋਸਿਸਟਮ ਵਿੱਚ ਪ੍ਰਾਪਤੀਆਂ ਅਸਲ ਵਿੱਚ ਕੀ ਪ੍ਰਾਪਤ ਕਰਦੀਆਂ ਹਨ, ਅਸੀਂ Blocked: Pixel Panzer ਲਈ Google ਦੇ ਸਖ਼ਤ XP ਨਿਯਮਾਂ ਦੇ ਤਹਿਤ 79 ਵੱਖਰੀਆਂ ਪ੍ਰਾਪਤੀਆਂ ਕਿਵੇਂ ਡਿਜ਼ਾਈਨ ਕੀਤੀਆਂ, ਅਤੇ ਤੀਬਰ ਆਰਕੇਡ ਲੜਾਈਆਂ ਦੌਰਾਨ FPS ਗਿਰਾਵਟ ਅਤੇ Android ANR (Application Not Responding) ਗਲਤੀਆਂ ਨੂੰ ਰੋਕਣ ਲਈ ਅਸਿੰਕ੍ਰੋਨਸ MonoGame / C# ਬੈਚਿੰਗ ਪਾਈਪਲਾਈਨ ਕਿਵੇਂ ਤਿਆਰ ਕੀਤੀ।


1. Google Play Games ਪ੍ਰਾਪਤੀਆਂ ਮਹੱਤਵਪੂਰਨ ਕਿਉਂ ਹਨ?

Google Play Games ਪ੍ਰਾਪਤੀਆਂ ਨੂੰ ਏਕੀਕ੍ਰਿਤ ਕਰਨਾ ਖਿਡਾਰੀਆਂ ਦੇ ਮਨੋਵਿਗਿਆਨ ਅਤੇ ਸਟੋਰ ਪ੍ਰਦਰਸ਼ਨ ਮੈਟ੍ਰਿਕਸ ਦੋਵਾਂ ਵਿੱਚ ਚਾਰ ਠੋਸ ਲਾਭ ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ:

  1. ਵਿਕਲਪਕ ਟੀਚੇ ਅਤੇ ਖਿਡਾਰੀ ਧਾਰਨ (Day-7 / Day-30 Retention):
    ਹਰ ਖਿਡਾਰੀ ਗਲੋਬਲ ਲੀਡਰਬੋਰਡ 'ਤੇ #1 ਸਥਾਨ 'ਤੇ ਨਹੀਂ ਪਹੁੰਚ ਸਕਦਾ, ਪਰ ਹਰ ਖਿਡਾਰੀ "100 ਬੁਰਜ ਨਸ਼ਟ ਕਰੋ" ਜਾਂ "ਬਿਨਾਂ ਨੁਕਸਾਨ ਦੇ ਪੜਾਅ ਪੂਰਾ ਕਰੋ" ਵਰਗੇ ਟੀਚਿਆਂ ਵੱਲ ਕੰਮ ਕਰ ਸਕਦਾ ਹੈ। ਵਾਧੇ ਵਾਲੀਆਂ (ਇਨਕ੍ਰੀਮੈਂਟਲ) ਪ੍ਰਾਪਤੀਆਂ ਇੱਕ ਠੋਸ ਪ੍ਰਗਤੀ ਪੱਟੀ ਪ੍ਰਦਾਨ ਕਰਦੀਆਂ ਹਨ ਜੋ ਹਰ ਸੈਸ਼ਨ ਦੇ ਨਾਲ ਅੱਗੇ ਵਧਦੀ ਹੈ।
  2. ਕੁਦਰਤੀ ਤੌਰ 'ਤੇ ਗੇਮ ਮਕੈਨਿਕਸ ਸਿਖਾਉਣਾ (ਇੰਪਲੀਸਿਟ ਆਨਬੋਰਡਿੰਗ):
    ਖਿਡਾਰੀ ਅਕਸਰ ਆਪਣੇ ਡਿਫੌਲਟ ਹਥਿਆਰ ਨਾਲ ਹੀ ਚਿਪਕੇ ਰਹਿੰਦੇ ਹਨ ਅਤੇ ਨਵੇਂ ਪ੍ਰਯੋਗ ਕਰਨ ਤੋਂ ਝਿਜਕਦੇ ਹਨ। Blocked: Pixel Panzer ਵਿੱਚ, ColorWheel 'ਤੇ ਹਰੇ ਤੇਜ਼ਾਬੀ ਗੋਲਾ-ਬਾਰੂਦ ਨਾਲ ਇੱਕੋ ਸਮੇਂ ਬਲਾਕਾਂ ਨੂੰ ਪਿਘਲਾਉਣ ਜਾਂ ਕਾਲੇ ਗੋਲਾ-ਬਾਰੂਦ ਨਾਲ ਨਾਜ਼ੁਕ ਹਿੱਟ ਕਰਨ 'ਤੇ ਇਨਾਮ ਦੇਣਾ ਉਹਨਾਂ ਨੂੰ ਹਰੇਕ ਐਲੀਮੈਂਟਲ ਮੋਡ ਨੂੰ ਖੋਜਣ ਅਤੇ ਉਸ ਵਿੱਚ ਮੁਹਾਰਤ ਹਾਸਲ ਕਰਨ ਲਈ ਉਤਸ਼ਾਹਿਤ ਕਰਦਾ ਹੈ।
  3. ਤੁਰੰਤ ਫੀਡਬੈਕ ਅਤੇ Google Play Gamer XP:
    ਲੜਾਈ ਦੇ ਵਿਚਕਾਰ ਸਕ੍ਰੀਨ ਦੇ ਸਿਖਰ ਤੋਂ ਅਧਿਕਾਰਤ Google Play Games ਬੈਨਰ ਨੂੰ ਹੇਠਾਂ ਸਲਾਈਡ ਹੁੰਦੇ ਦੇਖਣਾ—ਅਤੇ ਉਹਨਾਂ ਦੇ ਗਲੋਬਲ Google Play Gamer ਪੱਧਰ ਲਈ XP ਹਾਸਲ ਕਰਨਾ—ਖਿਡਾਰੀਆਂ ਨੂੰ ਉਹਨਾਂ ਦੇ OS ਪ੍ਰੋਫਾਈਲ ਨਾਲ ਜੁੜੀ ਤਰੱਕੀ ਦੀ ਸਥਾਈ ਭਾਵਨਾ ਦਿੰਦਾ ਹੈ।
  4. Google Play ਈਕੋਸਿਸਟਮ ਅਤੇ ਗੁਣਵੱਤਾ ਸੰਕੇਤ:
    Google Play Games Services V2 (PGS V2) ਏਕੀਕਰਣ ਜ਼ੀਰੋ-ਟੈਪ ਆਟੋਮੈਟਿਕ ਸਾਈਨ-ਇਨ, Google Play Games on PC ਨਾਲ ਸਹਿਜ ਅਨੁਕੂਲਤਾ, ਅਤੇ Google Play Store ਦੇ "Games" ਟੈਬ ਵਿੱਚ ਮਜ਼ਬੂਤ ਰੁਝੇਵੇਂ ਦੇ ਸੰਕੇਤ ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ।

Blocked: Pixel Panzer In-Game Achievement Unlock Toast
Blocked: Pixel Panzer ਵਿੱਚ ਲੈਵਲ 103 ਦੀ ਲੜਾਈ ਦੌਰਾਨ 10ਵਾਂ ਬੁਰਜ ਨਸ਼ਟ ਹੁੰਦੇ ਹੀ ਸਕ੍ਰੀਨ ਦੇ ਸਿਖਰ 'ਤੇ ਦਿਖਾਈ ਦੇਣ ਵਾਲਾ ਅਧਿਕਾਰਤ Google Play Games "Turret Buster I" ਪੌਪਅੱਪ ਟੋਸਟ।


2. Google Play Console ਨਿਯਮ: 2,000 XP ਸੀਮਾ ਅਤੇ 10,000 ਸਟੈੱਪ ਸੀਮਾ

Google Play Console ਵਿੱਚ ਪ੍ਰਾਪਤੀਆਂ ਨੂੰ ਕੌਂਫਿਗਰ ਕਰਦੇ ਸਮੇਂ, ਤੁਹਾਨੂੰ ਤਿੰਨ ਸਖ਼ਤ ਪਲੇਟਫਾਰਮ ਰੁਕਾਵਟਾਂ ਦੇ ਆਧਾਰ 'ਤੇ ਡਿਜ਼ਾਈਨ ਕਰਨਾ ਚਾਹੀਦਾ ਹੈ:

  • 2,000 XP ਦੀ ਸਖ਼ਤ ਸੀਮਾ (Hard Cap): ਇੱਕ ਗੇਮ ਵਿੱਚ ਸਾਰੇ ਪ੍ਰਾਪਤੀ ਅੰਕਾਂ ਦਾ ਜੋੜ 2,000 XP ਤੋਂ ਵੱਧ ਨਹੀਂ ਹੋ ਸਕਦਾ। ਹਰੇਕ ਵਿਅਕਤੀਗਤ ਪ੍ਰਾਪਤੀ 5 ਤੋਂ 200 XP ਦੇ ਵਿਚਕਾਰ, 5 ਦੇ ਗੁਣਕਾਂ ਵਿੱਚ ਹੋਣੀ ਚਾਹੀਦੀ ਹੈ।
  • ਇਨਕ੍ਰੀਮੈਂਟਲ ਪ੍ਰਾਪਤੀਆਂ ਲਈ 10,000 ਸਟੈੱਪ ਸੀਮਾ: ਕਾਊਂਟਰ-ਅਧਾਰਿਤ ਸੰਚਤ ਪ੍ਰਾਪਤੀਆਂ Play Console ਵਿੱਚ ਵੱਧ ਤੋਂ ਵੱਧ 10,000 ਕਦਮਾਂ (steps) ਦਾ ਸਮਰਥਨ ਕਰਦੀਆਂ ਹਨ।
  • Play Games Services V2 ਦੀ ਲੋੜ: Google ਪੁਰਾਣੇ V1 SDK ਨੂੰ ਬੰਦ ਕਰ ਰਿਹਾ ਹੈ। ਆਧੁਨਿਕ Android ਗੇਮਾਂ Xamarin.GooglePlayServices.Games.V2 (PlayGamesSdk ਅਤੇ PlayGames.GetAchievementsClient) 'ਤੇ ਆਧਾਰਿਤ ਹੋਣੀਆਂ ਚਾਹੀਦੀਆਂ ਹਨ।

Blocked: Pixel Panzer ਵਿੱਚ 79-ਪ੍ਰਾਪਤੀ ਕੈਟਾਲਾਗ ਡਿਜ਼ਾਈਨ ਕਰਨਾ

ਸਾਡੀਆਂ ਮੁੱਖ ਗੇਮਪਲੇ ਇਕਾਈਆਂ (TurretBlock, FighterJet, EnemyRocket, ColorWheel, HydraRegenerationSkill, Season) ਦਾ ਵਿਸ਼ਲੇਸ਼ਣ ਕਰਕੇ, ਅਸੀਂ 6 ਮੁੱਖ ਸ਼੍ਰੇਣੀਆਂ ਵਿੱਚ ਕੁੱਲ 1,995 / 2,000 XP ਦੀਆਂ 79 ਪ੍ਰਾਪਤੀਆਂ ਦਾ ਢਾਂਚਾ ਤਿਆਰ ਕੀਤਾ:

ਸ਼੍ਰੇਣੀ ਨਮੂਨਾ ਪ੍ਰਾਪਤੀਆਂ ਕਿਸਮ ਟੀਚਾ / ਮਕੈਨਿਕ
Enemy Hunters Jet Hunter I–III, Sky Dominator, Turret Buster I–III, Siege Master ਇਨਕ੍ਰੀਮੈਂਟਲ 10, 100, 1,000 ਅਤੇ 10,000 ਲੜਾਕੂ ਜਹਾਜ਼, ਰੱਖਿਆ ਬੁਰਜ ਅਤੇ ਹੋਮਿੰਗ ਰਾਕੇਟ ਨਸ਼ਟ ਕਰੋ।
Block Destruction & Explosives Pioneer Breaker, Demolition Crew, Crusher Supreme, Pixel Obliterator, Chain Reaction ਇਨਕ੍ਰੀਮੈਂਟਲ / ਸਟੈਂਡਰਡ 1,000 ਤੋਂ 10,000 ਬਲਾਕ ਤੋੜੋ ਅਤੇ ਇੱਕੋ ਡਾਇਨਾਮਾਈਟ ਧਮਾਕੇ ਵਿੱਚ 5/25/50 ਟੀਚਿਆਂ ਨੂੰ ਉਡਾਓ।
ColorWheel & Weapon Mastery Prismatic Pilot, Acid Dissolver, Critical Striker, Power Blaster, Speedy Sprinter, Beam Vaporizer ਇਨਕ੍ਰੀਮੈਂਟਲ ਹਰੇ ਤੇਜ਼ਾਬੀ ਗੋਲਾ-ਬਾਰੂਦ ਨਾਲ ਬਲਾਕਾਂ ਨੂੰ ਪਿਘਲਾਓ, ਕਾਲੇ ਨਾਜ਼ੁਕ ਕਿੱਲ ਪ੍ਰਾਪਤ ਕਰੋ, ਲਾਲ ਪਾਵਰ ਸ਼ਾਟ, ਲੇਜ਼ਰ ਅਤੇ ਰਾਕੇਟ ਚਲਾਓ।
Stage & Boss Progression First Blood, Giant Slayer, Decimator, Speedrunner I–III ਇਨਕ੍ਰੀਮੈਂਟਲ / ਸਟੈਂਡਰਡ ਪਹਿਲਾ ਦੁਸ਼ਮਣ ਮਾਰਨਾ, ਪਹਿਲੀ ਬੌਸ ਜਿੱਤ ਅਤੇ 4 ਮਿੰਟ ਤੋਂ ਘੱਟ ਸਮੇਂ ਵਿੱਚ ਪੜਾਅ ਪੂਰੇ ਕਰਨਾ।
Purist Challenges Untouchable, Clean Victory I–III, Purist Gladiator, Mono Specialist ਇਨਕ੍ਰੀਮੈਂਟਲ / ਸਟੈਂਡਰਡ ਬਿਨਾਂ ਨੁਕਸਾਨ ਲਏ ਜਾਂ ਬਿਨਾਂ ਹੁਨਰ ਵਰਤੇ ਬੌਸਾਂ ਨੂੰ ਹਰਾਓ ਅਤੇ ਉੱਚੇ ਪੱਧਰਾਂ ਨੂੰ ਪੂਰਾ ਕਰੋ।
Atmosphere, Supplies & Meta Storm Fighter, Retro Connoisseur, Gem Tycoon, Quad Spectrum, Audiophile, Loyal Supporter ਇਨਕ੍ਰੀਮੈਂਟਲ / ਗੁਪਤ ਬਰਸਾਤੀ ਮੌਸਮ ਵਿੱਚ 100 ਬੁਰਜ ਨਸ਼ਟ ਕਰੋ, CRT ਮਾਨੀਟਰ ਇਕੱਠੇ ਕਰੋ ਅਤੇ ਸੰਗੀਤ ਪਲੇਅਰ ਵਿੱਚ ਪੂਰੇ ਟਰੈਕ ਸੁਣੋ।

ਹਰੇਕ ਪ੍ਰਾਪਤੀ ਲਈ, ਅਸੀਂ ਕਸਟਮ 512x512 ਪਿਕਸਲ-ਆਰਟ ਬੈਜ ਆਈਕਨ ਬਣਾਏ ਹਨ ਜਿਨ੍ਹਾਂ ਦੇ ਫਰੇਮ ਮੁਸ਼ਕਲ ਵਧਣ ਦੇ ਨਾਲ ਕਾਂਸੀ ਤੋਂ ਸੋਨੇ ਅਤੇ ਪ੍ਰਿਜ਼ਮੈਟਿਕ ਪੱਧਰਾਂ ਵਿੱਚ ਵਿਕਸਤ ਹੁੰਦੇ ਹਨ:

Blocked: Pixel Panzer Custom Achievement Badges
ਸਾਡੇ 79-ਪ੍ਰਾਪਤੀ ਕੈਟਾਲਾਗ ਵਿੱਚੋਂ ਛੇ ਨਮੂਨਾ 512x512 ਬੈਜ: Sky Dominator, Turret Buster III, Pixel Obliterator, Prismatic Pilot IV, Acid Dissolver II, ਅਤੇ Power Blaster II.

ਪ੍ਰੋ ਸੁਝਾਅ (ਬਲਕ ZIP ਆਯਾਤ): Google Play Console ਵੈੱਬ UI ਵਿੱਚ 79 ਪ੍ਰਾਪਤੀਆਂ ਨੂੰ ਹੱਥੀਂ ਟਾਈਪ ਕਰਨ ਵਿੱਚ ਕਈ ਘੰਟੇ ਲੱਗਦੇ ਹਨ। ਇਸਦੀ ਬਜਾਏ, AchievementsMetadata.csv, AchievementsIconsMappings.csv ਅਤੇ ਆਪਣੇ 512x512 .jpg ਆਈਕਨਾਂ ਨੂੰ ਇੱਕ ਸਿੰਗਲ .zip ਆਰਕਾਈਵ ਵਿੱਚ ਪੈਕ ਕਰਕੇ Play Console ਦੀ "Import achievements" ਵਿਸ਼ੇਸ਼ਤਾ ਦੀ ਵਰਤੋਂ ਕਰੋ ਤਾਂ ਜੋ ਪੂਰੇ ਕੈਟਾਲਾਗ ਨੂੰ ਸਕਿੰਟਾਂ ਵਿੱਚ ਆਯਾਤ ਕੀਤਾ ਜਾ ਸਕੇ।

Google Play Console Published Achievements Table
Google Play Console ਵਿੱਚ ਸਾਡੀਆਂ ਪ੍ਰਕਾਸ਼ਿਤ ਪ੍ਰਾਪਤੀਆਂ ਅਤੇ XP ਵੰਡ ਸਾਰਣੀ।


3. ਸਾਫ਼ ਆਰਕੀਟੈਕਚਰ: ਸਾਂਝੇ ਕੋਡ ਵਿੱਚ IGamesService ਅਤੇ AchievementDirector

Blocked: Pixel Panzer ਇੱਕ ਕਰਾਸ-ਪਲੇਟਫਾਰਮ MonoGame ਪ੍ਰੋਜੈਕਟ ਹੈ ਜੋ Windows PC (Microsoft Store) ਅਤੇ Android (Google Play) ਦੋਵਾਂ 'ਤੇ ਚੱਲਦਾ ਹੈ। ਸਾਡੇ ਸਾਂਝੇ ਗੇਮਪਲੇ ਪ੍ਰੋਜੈਕਟ (Blocked.Shared) ਨੂੰ Android SDK ਨਿਰਭਰਤਾਵਾਂ ਤੋਂ ਪੂਰੀ ਤਰ੍ਹਾਂ ਮੁਕਤ ਰੱਖਣ ਲਈ, ਅਸੀਂ ਨਿਰਭਰਤਾ ਉਲਟਾਓ ਸਿਧਾਂਤ (Dependency Inversion Principle - SOLID) ਲਾਗੂ ਕਰਦੇ ਹਾਂ।

ਪਹਿਲਾਂ, ਅਸੀਂ ਸਾਂਝੀ ਪਰਤ ਵਿੱਚ ਇੱਕ ਪਲੇਟਫਾਰਮ-ਅਗਿਆਤ IGamesService ਇੰਟਰਫੇਸ ਪਰਿਭਾਸ਼ਿਤ ਕਰਦੇ ਹਾਂ:

namespace Blocked.Shared.Services
{
    public interface IGamesService
    {
        void Initialize();
        Task<bool> SignIn();
        Task<bool> IsAuthenticated();
        
        // Leaderboards
        void SubmitScore(string leaderboardId, long score);
        void ShowLeaderboards();
        void ShowLeaderboard(string leaderboardId);

        // Achievements
        void UnlockAchievement(string achievementId);
        void IncrementAchievement(string achievementId, int steps = 1);
        void ShowAchievements();
    }
}

CollisionManager, GameplayScreen, ਅਤੇ Player ਵਿੱਚ ਪ੍ਰਾਪਤੀ ਜਾਂਚਾਂ ਨੂੰ ਖਿਲਾਰਨ ਦੀ ਬਜਾਏ, ਅਸੀਂ ਸਾਰੇ 79 ਨਿਯਮਾਂ ਨੂੰ ਇੱਕ ਸਿੰਗਲ ਕੋਆਰਡੀਨੇਟਰ ਕਲਾਸ, AchievementDirector ਵਿੱਚ ਕੇਂਦਰਿਤ ਕਰਦੇ ਹਾਂ:

public static class AchievementDirector
{
    public static void OnEnemyKilled(
        bool isJet = false,
        bool isTurret = false,
        bool isRocket = false,
        bool isBoss = false,
        Bullet? killingBullet = null,
        bool killedByLaser = false)
    {
        var gamesService = ScreenManager.Instance?.GamesService;
        if (gamesService == null) return; // ਡੈਸਕਟੌਪ ਪੀਸੀ ਬਿਲਡਾਂ 'ਤੇ ਸੁਰੱਖਿਅਤ ਢੰਗ ਨਾਲ ਕੁਝ ਨਹੀਂ ਕਰਦਾ (no-op)

        if (isTurret)
        {
            gamesService.IncrementAchievement(AchievementIds.TurretBuster1, 1);
            gamesService.IncrementAchievement(AchievementIds.TurretBuster2, 1);
            gamesService.IncrementAchievement(AchievementIds.TurretBuster3, 1);
            gamesService.IncrementAchievement(AchievementIds.SiegeMaster, 1);

            // ਬਰਸਾਤੀ ਮੌਸਮ ਵਿੱਚ ਨਸ਼ਟ ਕੀਤੇ ਬੁਰਜ "Storm Fighter" ਵੱਲ ਤਰੱਕੀ ਕਰਦੇ ਹਨ
            if (Season.Current == SeasonKind.Rainy)
            {
                gamesService.IncrementAchievement(AchievementIds.StormFighter, 1);
            }
        }

        TrackWeaponKill(gamesService, killingBullet, killedByLaser);
    }
}

4. ਨਾਜ਼ੁਕ ਇੰਜੀਨੀਅਰਿੰਗ: ANR ਨੂੰ ਰੋਕਣ ਲਈ JNI / Binder IPC ਓਵਰਹੈੱਡ ਨੂੰ ਖਤਮ ਕਰਨਾ

ਇੱਕ ਤੇਜ਼-ਰਫ਼ਤਾਰ ਆਰਕੇਡ ਗੇਮ ਵਿੱਚ, ਪ੍ਰਾਪਤੀ ਟਰਿਗਰਾਂ ਨੂੰ ਸਿੱਧੇ Google Play SDK ਨਾਲ ਜੋੜਨਾ ਕਾਰਗੁਜ਼ਾਰੀ ਲਈ ਇੱਕ ਵੱਡਾ ਖ਼ਤਰਾ ਬਣ ਜਾਂਦਾ ਹੈ:

ਜਦੋਂ ਕੋਈ ਖਿਡਾਰੀ ਵਿਸਫੋਟਕ ਬਲਾਕ (ExplosiveBlock) ਨੂੰ ਉਡਾਉਂਦਾ ਹੈ ਜਾਂ ਲੇਜ਼ਰ ਬੀਮ (Laser Beam) ਹੁਨਰ ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹੈ, ਤਾਂ ਇੱਕੋ ਫਰੇਮ (16.6 ਮਿਲੀਸਕਿੰਟ) ਦੇ ਅੰਦਰ 20 ਤੋਂ 30 ਬਲਾਕ ਅਤੇ ਦੁਸ਼ਮਣ ਨਸ਼ਟ ਹੋ ਸਕਦੇ ਹਨ। ਜਦੋਂ ਹਰੇਕ ਵਿਨਾਸ਼ 5 ਜਾਂ 6 ਇਨਕ੍ਰੀਮੈਂਟਲ ਪੱਧਰਾਂ ਨੂੰ ਅੱਪਡੇਟ ਕਰਦਾ ਹੈ, ਤਾਂ ਇੱਕ ਸਿੰਗਲ ਫਰੇਮ 150 ਤੋਂ ਵੱਧ IncrementAchievement ਕਾਲਾਂ ਨੂੰ ਟਰਿੱਗਰ ਕਰ ਸਕਦਾ ਹੈ!

ਜੇਕਰ ਤੁਸੀਂ ਗੇਮ ਲੂਪ ਦੇ ਮੁੱਖ ਥ੍ਰੈੱਡ 'ਤੇ Google Play ਸਰਵਿਸਿਜ਼ ਨੂੰ 150 ਸਮਕਾਲੀ JNI ਅਤੇ Binder IPC ਕਾਲਾਂ ਭੇਜਦੇ ਹੋ:

  1. ਐਂਟਰੀ-ਪੱਧਰ ਦੇ Android ਡਿਵਾਈਸਾਂ (1–2 GB ਰੈਮ ਵਾਲੇ Android Go ਫ਼ੋਨ) ਤੁਰੰਤ ਗੰਭੀਰ ਫਰੇਮ ਸਟਟਰਿੰਗ ਦਾ ਸ਼ਿਕਾਰ ਹੁੰਦੇ ਹਨ।
  2. JNI ਗਲੋਬਲ ਰੈਫਰੈਂਸ (GREF) ਟੇਬਲ ਭਰ ਜਾਂਦਾ ਹੈ, ਜਿਸ ਨਾਲ Google Play Vitals ਵਿੱਚ ANR (Input dispatching timed out) ਰਿਪੋਰਟਾਂ ਸ਼ੁਰੂ ਹੋ ਜਾਂਦੀਆਂ ਹਨ।

ਸਾਡਾ ਹੱਲ: ਇਨ-ਮੈਮੋਰੀ 1.5 ਸਕਿੰਟ ਬੈਚਿੰਗ ਅਤੇ ਸੈਸ਼ਨ ਡੀਡੁਪਲੀਕੇਸ਼ਨ

GooglePlayGamesService.cs ਵਿੱਚ ਸਾਡਾ ਲਾਗੂਕਰਨ MonoGame ਅੱਪਡੇਟ ਲੂਪ ਨੂੰ Google Play IPC ਕਾਲਾਂ ਤੋਂ ਪੂਰੀ ਤਰ੍ਹਾਂ ਅਲੱਗ ਕਰਦਾ ਹੈ:

  1. ਸੈਸ਼ਨ ਡੀਡੁਪਲੀਕੇਸ਼ਨ (_unlockedInSession):
    ਇੱਕ ਸੈਸ਼ਨ ਦੌਰਾਨ ਇੱਕ ਮਿਆਰੀ ਪ੍ਰਾਪਤੀ ਅਨਲੌਕ ਹੋਣ ਤੋਂ ਬਾਅਦ, ਇਸਦੀ ID ਨੂੰ ਇੱਕ HashSet<string> ਵਿੱਚ ਜੋੜਿਆ ਜਾਂਦਾ ਹੈ। ਉਸੇ ਜਾਂ ਬਾਅਦ ਦੇ ਫਰੇਮਾਂ ਵਿੱਚ ਵਾਰ-ਵਾਰ ਹੋਣ ਵਾਲੇ ਟਰਿਗਰ ਜ਼ੀਰੋ JNI ਲਾਗਤ ਦੇ ਨਾਲ C# ਵਿੱਚ ਤੁਰੰਤ ਵਾਪਸ ਆ ਜਾਂਦੇ ਹਨ।
  2. 1.5-ਸਕਿੰਟ ਬੈਕਗ੍ਰਾਊਂਡ ਬੈਚਿੰਗ (_pendingIncrements):
    IncrementAchievement ਨੂੰ ਕਾਲ ਕਰਨਾ ਮੁੱਖ ਥ੍ਰੈੱਡ 'ਤੇ ਇੱਕ ਇਨ-ਮੈਮੋਰੀ Dictionary<string, int> ਵਿੱਚ ਸਿਰਫ਼ ਇੱਕ ਪੂਰਨ ਅੰਕ ਵਧਾਉਂਦਾ ਹੈ (ਜ਼ੀਰੋ JNI ਕਾਲਾਂ)। Task.Run ਰਾਹੀਂ ਇੱਕ ਬੈਕਗ੍ਰਾਊਂਡ ਵਰਕਰ 1.5 ਸਕਿੰਟਾਂ ਬਾਅਦ ਜਾਗਦਾ ਹੈ, ਇਕੱਠੇ ਕੀਤੇ ਜੋੜਾਂ ਦਾ ਇੱਕ ਸਨੈਪਸ਼ਾਟ ਲੈਂਦਾ ਹੈ, ਅਤੇ ਉਹਨਾਂ ਨੂੰ ਪ੍ਰਤੀ ਪ੍ਰਾਪਤੀ ਇੱਕ ਸੰਯੁਕਤ ਕਾਲ ਵਿੱਚ Google Play ਸਰਵਿਸਿਜ਼ ਨੂੰ ਫਲੱਸ਼ ਕਰਦਾ ਹੈ।
  3. 26502: CLIENT_RECONNECT_REQUIRED ਨੂੰ ਸੰਭਾਲਣਾ ਅਤੇ ਔਫਲਾਈਨ ਕੈਸ਼ਿੰਗ:
    ਜੇਕਰ ਕੋਈ ਖਿਡਾਰੀ ਘੰਟਿਆਂ ਬੱਧੀ ਗੇਮ ਨੂੰ ਬੈਕਗ੍ਰਾਊਂਡ ਵਿੱਚ ਰੱਖਦਾ ਹੈ ਅਤੇ ਵਾਪਸ ਆਉਂਦਾ ਹੈ, ਤਾਂ Google Play ਸੈਸ਼ਨ ਟੋਕਨ ਦੀ ਮਿਆਦ ਪੁੱਗ ਸਕਦੀ ਹੈ ਅਤੇ 26502 (CLIENT_RECONNECT_REQUIRED) ਗਲਤੀ ਆ ਸਕਦੀ ਹੈ। ਸਾਡੀ ਸੇਵਾ ਇਸਨੂੰ ਫੜਦੀ ਹੈ, ਕੂਲਡਾਊਨ ਗਾਰਡ ਦੇ ਨਾਲ ਇੱਕ ਸ਼ਾਂਤ ਬੈਕਗ੍ਰਾਊਂਡ SignIn() ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰਦੀ ਹੈ, ਅਤੇ ਜੇਕਰ ਡਿਵਾਈਸ ਔਫਲਾਈਨ ਹੈ ਤਾਂ GPGS ਦੇ ਸਥਾਨਕ ਔਫਲਾਈਨ ਕੈਸ਼ (client.Unlock) 'ਤੇ ਨਿਰਭਰ ਕਰਦੀ ਹੈ—ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦੇ ਹੋਏ ਕਿ ਖਿਡਾਰੀ ਦੀ ਕੋਈ ਵੀ ਤਰੱਕੀ ਕਦੇ ਨਾ ਗੁਆਚੇ।
private static readonly HashSet<string> _unlockedInSession = new(StringComparer.Ordinal);
private static readonly Dictionary<string, int> _pendingIncrements = new(StringComparer.Ordinal);
private static readonly object _achievementBatchLock = new();
private static bool _incrementFlushScheduled = false;

public void IncrementAchievement(string achievementId, int steps = 1)
{
    if (!_isInitialized || string.IsNullOrEmpty(achievementId) || steps <= 0)
        return;

    bool shouldSchedule = false;
    lock (_achievementBatchLock)
    {
        // ਗੇਮ ਲੂਪ ਥ੍ਰੈੱਡ 'ਤੇ ਜ਼ੀਰੋ JNI ਲਾਗਤ — ਸ਼ੁੱਧ ਇਨ-ਮੈਮੋਰੀ ਏਕੀਕਰਣ!
        if (_pendingIncrements.TryGetValue(achievementId, out int current))
            _pendingIncrements[achievementId] = current + steps;
        else
            _pendingIncrements[achievementId] = steps;

        if (!_incrementFlushScheduled)
        {
            _incrementFlushScheduled = true;
            shouldSchedule = true;
        }
    }

    if (shouldSchedule)
    {
        Task.Run(async () =>
        {
            await Task.Delay(1500).ConfigureAwait(false);
            FlushPendingIncrementsNow();
        });
    }
}

private void FlushPendingIncrementsNow()
{
    List<KeyValuePair<string, int>>? snapshot = null;

    lock (_achievementBatchLock)
    {
        _incrementFlushScheduled = false;
        if (_pendingIncrements.Count == 0) return;

        snapshot = new List<KeyValuePair<string, int>>(_pendingIncrements);
        _pendingIncrements.Clear();
    }

    var act = _activity;
    if (act == null || act.IsFinishing || act.IsDestroyed) return;

    var client = PlayGames.GetAchievementsClient(act);
    foreach (var kvp in snapshot)
    {
        if (kvp.Value > 0)
        {
            // 150 ਫਰੇਮ ਇਵੈਂਟਸ GPGS ਲਈ 1 ਸੰਯੁਕਤ ਸਟੈੱਪ ਕਾਲ ਬਣ ਜਾਂਦੇ ਹਨ
            client.Increment(kvp.Key, kvp.Value);
        }
    }
}

5. ਖਿਡਾਰੀ ਇਨ-ਗੇਮ ਪ੍ਰਾਪਤੀਆਂ ਨੂੰ ਕਿਵੇਂ ਟਰੈਕ ਕਰਦੇ ਹਨ?

ਲੜਾਈ ਦੌਰਾਨ ਪੌਪਅੱਪ ਵਧੀਆ ਹੁੰਦੇ ਹਨ, ਪਰ ਖਿਡਾਰੀਆਂ ਨੂੰ ਲਾਕ ਕੀਤੇ ਬੈਜਾਂ ਨੂੰ ਬ੍ਰਾਊਜ਼ ਕਰਨ, ਇਨਕ੍ਰੀਮੈਂਟਲ ਪੱਧਰਾਂ 'ਤੇ ਪ੍ਰਤੀਸ਼ਤ ਪ੍ਰਗਤੀ ਦੀ ਜਾਂਚ ਕਰਨ ਅਤੇ ਆਪਣਾ ਅਗਲਾ ਟੀਚਾ ਚੁਣਨ ਲਈ ਇੱਕ ਸਪਸ਼ਟ ਜਗ੍ਹਾ ਦੀ ਵੀ ਲੋੜ ਹੁੰਦੀ ਹੈ।

ਇਸਦਾ ਸ਼ਾਨਦਾਰ ਸਮਰਥਨ ਕਰਨ ਲਈ, ਅਸੀਂ ਆਪਣੀ ਮੋਬਾਈਲ ਅੰਕੜਾ ਸਕ੍ਰੀਨ ਨੂੰ ਇੱਕ ਯੂਨੀਫਾਈਡ STATS & RANKS ਹੱਬ ਵਿੱਚ ਬਦਲ ਦਿੱਤਾ। ਸਕ੍ਰੀਨ ਦੇ ਸਿਖਰ 'ਤੇ, ਦੋ ਸੁਨਹਿਰੀ ਬਟਨ—LEADERBOARD ਅਤੇ ACHIEVEMENTS—ਨਿਰਵਿਘਨ 2-ਸਕਿੰਟ ਸਾਈਨ-ਵੇਵ ਗਲੋ (Math.Sin) ਨਾਲ ਚਮਕਦੇ ਹਨ। Windows Desktop ਬਿਲਡਾਂ 'ਤੇ, ਇਹ ਮੋਬਾਈਲ-ਵਿਸ਼ੇਸ਼ ਬਟਨ ਆਪਣੇ ਆਪ ਲੁਕ ਜਾਂਦੇ ਹਨ, ਜਿਸ ਨਾਲ ਕਲਾਸਿਕ STATISTICS ਲੇਆਉਟ ਸਾਫ਼ ਰਹਿੰਦਾ ਹੈ।

ਜਦੋਂ ਖਿਡਾਰੀ ACHIEVEMENTS 'ਤੇ ਟੈਪ ਕਰਦਾ ਹੈ:

  1. FlushPendingIncrementsNow() ਤੁਰੰਤ ਚੱਲਦਾ ਹੈ ਤਾਂ ਜੋ UI ਖੁੱਲ੍ਹਣ ਤੋਂ ਪਹਿਲਾਂ ਪਿਛਲੇ 1.5 ਸਕਿੰਟਾਂ ਦੀ ਕੋਈ ਵੀ ਪ੍ਰਗਤੀ ਸੁਰੱਖਿਅਤ ਹੋ ਜਾਵੇ।
  2. GetAchievementsIntent() ਗੇਮ ਦੇ ਬਿਲਕੁਲ ਉੱਪਰ Google Play Games ਦਾ ਮੂਲ Achievements ਓਵਰਲੇਅ ਲਾਂਚ ਕਰਦਾ ਹੈ:

Native Google Play Games Achievements Overlay in Blocked: Pixel Panzer
STATS & RANKS ਸਕ੍ਰੀਨ ਤੋਂ ਖੋਲ੍ਹਿਆ ਗਿਆ ਮੂਲ Google Play Games Achievements ਓਵਰਲੇਅ, ਜੋ ਕੁੱਲ ਸੰਪੂਰਨਤਾ (2 / 79), ਸਿਫ਼ਾਰਸ਼ ਕੀਤੇ ਟੀਚੇ, ਅਨਲੌਕ ਕੀਤੇ ਬੈਜ (Loyal Supporter, Audiophile), ਅਤੇ ਲਾਕ ਕੀਤੇ ਇਨਕ੍ਰੀਮੈਂਟਲ ਰਿੰਗ ਦਿਖਾਉਂਦਾ ਹੈ।

ਖਿਡਾਰੀ ਐਪ ਨੂੰ ਛੱਡੇ ਬਿਨਾਂ ਆਪਣੀ 2 / 79 ਪ੍ਰਗਤੀ ਦੀ ਜਾਂਚ ਕਰ ਸਕਦੇ ਹਨ, ਵਿਅਕਤੀਗਤ ਸਿਫ਼ਾਰਸ਼ਾਂ ਦੇਖ ਸਕਦੇ ਹਨ, ਅਤੇ ਇਨਕ੍ਰੀਮੈਂਟਲ ਪ੍ਰਤੀਸ਼ਤ ਰਿੰਗਾਂ ਨੂੰ ਟਰੈਕ ਕਰ ਸਕਦੇ ਹਨ।


6. ਸਿੱਟਾ ਅਤੇ ਸਾਡੀਆਂ ਗੇਮਾਂ

ਇੱਕ ਸੰਤੁਲਿਤ 2,000 XP ਬਜਟ ਅਤੇ ਇੱਕ ਗੈਰ-ਬਲਾਕਿੰਗ ਬੈਕਗ੍ਰਾਉਂਡ ਬੈਚਿੰਗ ਪਾਈਪਲਾਈਨ ਦੇ ਨਾਲ ਬਣਾਏ ਜਾਣ 'ਤੇ, Google Play Games Achievements ਫਰੇਮ ਰੇਟ ਦੀ ਕੁਰਬਾਨੀ ਦਿੱਤੇ ਬਿਨਾਂ ਇੱਕ ਆਰਕੇਡ ਗੇਮ ਵਿੱਚ ਡੂੰਘਾਈ ਅਤੇ ਲੰਬੇ ਸਮੇਂ ਦੇ ਰੀਪਲੇਅ ਮੁੱਲ ਨੂੰ ਜੋੜਨ ਦੇ ਸਭ ਤੋਂ ਪ੍ਰਭਾਵਸ਼ਾਲੀ ਤਰੀਕਿਆਂ ਵਿੱਚੋਂ ਇੱਕ ਹੈ।

ਜੇਕਰ ਤੁਸੀਂ ਸਾਡੀ 79-ਪ੍ਰਾਪਤੀ ਪ੍ਰਗਤੀ ਪ੍ਰਣਾਲੀ, ColorWheel ਲੜਾਈ ਮਕੈਨਿਕਸ, ਅਤੇ ਗਲੋਬਲ ਲੀਡਰਬੋਰਡਾਂ ਦਾ ਨਿੱਜੀ ਤੌਰ 'ਤੇ ਅਨੁਭਵ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ—ਜਾਂ ਸਾਡੇ ਹੋਰ ਸਿਰਲੇਖਾਂ ਦੀ ਜਾਂਚ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ—ਤੁਸੀਂ ਉਹਨਾਂ ਨੂੰ ਹੇਠਾਂ ਦਿੱਤੇ ਸਟੋਰਾਂ 'ਤੇ ਲੱਭ ਸਕਦੇ ਹੋ:

🎮 ਸਾਡੀਆਂ ਗੇਮਾਂ:

  • 🛡️ Blocked: Pixel Panzer:
    ColorWheel ਐਲੀਮੈਂਟਲ ਗੋਲਾ-ਬਾਰੂਦ, ਗਤੀਸ਼ੀਲ ਮੌਸਮ, ਬੌਸ ਲੜਾਈਆਂ, ਗਲੋਬਲ ਲੀਡਰਬੋਰਡ, ਅਤੇ 79 Google Play ਪ੍ਰਾਪਤੀਆਂ ਦੀ ਵਿਸ਼ੇਸ਼ਤਾ ਵਾਲੀ ਰੈਟਰੋ ਪਿਕਸਲ ਟੈਂਕ ਐਕਸ਼ਨ!
    👉 Google Play 'ਤੇ ਡਾਊਨਲੋਡ ਕਰੋ (Android & PC) | Microsoft Store (Windows PC)
  • 🎨 Paint Trek:
    ਤੇਜ਼ ਰਫ਼ਤਾਰ, ਰੰਗੀਨ ਸਪੇਸ ਆਰਕੇਡ ਨਿਸ਼ਾਨੇਬਾਜ਼ ਜੋ ਪ੍ਰਤੀਬਿੰਬਾਂ ਅਤੇ ਰਣਨੀਤਕ ਅੰਦੋਲਨ ਨੂੰ ਜੋੜਦਾ ਹੈ।
    👉 Google Play | Microsoft Store (PC & Xbox)
  • 🚀 Space Dodger:
    ਡੂੰਘੀ ਸਪੇਸ ਵਿੱਚ ਹਾਈ-ਸਪੀਡ ਰੈਟਰੋ ਆਰਕੇਡ ਰੁਕਾਵਟਾਂ ਤੋਂ ਬਚਣ ਵਾਲੀ ਗੇਮ।
    👉 Google Play 'ਤੇ ਡਾਊਨਲੋਡ ਕਰੋ

📢 ਸਾਡੇ ਡੈਵਲੌਗਸ ਅਤੇ ਕਮਿਊਨਿਟੀ ਦੀ ਪਾਲਣਾ ਕਰੋ:

ਹੋਰ ਤਕਨੀਕੀ ਲੇਖਾਂ, ਪਰਦੇ ਦੇ ਪਿੱਛੇ ਦੀਆਂ ਕਲਿੱਪਾਂ ਅਤੇ ਗੇਮ ਅੱਪਡੇਟਾਂ ਲਈ ਸਾਡੇ ਨਾਲ ਜੁੜੋ:


ਟੈਗਸ ਅਤੇ ਵਿਸ਼ੇ

#GooglePlayGames #Achievements #MonoGame #CSharp #MobileGameDev #AndroidDev #IndieDev #GameArchitecture #BlockedPixelPanzer #PaintTrek #ArarGames




Hiç yorum yok:

Yorum Gönder