خطوط Google في BASIC
سمِّ عائلة خط واحصل على نص متجهي حقيقي بدلًا من صفيحة بت مان، مع الانتظار الذي يتطلبه التحميل غير المتزامن وما يحدث بمجرد تصدير اللعبة.
ما الغاية من هذا#
يرسم BASIC الكلاسيكي النص من صورة خط (font image): صفيحة رموز (glyphs)
تضبطها بـTextFontImage(text, image). تعمل، وهذا ما فعلته اللهجة دائمًا،
وتبقى في مكانها تمامًا. لكن صفيحة نقطية (bitmap) لا تتحجم، وتبدو كما هي فعلًا.
يسمِّي LoadGoogleFont عائلة بدلًا من ذلك:
font = LoadGoogleFont("Inter")
PrintFont(font)
Print("Hello")
DO
Sync()
LOOP
لا شيء يُحذَف. تستمر LoadFont وTextFontImage ومسار البت مان جميعها في
العمل، ويمكن لبرنامج أن يمزج بينها.
الانتظار ليس اختياريًا#
الخط ملف، ويصل الملف بعد أن يعود الاستدعاء. اطبع قبل وصوله وستخرج الإطارات الأولى بالخط الاحتياطي (fallback)، وهذا يُقرأ كأن «الأمر لم يفعل شيئًا».
GoogleFontReady هو ما تنتظره:
font = LoadGoogleFont("Inter")
ready = 0
DO
IF ready = 0
IF GoogleFontReady(font) = 1
PrintFont(font)
ready = 1
ENDIF
ENDIF
Print("Hello")
Sync()
LOOP
تحذير: وقعت وحدات التطبيق نفسها في الفخ نفسه مرة. إعلان خط ليس تحميله: لا يُنزِّل القماش (canvas) عائلة إلا عندما يطلبها شيء ما، وتصل الإجابة بعد إطار أو عدة إطارات.
تصفح العائلات#
يأتي المحرك مع قائمة عائلات، ويمكن لبرنامج قراءتها، وهذا ما يحتاجه منتقي خطوط داخل لعبة:
count = GoogleFontCount()
FOR i = 0 TO count - 1
Print(GoogleFontName(i))
NEXT i
تملأ القائمة منتقيًا؛ إنها ليست حدًّا. أي عائلة من Google تُحمَّل بالاسم عبر
LoadGoogleFont، سواء كانت مُدرَجة أم لا.
ماذا يحدث عند التصدير#
| أين تعمل اللعبة | ماذا يحدث |
|---|---|
| المحرر | تُجلَب العائلة من Google أول مرة تُسمَّى فيها. |
| تصدير المتصفح | الأمر نفسه، ويُقدَّم الملف من البناء عندما يستطيع المُصدِّر تضمينه. |
| بناء أصلي (native) أو Bevy | يجب أن يكون الملف قد سافر مع البناء. لا توجد شبكة. |
يقرأ المُصدِّر برنامجك، ويجد كل عائلة سمّيتها كنص صريح، ويُنزِّلها
ويكتبها إلى assets/fonts/<Family>.woff2. يعمل ذلك البناء بعدها بلا اتصال.
تحذير: لا يمكن إيجاد عائلة تُحسَب وقت التشغيل بقراءة البرنامج، لذا لا يمكن تضمينها. يقول تقرير التصدير ذلك، ويعود البناء إلى الخط الافتراضي. اكتب
LoadGoogleFont("Inter")، لاLoadGoogleFont(names[i])، لأي شيء يجب أن ينجو من التصدير.
الأوامر#
| الأمر | ما الذي يفعله |
|---|---|
LoadGoogleFont(family) | يحمِّل العائلة، ويعيد معرِّفًا (id) |
LoadGoogleFont(fontID, family) | الأمر نفسه، بمعرِّف تختاره أنت |
GoogleFontReady(fontID) | يساوي 1 بمجرد أن يصبح الملف قابلًا للاستخدام |
GoogleFontCount() | كم عائلة تعرضها القائمة |
GoogleFontName(index) | اسم عائلة واحدة من القائمة |
كل شيء آخر هو آلية الخطوط الموجودة أصلًا: PrintFont(id) لـPrint،
وTextFontSet(text, id) لكائن Text، وDeleteFont(id) لإسقاطه.
للمزيد#
- العائلة كاملة، بكل معامل: أوامر Font.
- اللهجة نفسها: لغة BASIC.