تخطَّ إلى المحتوى
Compose UICanvas APICommunity Challenge

ScribbleDash

تطبيق رسم تفاعلي متقدم عبر لوحة رقمية يستكشف الأداء الفائق للرسم الأصلي باستخدام Jetpack Compose.

السنة
٢٠٢٥
النوع
Community Challenge
ScribbleDash

نظرة عامة

ScribbleDash تطبيق رسم يدفع واجهات الرسم الأصلية في Android عبر Jetpack Compose. أطوار مثل "One Round Wonder" ترفع الصعوبة طورًا بعد طور، مع التقاط الإيماءات لحظيًا، ورسم الضربات بالمتّجهات، وسجلّ تراجع/إعادة.

التحدي

الرسم في Compose يعني إعادة حساب مسارات Bezier مع كل حدث مؤشر؛ ودون استراتيجية رسم محكمة تتعثّر حلقة الرسم.

ويزداد الأمر صعوبة حين تحتفظ بالمسارات في الذاكرة لسجلّ تراجع/إعادة لضربات فرشاة مخصّصة، فالجلسات الطويلة تستنزف الذاكرة بسرعة، مع إبقاء تخطيط الحزم نظيفًا قابلًا للتوسّع.

القرارات المعمارية والتقنية

سطح الرسم هو Canvas أصلي في Jetpack Compose ضمن تخطيط متعدّد الحزم مقسّم لطبقات.

تنفيذ المسارات

  • تخزين المسارات: بدل إعادة رسم اللوحة كاملةً في كل إطار، تُخزَّن الضربات ككائنات Path، فلا تقع إعادة التكوين العميقة إلا عند الحاجة. وتحتفظ حالة التراجع/الإعادة بآخر بضع ضربات لدورات سريعة.
  • عزل الحزم: التطبيق أحادي الوحدة، لكن حزمًا مثل features/gamemodes و features/draw معزولة أفقيًا، فيُضاف طور لعب جديد دون تسريب المنطق عبر الحدود.
  • حقن التبعيات (DI): يتولّى Koin حقن حالة كل طور لعب بمعزل عن طبقة واجهة Compose.

الأثر والنتائج

  • حلقة رسم ثابتة عند ٦٠ إطارًا/ث، بتضييق نطاق إعادة التكوين تحت أحداث المؤشر عالية التردّد.
  • محرّك تراجع/إعادة يصمد عبر الجلسات الطويلة دون نمو غير منضبط للذاكرة.

التقنيات المستخدمة

Language Kotlin
UI Framework Jetpack Compose
DI Framework Koin
Design System Material Design 3
Testing & Debug JUnit & Timber