اكتب أول لعبة Android باستخدام Corona SDK

مؤلف: Randy Alexander
تاريخ الخلق: 1 أبريل 2021
تاريخ التحديث: 26 يونيو 2024
Anonim
Writing your first Android game using the Corona SDK!
فيديو: Writing your first Android game using the Corona SDK!

المحتوى


الفئة الأكثر شعبية على متجر Google Play كانت دائمًا الألعاب. على الرغم من أننا جميعًا نستخدم تطبيقات الإنتاجية الرئيسية مثل متصفح الويب وعميل البريد الإلكتروني وتطبيق المراسلة الفورية ، إلا أن الألعاب لا تزال جزءًا مهمًا من تجربة الهاتف المحمول. لذلك ، فليس من المستغرب أن الكثير من الأشخاص الذين يرغبون في تعلم التطوير لنظام Android يريدون البدء بجعل لعبة. أيضًا ، لنكن صادقين ، فالكتابة في لعبة ما هي متعة كاملة أكثر من تطوير تطبيق للإنتاجية!

لغة Android الرسمية هي Java وبيئة التطوير الرسمية هي Android Studio. إذا كنت تريد البحث في Java ، أقترح تعليميًا عن أساسيات Java ، وإذا كنت تريد معرفة كيفية كتابة تطبيق باستخدام Android Studio ، فإني أقترح عليك مراجعة البرنامج التعليمي الخاص بنا عند كتابة أول تطبيق Android خاصتك. ومع ذلك ، فإن استوديو Java و Android ليسا الطريقتين الوحيدتين لتطوير Android. يمكنك العثور على نظرة عامة على اللغات المتوفرة و SDK في دليلنا: أريد تطوير تطبيقات Android - ما هي اللغات التي يجب أن أتعلمها؟


واحدة من SDKs المذكورة في دليل لغات البرمجة هي Corona ، طرف ثالث SDK مصمم بشكل أساسي لكتابة الألعاب. بدلاً من Java ، يستخدم Corona لغة Lua ، وهي لغة نصية سريعة سهلة التعلم لكنها قوية. ومع ذلك ، فإن Corona ليس هو SDK للألعاب المحمولة الوحيد الذي يستخدم Lua ، ومن الأمثلة المعروفة الأخرى Cocos2d-X و Marmalade و Gideros.

تحميل وتثبيت

لبدء استخدام Corona ، ستحتاج إلى تنزيل وتثبيت SDK. انتقل إلى موقع Corona واضغط على زر التنزيل. ستحتاج إلى إنشاء حساب (مجاني) قبل أن تتمكن من تنزيل المجموعة. إذا كنت ترغب في إنشاء ملف .apk فعلي بدلاً من تشغيل البرنامج في المحاكي ، فستحتاج إلى تثبيت Java 7 ، ومع ذلك لن تحتاج إلى تثبيت Android SDK. لتثبيت Java 7 Development Kit ، انتقل إلى موقع Oracle ، وابحث عن القسم المسمى "Java SE Development Kit 7u79" وقم بتنزيل الإصدار لجهاز الكمبيوتر الخاص بك.

بمجرد تثبيت Corona ، تحتاج إلى تنشيطه. هذه عملية لمرة واحدة ، وهي مجانية. بدء Corona Simulator والموافقة على الترخيص. أدخل عنوان البريد الإلكتروني وكلمة المرور اللذين استخدمته للتنزيل ، وانقر فوق تسجيل الدخول.


بدء المشروع

من داخل Corona Simulator ، انقر فوق "مشروع جديد". أدخل اسمًا لتطبيقك في حقل "اسم التطبيق:" واترك بقية الإعدادات في إعداداتها الافتراضية. انقر فوق موافق."

ثلاثة نوافذ ستظهر الآن. الأولان هما Corona Simulator و Corona Simular Output. سيفتح كورونا أيضًا نافذة مستكشف ملفات تعرض الملفات الخاصة بمشروعك.

غالبية الملفات (حوالي 23 منها) في دليل المشروع مخصصة لرمز التطبيق! الملف الأكثر أهمية بالنسبة لنا الآن هو main.lua، لأن هذا هو المكان الذي سنكتب فيه رمز التطبيق لدينا.

مقدمة لوا

قبل أن نبدأ كتابة الكود ، نحتاج إلى القيام بجولة صفارة في لوا. يتوفر مترجم Lua (تذكر أن هذه لغة برمجة ، وليست لغة مترجمة) لأنظمة Windows و OS X و Linux. ومع ذلك فهي مدمجة في Corona ، لذلك في الوقت الحالي لا تحتاج إلى تثبيت أي شيء إضافي. أسهل طريقة للعب مع Lua هي استخدام العرض التوضيحي المباشر عبر الإنترنت.

يمكنك العثور على الكثير من البرامج التعليمية الجيدة حول Lua عبر الإنترنت ، ويجب إلقاء نظرة على دليل مرجع Lua ، والبرمجة في Lua ، و The.Lua.Tutorial ، و Tutorials Point Lua Tutorial.

إليك برنامج Lua صغير يعرض لك بعض الميزات الرئيسية لـ Lua:

الوظيفة المحلية doubleIt (x) لإرجاع x * 2 end for i = 1،10،1 do x = doubleIt (i) إذا (x == 10) ثم طباعة ("عشرة") نهاية أخرى للطباعة (doubleIt (i))

يُظهر الرمز أعلاه ثلاثة بنى مهمة لـ Lua: الدالات والحلقات وعبارات if. الوظيفة مضاعفة ذلك() هو بسيط جدا ، فإنه يضاعف فقط مرت في المعلمة س.

الكود الرئيسي هو إلى عن على حلقة من 1 إلى 10. وهو يدعو مضاعفة ذلك() لكل التكرار. إذا كانت قيمة الإرجاع هي 10 (أي متى أنا 5) ثم يطبع الكود "عشرة" وإلا فإنه يطبع النتيجة مضاعفة ذلك().

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

كتابة اللعبة

كتابة البرامج الأساسية في كورونا بسيطة. تحتاج فقط قلق نفسك مع ملف واحد ، main.lua، واسمحوا كورونا تفعل كل رفع الأحمال الثقيلة. اللعبة التي سنكتبها هي لعبة بسيطة. سيفشل بالون أو قنبلة أسفل الشاشة. إذا نقر اللاعب على البالون الذي سجل نقطة ، فسيضغط على قنبلة ثم تقسم النتيجة على 2 ، كعقوبة. لكتابة الرمز تحتاج إلى تعديل main.lua. يمكنك القيام بذلك في أي محرر نصوص.

يحتوي Corona SDK على محرك فيزياء ثنائي الأبعاد مدمج ، مما يجعل ألعاب البناء سهلة للغاية. الخطوة الأولى في كتابة اللعبة هي تهيئة محرك الفيزياء:

فيزياء محلية = تتطلب ("فيزياء") physics.start ()

الكود واضح إلى حد ما. يتم تحميل الفيزياء وحدة وتهيئتها ، يتم تعيينه إلى المتغير مادة الفيزياء. لتمكين المحركphysics.start () يسمى.

بعد ذلك ، ننشئ بعض المتغيرات المفيدة التي ستكون مفيدة ليس فقط لهذه اللعبة البسيطة ، ولكن أيضًا للألعاب الأكثر تعقيدًا. halfW و halfH احتفظ بقيم نصف عرض الشاشة ونصف ارتفاع الشاشة:

halfW = display.contentWidth * 0.5 halfH = display.contentHeight * 0.5

ال عرض الكائن هو كائن محدد مسبقًا يوفره Corona على مستوى العالم.

الآن تأتي الخطوة الأولى التي تجعل شيئًا ما يحدث فعليًا على الشاشة:

bkg المحلي = display.newImage ("night_sky.png" ، halfW ، halfH)

وكذلك خصائص مثل contentHeight و contentWidth، ال عرض يحتوي الكائن أيضًا على الكثير من الوظائف المفيدة. ال صورة جديدة() تقوم وظيفة بقراءة ملف صورة (في هذه الحالة ملف بتنسيق .png) وتعرضه على الشاشة. يتم عرض كائنات العرض في طبقات ، لذا نظرًا لأن هذه هي الصورة الأولى التي نضعها على الشاشة ، فستظل دائمًا الخلفية (ما لم يفعل الكود بشكل صريح شيئًا لتغيير ذلك). المعلمات halfW و halfH أخبر كورونا بوضع الصورة في المنتصف.

في هذه المرحلة ، يمكنك تشغيل الكود في المحاكي ورؤية صورة الخلفية. إذا قمت بحفظ الملف ، فسيرى المحاكي أن الملف قد تغير ويعرض إعادة التشغيل. إذا لم يحدث ذلك ، فاستخدم File-> Relaunch.

نظرًا لأن المستخدم سوف يسجل نقاطًا للتنصت على البالونات ، نحتاج إلى تهيئة متغير نقاط وعرض النتيجة على الشاشة:

النتيجة = 0 نتيجة النص = عرض. النص الجديد (النتيجة ، نصف ، 10)

سيتم الاحتفاظ بالنتيجة في المتغير المسمى الخيال أحرز هدفا،و scoreText هو الكائن الذي يعرض النتيجة. مثل صورة جديدة(), newText () ضع شيئًا على الشاشة ، في نص الحالة هذا. منذ scoreText هو متغير عمومي ثم يمكننا تغيير النص في أي وقت. ولكن سوف نصل إلى ذلك قريبا.

يمكنك إعادة تشغيل المحاكي ورؤية درجة 0 في اتجاه الجزء العلوي من الشاشة.

اليسار: فقط الخلفية. اليمين: الخلفية والنتيجة.

الآن يأتي شيء أكثر صعوبة بعض الشيء ، لكن لا تقلق ، فسأشرح الأمر سطراً تلو الآخر:

balloonTouched (حدث) محلي إذا (event.phase == "بدأ") ثم وقت التشغيل: removeEventListener ("enterFrame"، event.self) event.target:removeSelf () score = score + 1 scoreText.text = end end end score

يحدد الكود أعلاه دالة تسمى balloonTouched () والتي سوف تسمى في كل مرة يتم استغلال البالون. لم نطلب بعد من كورونا استدعاء هذه الوظيفة في كل مرة يتم فيها استخدام البالون ، والتي ستأتي لاحقًا ، لكن عندما نقوم بذلك ، يتم استدعاء الوظيفة.

تحتوي أحداث النقر أو اللمس على عدة مراحل ، يدعم العديد منها السحب. يضع المستخدم إصبعه على كائن ، وهذه هي مرحلة "البدء". إذا قاموا بتمرير إصبعهم في أي اتجاه ، فهذه هي المرحلة "المنقولة". عندما يرفع المستخدم إصبعه من الشاشة ، فهذه هي المرحلة "المنتهية".

السطر الأول من balloonTouched () يتحقق أننا في مرحلة "البدء". نريد إزالة البالون وزيادة النتيجة في أقرب وقت ممكن. إذا تم استدعاء الوظيفة مرة أخرى لمراحل أخرى مثل "انتهى" فإن الوظيفة لا تفعل شيئًا.

داخل الإذا بيان أربعة أسطر من التعليمات البرمجية. دعونا نتعامل مع الأخيرين الأولين ، لأنهما أكثر بساطة.النتيجة = النتيجة + 1 الزيادات فقط النتيجة من جانب واحد وscoreText.text = النتيجة يغير نص النتيجة على الشاشة ليعكس النتيجة الجديدة. تذكر كيف قلت ذلكscoreText كانت عالمية ويمكن الوصول إليها في أي مكان ، وهذا ما نقوم به هنا.

الآن لأول سطرين. بمجرد سقوط بالون أو قنبلة في الجزء السفلي من الشاشة ، لا تزال موجودة في ذاكرة التطبيق ، فهذا يعني أنه لا يمكنك رؤيتها. مع تقدم اللعبة ، سيزداد باطراد عدد هذه الأشياء التي تظهر على الشاشة. لذلك نحن بحاجة إلى آلية تحذف الأشياء بمجرد أن تكون بعيدة عن الأنظار. نحن نفعل ذلك في وظيفة تسمىأفسكرين، والتي لم نكتبها بعد. سيتم استدعاء هذه الوظيفة مرة واحدة لكل إطار أثناء اللعبة. بمجرد النقر على بالون ، نحتاج إلى حذفه وإزالة المكالمة التي تتحقق مما إذا كان البالون قد خرج عن الشاشة.

الخطevent.target:removeSelf () يحذف البالون. عند حدوث حدث اللمس ، تكون إحدى معلمات وظيفة المستمع هيهدف معامل. إنها تخبر الوظيفة عن الحدث ونوع الحدث ، على سبيل المثالevent.phase. كما يخبرنا بالون الذي تم استغلاله ،event.target. الremoveSelf () تقوم الدالة بما تقوله ، تقوم بحذف الكائن (في هذه الحالة بالون).

يزيل الخط الذي يسبق المستمع "enterframe" ، وهي الوظيفة التي تسمى كل إطار لمعرفة ما إذا كان البالون قد سقط من أسفل الشاشة. سننظر في ذلك بمزيد من التفصيل عندما نأتي لكتابةأفسكرين وظيفة المستمع.

لذلك ، لتلخيص.balloonTouched ()يتحقق من أن هذه هي بداية تسلسل اللمس. ثم يزيل المستمع "enterframe" ، وهي الوظيفة التي تسمى كل إطار لمعرفة ما إذا كان البالون قد سقط من أسفل الشاشة. ثم يحذف البالون ، ويزيد النتيجة ويعرض النتيجة الجديدة.

كان ذلك بالنسبة إلى البالونات ، والآن نحن بحاجة إلى شيء مماثل للقنابل:

الوظيفة المحلية bombTouched (حدث) إذا (event.phase == "بدأ") ثم وقت التشغيل: removeEventListener ("enterFrame"، event.self) event.target :removeSelf () score = math.floor (score * 0.5) scoreText.text = نهاية نهاية النتيجة

كما ترى الرمز مشابه جدًا مع استثناء أنه بدلاً من زيادة النتيجة ، يتم ضرب النتيجة بـ 0.5 (أي مقسومًا على 2). ال math.floor () تقريب الوظيفة لأسفل النتيجة إلى أقرب عدد صحيح. لذا إذا كانت درجة اللاعب 3 نقاط واستغل قنبلة ، فإن النتيجة الجديدة ستكون 1 ، وليس 1.5.

ذكرت أفسكرين () وظيفة في وقت سابق. سيتم استدعاء هذه الوظيفة كل إطار للتحقق مما إذا كان الكائن قد توقف عن العمل. هنا هو الكود:

وظيفة خارج الشاشة (الذات ، الحدث) إذا (self.y == nil) ثم ترجع النهاية إذا (self.y> display.contentHeight + 50) ثم Runtime: removeEventListener ("enterFrame" ، self) self: removeSelf () end end

في الحوسبة هناك موقف يعرف باسم حالة السباق. هذا هو المكان الذي سيحدث فيه شيئان ولكن قد يحدث أحدهما أولاً ، أو قد يحدث الآخر أولاً. إنه سباق. بعض حالات السباق غير مرئية لأن هناك شيئًا ما يبدو أنه يحدث أولاً ، لكن يمكن أن تتسبب في حدوث أخطاء في ذلك اليوم ، وفي ظل الظروف المناسبة ، يحدث الشيء الآخر أولاً ثم ينهار النظام!

هناك حالة سباق في هذه اللعبة البسيطة لأنه يمكن أن يحدث أمران قريبان جدًا من بعضهما البعض: بالون يتم التنصت عليه أفسكرين () يتم استدعاء وظيفة لمعرفة ما إذا كان البالون قد خرج من الشاشة. والنتيجة هي أنه يمكن استدعاء رمز حذف البالون ثم الرمز أفسكرين () تسمى الوظيفة (التي تحدث مثل 30 مرة في الثانية الواحدة). للالتفاف على هذا التسلسل الغريب للأحداث أفسكرين () وظيفة تحتاج إلى التحقق مما إذا كان ذ قيمة الكائن هي صفر (خالية) أم لا. اذا كانت صفر فهذا يعني أن الكائن قد تم حذفه بالفعل ، لذا فانتقل إلى الأمام ، فهذه ليست الروبوتات التي نبحث عنها.

إذا كان الكائن لا يزال قيد التشغيل ، فتحقق من موقعه ، وإذا كان قد خرج عن الشاشة 50 بكسل ، فقم بحذفه ثم قم بإزالة المستمع بحيث أفسكرين () لن يتم استدعاء الوظيفة مرة أخرى لهذا الكائن. رمز للتأكد من ذلكأفسكرين () يسمى كل إطار هو جزء من القسم التالي من التعليمات البرمجية.

الفرضية الأساسية لهذه اللعبة هي أن البالونات أو القنابل الجديدة ستستمر في إسقاط الشاشة. لذلك نحن بحاجة إلى وظيفة ستنشئ إما بالونًا جديدًا أو قنبلة جديدة:

الوظيفة المحلية addNewBalloonOrBomb () startX المحلي = math.random (display.contentWidth * 0.1، display.contentWidth * 0.9) إذا (math.random (1،5) == 1) ثم - BOMB! قنبلة محلية = display.newImage ("bomb.png" ، startX ، -300) physics.addBody (bomb) bomb.enterFrame = offscreen Runtime: addEventListener ("enterFrame"، bomb) bomb: addEventListener ("touch"، bombTouched) - balloon local balloon = display.newImage ("red_balloon.png"، startX، -300) physics.addBody (balloon) balloon.enterFrame = offscreen Runtime: addEventListener ("enterFrame"، balloon) balloon: addEventListener ("touch"، balloonTouched) نهاية النهاية

يقرر السطر الأول من الوظيفة مكان إسقاط البالون من على س طائرة. إذا كان البالون أو القنبلة يسقطان دائمًا في الوسط ، فلن يكون هذا أمرًا مثيرًا للاهتمام! وبالتاليstartX هو رقم عشوائي بين 10 في المئة و 90 في المئة من عرض الشاشة.

بعد ذلك يتم اختيار رقم عشوائي بين 1 و 5.إذا كان الرقم 1 فسيتم إسقاط قنبلة. إذا كان 2 ، 3 ، 4 أو 5 ثم سيتم إسقاط البالون. هذا يعني أنه سيتم إسقاط القنابل حوالي 20 بالمائة من الوقت.

القنبلة وبالون رمز متشابهة جدا. أولاً يتم عرض الصورة (إما قنبلة أو بالون) باستخدامصورة جديدة(). انها س الموقف هو أن منstartX بينما لها ذ تم تعيين الموضع على -300 ، أي خارج الجزء العلوي من الشاشة. السبب في ذلك هو أننا نريد أن يسقط الكائن من خارج منطقة الشاشة في المنطقة المرئية ثم من أسفل. نظرًا لأننا نستخدم محرك الفيزياء ثنائي الأبعاد ، فمن الجيد أن نمنح الكائن بعضًا من مسافة مبدئية للسقوط ، بحيث يمكنه الحصول على بعض السرعة.

الدعوة إلىphysics.addBody () يأخذ الصورة المحملة بواسطة صورة جديدة() ويحولها إلى كائن في محرك الفيزياء. هذا قوي جدا. يمكن تحويل أي ملف صورة إلى هيئة تستجيب للجاذبية والتصادم بمجرد الاتصالphysics.addBody ().

الأسطر الثلاثة الأخيرة من القنبلة أو رمز البالون إعداد المستمعين. وضعأدخل الأطار الخاصية يخبر كورونا التي تعمل على استدعاء كل إطار والدعوة لوقت التشغيل: addEventListener () يضعه. وأخيرا الدعوة إلىبالون: addEventListener () يخبر كورونا عن الوظيفة التي يجب الاتصال بها إذا تم لمس القنبلة أو البالون.

والآن اكتمال اللعبة. نحتاج فقط إلى سطرين إضافيين من التعليمات البرمجية:

addNewBalloonOrBomb () timer.performWithDelay (500 ، addNewBalloonOrBomb ، 0)

السطر الأول يجعل أول قنبلة أو بالون يسقط عن طريق الاتصال بوضوحaddNewBalloonOrBomb (). السطر الثاني يضع جهاز توقيت والذي سوف ندعوaddNewBalloonOrBomb () كل نصف ثانية (500 ميلي ثانية). هذا يعني أن بالون أو قنبلة جديدة ستسقط كل نصف ثانية.

يمكنك الآن تشغيل اللعبة في المحاكي.

فيما يلي القائمة الكاملة لـ main.lua ، يمكن العثور على رمز مصدر المشروع الكامل لهذه اللعبة هنا على GitHub.

-------------------------------------------------- --------------------------------------- - - لعبة السقوط البالون والقنابل - كتبها غاري سيمز ل - ------------------------------------------- ---------------------------------------------- -- ابدأ ال الفيزياء محرك الفيزياء المحلية = تتطلب ("الفيزياء") physics.start () - حساب نصف عرض الشاشة والارتفاع halfW = display.contentWidth * 0.5 halfH = display.contentHeight * 0.5 - تعيين الخلفية المحلية bkg = display.newImage ("night_sky.png" ، halfW ، halfH) - نتيجة الدرجات = 0 scoreText = display.newText (الدرجات ، halfW ، 10) - يتم استدعاؤها عندما يتم استغلال البالون من قِبل اللاعب - زيادة الدرجات بواسطة بالون وظيفة محلية واحد ( الحدث) إذا (event.phase == "بدأ") ثم وقت التشغيل: removeEventListener ("enterFrame"، event.self) event.target:removeSelf () النتيجة = النتيجة + النتيجة 1Text.text = نهاية نهاية النتيجة - يتم الاتصال عند يتم استغلال قنبلة من قبل اللاعب - نصف النتيجة كعقوبة ضربة وظيفة محلية bombTouched (حدث) إذا (event.phase == "بدأ") ثم Runtime: removeEventListener ("enterFrame"، event.self) event.target:removeSelf () score = math.floor (score * 0.5) scoreText.text = end end score score - حذف الكائنات التي سقطت عن أسفل الشاشة وظيفة خارج الشاشة المحلية (النفس ، الحدث) إذا (self.y == لا شيء) ثم العودة النهاية إذا (self.y> display.contentHeight + 50) ثم Runtime: removeEventListener ("enterFrame" ، self) self: removeSelf () end end - إضافة بالون هبوط جديد أو وظيفة الوظيفة المحلية addNewBalloonOrBomb () - يمكنك العثور على red_ballon.png و bomb.png في GitHub repo local startX = math.random (display.contentWidth * 0.1، display.contentWidth * 0.9) إذا (math.random (1،5) == 1) ثم - قنبلة! قنبلة محلية = display.newImage ("bomb.png" ، startX ، -300) physics.addBody (bomb) bomb.enterFrame = offscreen Runtime: addEventListener ("enterFrame"، bomb) bomb: addEventListener ("touch"، bombTouched) - balloon local balloon = display.newImage ("red_balloon.png"، startX، -300) physics.addBody (balloon) balloon.enterFrame = offscreen Runtime: addEventListener ("enterFrame"، balloon) balloon: addEventListener ("touch"، balloonTouched) end end - إضافة بالون جديد أو قنبلة الآن addNewBalloonOrBomb () - استمر في إضافة بالون جديد أو قنبلة كل 0.5 ثانية timer.performWithDelay (500 ، addNewBalloonOrBomb ، 0)

الخطوات التالية

الخطوة التالية هي لعب اللعبة على جهاز Android حقيقي. لإنشاء ملف .apk ، انقر فوق File-> Build for Android ... واملأ الحقول. ستكون النتيجة ملف .apk الذي يمكنك نسخه على جهازك ثم تثبيته. ستحتاج إلى التأكد من أنك قمت بتكوين جهازك للسماح بتثبيت التطبيق من مصادر غير معروفة. يوجد لدى Amazon بعض الوثائق الجيدة حول هذا الأمر ، حيث تحتاج أيضًا إلى ضبط هذا لتثبيت Amazon Appstore. يحتوي Corona أيضًا على دليل حول كيفية تسجيل تطبيقك واختباره على أجهزة Android.

مع تثبيت اللعبة بنجاح على جهازك ، فإن الشيء التالي هو تحسين اللعبة. على سبيل المثال ، لماذا لا تحاول إضافة صوت "pop" أو "فرقعة" كل شيء يتم استغلال البالون أو القنبلة فيه. كورونا لديه API لذلك:media.playEventSound ().

أو لماذا لا تحاول إضافة نوع ثالث من الأشياء ، أو قل دفعة قوية تضاعف النتيجة الحالية ، أو ماذا عن بعض الموسيقى الخلفية؟

يتم إحتوائه

تعد كتابة الألعاب باستخدام Corona أمرًا مستقيمًا تمامًا لأن SDK تتعامل مع أشياء مثل OpenGL وتتضمن محرك الفيزياء ثنائي الأبعاد المدمج. أيضا Lua سهلة التعلم ويجب ألا تكون صعبة لأي شخص لديه حتى الحد الأدنى من خبرة البرمجة. يحتوي موقع Coronalabs على الكثير من الوثائق بما في ذلك الكثير من الأدلة والبرامج التعليمية.

في أقل من 100 سطر من الكود لدينا لعبة عمل. حسنًا ، لن يفوز بأي من الجوائز ، لكنه يُظهر قوة ومرونة كورونا SDK.

لقد تم إطلاق Huawei Mate X فقط في الصين ، حيث وصل سعره إلى 2400 دولار تقريبًا ، لكن الشركة تتطلع بالفعل إلى عام 2020.أعلنت Huawei عن Mate X في حدث Chinee Mate X هذا الأسبوع ، وفقًا لـ Droidholic (وبعد...

يشتمل جهاز MateBook 13 على إصدارين: أحدهما مزود بمعالج Intel Core i5-8265U رباعي النواة من الجيل الثامن "Whiky Lake-U" بمعالج Mytic ilver ، والآخر مع معالج Intel Core i7-8565U رباعي النواة ت...

مثير للاهتمام