The Web Games on Facebook and Facebook Gameroom platforms are no longer available for new submissions. This documentation is intended solely for developers with existing games. To learn more, read our blog post.
يوفر فيسبوك العديد من الميزات المصممة لكي تظهر لعبتك بشكل رائع ومتألق في متصفحات اللاعبين، مما يتيح لك التعامل بشكل جيد مع مجموعة كبيرة من أحجام النوافذ، وتمكين اللاعبين واللعبة من استخدام ميزات فيسبوك أثناء ممارسة اللعب، وقبول التفاعلات من فيسبوك دون تعطيل اللعبة.
يتيح لك التصميم المرن إمكانية زيادة حجم أبعاد اللعبة لتتوافق مع أبعاد متصفح اللاعب. عند تمكين هذا التخطيط، يتم السماح لإطار iframe الذي يحتوي على اللعبة بملء العرض و/أو الارتفاع المتوفر لنافذة المتصفح بالكامل.
لتمكين التصميم المرن، يلزمك أولاً تكوين إعدادات التطبيق في لوحة التحكم في التطبيق. انتقل إلى صفحة الإعدادات الخاصة بالتطبيق وحدّد مكان قسم "التطبيق على فيسبوك"، الذي يبدو مثل الصورة التالية.
سيؤدي تعيين العرض الثابت على No
إلى تعيين عرض إطار iframe الذي يحتوي على لعبتك على 100%
. ستتم محاذاة المحتوى في هذه الحالة إلى اليمين وسيتم تغيير حجم إطار iframe ليملأ الصفحة إذا قام اللاعبون بتغيير عرض نوافذ المتصفح لديهم.
سيؤدي تعيين العرض الثابت على Yes
إلى إجبار إطار iframe على استخدام عرض بدقة 760 بيكسل. بشكل افتراضي، يشتمل عنصر <body>
لإطار iframe في أغلب المتصفحات على margin:8px
، ولذلك ستحصل على دقة 744 بيكسل للمحتوى ما لم تتجاوز ذلك.
سيؤدي تعيين الارتفاع الثابت على No
إلى تعيين ارتفاع إطار iframe الذي يحتوي على تطبيقك على 100%
. إذا تم تغيير حجم نافذة المتصفح، فسيتغير حجم إطار iframe أيضًا، ويظهر شريط تمرير إذا كان المحتوى يتجاوز الارتفاع المتوفر.
سيؤدي تعيين الارتفاع الثابت على Yes
إلى إجبار إطار iframe على استخدام قيمة ارتفاع تحددها أنت بالبيكسل كإعداد إضافي على لوحة معلومات التطبيق.
بمجرد تمكين العرض والارتفاع المرنين عن طريق تعيين الإعدادات الثابتة على No
، يلزمك حينئذ تطوير تطبيقك لدعم الأبعاد المتغيرة وكذلك تغيير الحجم الديناميكي حتى يمكن للمشاهد تغيير حجم المتصفح لديه في أي وقت.
يجب أن يتم ضبط حجم التطبيق بحيث يستخدم مساحة الشاشة المتوفرة بالكامل، وإذا لزم الأمر، الاستجابة إلى حدث JavaScript window.onresize
لتعديل التخطيط ديناميكيًا. في معظم الحالات، يمكن أن تتعامل تنسيقات HTML وCSS مع تخطيط ديناميكي من دون الحاجة إلى لغة JavaScript، ولكن إذا قمت بتحديد أحجام العناصر بوحدات مطلقة، فقد يتعين عليك تشغيل الرمز أثناء حدث window.onresize
. لمنع إعادة التصميم المتقطع أو المفرط، يُنصح بالقيام فقط بتشغيل معالج تغيير الحجم من 30 إلى 60 مرة في الثانية، أو عندما يتجاوز تغيير الحجم حدًا ما.
مثال على HTML
بالنسبة إلى تطبيق HTML، قم بتعيين عرض وارتفاع العنصر الأصلي للتطبيق على 100%. إذا احتجت إلى إعادة توجيه أي من عناصر واجهة المستخدم داخل تطبيقك بتنسيق HTML، فيمكنك القيام بذلك عبر الحدث window.onresize
كما هو الحال مع أي صفحة عادية بتنسيق HTML.
يوضح نموذج الرمز التالي عنصر <div>
HTML، ويقوم بتعيين لون الخلفية على اللون الأزرق، ويملأ أبعاد المتصفح المتوفرة. سيستجيب للحدث window.onresize
ويعرض أبعاد <div>
الحالية إذا تم تغيير حجم المتصفح.
<html> <head> <title>Fluid Layout HTML Example</title> </head> <body style="margin:0; padding:0; border:0; background-color:#000000"> <div id="allContent" style="background-color: #0000FF; height:100%"> <div id="output" style="color: #FFFFFF;" /> </div> <script src="http://connect.facebook.net/en_US/all.js"></script> <script type="text/javascript"> FB.init({appId : 'APP ID',}); function echoSize() { document.getElementById('output').innerHTML ="HTML Content Width: " + window.innerWidth +" Height: " + window.innerHeight; console.log(window.innerWidth + ' x ' + window.innerHeight); } echoSize(); window.onresize = echoSize; </script> </body> </html>
التعامل مع التصميمات المرنة في مُشغل Flash
إذا كنت تقوم بإنشاء تطبيق Flash، فسيتعين عليك تعيين الأبعاد الأولية للإشارة <object>
لديك على 100% لكل من العرض والارتفاع. يتيح ذلك لعميل Flash ملء كامل المساحة المتوفرة. بعد ذلك، سيتعين على رمز ActionScript الاستجابة إلى الحدث Event.RESIZE
لكائن stage
والتعامل معه. يتم إرسال هذا الحدث كل مرة يقوم فيها اللاعب بتغيير حجم ملف swf؛ ويجب استخدامه لتصميم عناصر واجهة المستخدم تبعًا لذلك.
أثناء تشغيل اللعبة المستندة إلى Flash أو إلى مكون إضافي آخر، من الممكن أن يتفاعل اللاعب مع عناصر واجهة المستخدم التي تمثل جزءًا من فيسبوك، وهو ما سيتسبب أحيانًا في إخفاء اللعبة. سيحدث ذلك أحيانًا بسبب إجراء تتخذه اللعبة (مثل استدعاء مربع حوار تسجيل الدخول)، وفي أحيان أخرى سيحدث ذلك بسبب تفاعل اللاعب مع عناصر فيسبوك المحيطة باللعبة (مثل نافذة Messenger).
للتعامل بشكل جيد مع هذا الأمر، قد ترغب في إنشاء لقطة شاشة ديناميكية لتطبيقك، ثم استبدال عنصر <object>
بهذه الصورة. سيتعين عليك إجراء هذا التبديل في غضون 200 ميللي ثانية. يتيح ذلك عرض مربعات الحوار بشكل صحيح، كما يؤدي إلى تحقيق تجربة مستخدم أكثر تشويقًا وإمتاعًا.
تتمثل أفضل طريقة للقيام بذلك في إنشاء وظيفة في رمز Flash لالتقاط لقطة شاشة، بتنسيق JPEG أو أي تنسيق مضغوط آخر لنمط الرسومات، ثم يقوم Base64 بترميز تلك السلسلة، ثم إيقاف اللعبة مؤقتًا. اعرض هذه الوظيفة (مع تسميتها ربما باسم مثل exportScreenshot
) على لغة JavaScript حسبما يكون مناسبًا (في Flash، على سبيل المثال، ستستخدم الوظيفة flash.external.ExternalInterface.addCallback
). اعرض أيضًا وظيفة تستأنف اللعبة بمجرد أن تستعيد التركيز.
بعد ذلك، وفي رمز JavaScript، اكتب وظيفة وحدة الاستجابة ليتم استدعاؤها عندما تفقد لعبتك التركيز أو تستعيده، وقم بتسجيلها في بيئة فيسبوك عن طريق تمريرها إلى FB.init()
كالمعلمة hideFlashCallback
. سيتم تمرير قاموس معلمات إلى وحدة الاستجابة بحيث يحتوي هذا القاموس على مفتاح اسمه state
، والذي يتم تعيينه على opened
إذا كان ينبغي عليك إخفاء لعبتك. في هذه الحالة، ينبغي على وحدة الاستجابة استدعاء الأسلوب exportScreenshot
الخاص بتطبيق Flash، واستخدام بيانات الصورة المشفرة باستخدام Base64 لإنشاء عنوان URL للبيانات، وجعل ذلك src
لعنصر img
، كما ينبغي عليه نقل العنصر الذي يحتوي على تطبيقك خارج الشاشة باستخدام الأسلوب FB.Canvas.hideFlashElement
في JS SDK، واستبداله بالعنصر img
. إذا كان قاموس المعلمات الذي تم تمريره إلى وحدة الاستجابة لا يشتمل على state: "opened"
، فمن ثمّ يجب استعادة تطبيق Flash على الشاشة مرة أخرى باستخدام FB.Canvas.showFlashElement
بدلاً من ذلك.
يمكنك تصدير لقطة شاشة قمت بتعديلها عن طريق تصغيرها إلى 1/4 الحجم (والتي سيتم عرضها كصورة ضبابية) أو عن طريق تعتيم لونها، بحيث يبدو أنها قد تلاشت في الخلفية. سيوضح ذلك للاعب بشكل أكبر أن التركيز ليس على اللعبة، وإنما على عنصر واجهة المستخدم المنبثق.
urlhandler
يقوم الأسلوب FB.Canvas.setUrlHandler()
الخاص بمجموعة JavaScript SDK بتسجيل استدعاء يسمح للعبتك بالتعامل بشكل جيد مع المواقف التي ينقر فيها الشخص على رابط في مكان ما في فيسبوك، وهو ما سيتسبب عادةً في إعادة تحميل لعبتك. تشتمل الأمثلة على ما يلي:
عندما ينقر الشخص على حدث مؤشر حول صديقه الذي يحقق إنجازًا في اللعبة، على سبيل المثال، سيتم افتراضيًا توجيه المتصفح إلى عنوان URL الخاص بذلك الإنجاز. يمكن للعبتك، بدلاً من ذلك، اختيار تسجيل استدعاء لعرض الإنجاز داخل التطبيق.
سيتم إجراء الاستدعاء باستخدام حقل يحتوي على مسار عنوان URL، ذي الصلة بعنوان URL لمنصة ألعاب الويب من فيسبوك للتطبيق؛ على سبيل المثال، إذا كان عنوان URL الذي سيتم تحميله هو
http://apps.facebook.com/yourgameXYZ/achievements/cheevo1.php ?fb_source=canvas_ticker &fb_ticker_mod=achievement &fb_action_types=games.achieves
فسيتم طلب الاستدعاء الخاص بك باستخدام معلمة تشبه القاموس
{ path: "/achievements/cheevo1.php?fb_source=canvas_ticker&fb_ticker_mod= achievement&fb_action_types=games.achieves" }
لاحظ أن كل استدعاء إلى FB.Canvas.setUrlHandler()
يحل محل الاستدعاء المُعين مسبقًا في حالة تعيين أحدها. إضافة إلى ذلك، سيتم إرسال الروابط التي تشير إلى لعبتك على فيسبوك (أي التي تبدأ بـ apps.facebook.com/your_app/
من أجل المعالجة المضمّنة.
إذا كانت لعبتك في ألعاب الويب من فيسبوك تستخدم WebGL، فقم بتعيين WebGL على القيمة "نعم" في إعدادات تطبيقك ضمن ألعاب الويب من فيسبوك. تتيح هذه العملية لفيسبوك إمكانية تحسين تجربة WebGL للاعبين.
سيظهر للاعبين الذين يستخدمون متصفحًا لا يدعم WebGL الصفحة التالية عند محاولة الوصول إلى لعبتك. تعرض الصفحة روابط إلى WebGL متوافقة مع متصفحات الويب و(إذا كان متصفحك متوفرًا على Facebook Gameroom) رابط إلى عميل Gameroom.
إذا كنت لا تريد إعادة توجيه اللاعبين إلى هذه الصفحة، فيمكنك تعطيل خيار إعادة التوجيه عن طريق تعيين خيار تجاوز تجربة WebGL غير المدعومة على القيمة "نعم". إذا قمت بذلك، فيجب معالجة التجربة في المتصفحات التي لا تدعم WebGL في لعبتك.