المؤلف: Magicblock; المصدر: MetaCat
تم إطلاق BOLT v0.1 في 5 مارس 2024. BOLT هو إطار عمل للتطوير على السلسلة يعمل على تبسيط تطوير الألعاب غير المسموح بها والقابلة للتركيب والتي يمكن أن توجد بشكل دائم على blockchain. يتضمن تصميم BOLT طبقة تسريع متوافقة مع SVM، مما يجعل أداء الألعاب ذات السلسلة الكاملة مشابهًا لخوادم الألعاب التقليدية متعددة اللاعبين دون التأثير على قابلية التركيب لحالة Solana العالمية. في هذا الإصدار المبكر، سنقدم BOLT CLI ونظام مكونات الكيان (ECS)، ونصف التحديثات الأخيرة، ونوضح كيفية تطوير لعبة بسيطة على السلسلة على Solana.
وضع ECS
على الرغم من أن Bolt هو أكثر من مجرد إطار عمل لنظام مكونات الكيان (ECS) ، لكننا نشجع استخدام نمط التصميم القوي هذا لتعزيز قابلية التركيب. ECS هي وسيلة لتنظيم التعليمات البرمجية والبيانات لتمكين الألعاب المعيارية والقابلة للتطوير، وهي الميزات الرئيسية التي نسعى إليها عند الإنشاء عبر السلسلة. كما يوحي الاسم، هناك:
الكيانات (الكيانات) هي كيانات تمثل عالم اللعبة شاء. وهي معرفات فريدة لا تحتوي على أي بيانات أو سلوك، ولكنها تعمل ببساطة كحاويات
يمكن "إرفاق" المكونات (المكونات) " إلى بنية البيانات الأساسية للكيان
ينفذ النظام (النظام) منطق اللعبة أو سلوكها من خلال العمل على الكيان الذي يحمل المكون
هذا الفصل بين الاهتمامات يمكّن من إنشاء بنية معيارية مرنة للغاية. يمكنك التحقق من جميع مزايا وضع ECS في الرابط أدناه؟
https://github.com/SanderMertens/ecs-faq?tab=readme- ov-file#what-is-ecs.
BOLT CLI
BOLT CLI هو امتداد لإطار عمل Anchor. وهو يشتمل على جميع ميزات إطار عمل تطوير Solana الشهير، بالإضافة إلى مجموعة شاملة من الوظائف لإنشاء مثيلات ومكونات وأنظمة عالمية.
تثبيت BOLT CLI
npm install @magicblock-labs/bolt-cli< br>
يمكنك التحقق من تثبيت BOLT CLI عن طريق:
bolt -h
لبدء مشروع يعتمد على BOLT، يرجى تشغيل:
bolt init <new -مساحة العمل- الاسم>
المكونات
في المجلد يحدد المثالprograms-ecs/components
مكون الموضع الذي يحتوي على إحداثيات x وy وz. تذكر أن المكونات هي هياكل بيانات بسيطة تحتوي على بيانات تتعلق بخصائص معينة للكيان. أنها لا تحتوي على أي منطق أو أساليب.
use bolt_lang::*;declare_id!("Fn1JzzEdyb55fsyduWS94mYHizGhJZuhvjX6DVvrm GbQ");#[component]#[derive(Copy)]pub struct Position { & nbsp ;pub x: i64, pub y: i64, pub z: i64,
< /pre># [component] يتعامل الماكرو مع جميع السلوكيات المحددة الأساسية لـ Solana. ليس عليك أن تفهم كيفية عمل الحسابات، أو كيفية تخصيص البايتات، أو أي شيء آخر غير تحديد هياكل البيانات.
المكون نفسه عبارة عن برنامج منتشر على السلسلة.
declare_id!("Fn1JzzEdyb55fsyduWS94mYHizGhJZuhvjX6DVvrmGbQ");
يحدد المعرف المكون الفريد للمنصب العنوان أعلاه.
الأنظمة
تحتوي الأنظمة على منطق تشغيل المكونات (Components). عادةً ما يتم تشغيل النظام على جميع الكيانات التي تحتوي على مجموعة محددة من المكونات. يتضمن المثالsystem_movement
المنطق الموضع
لتحديث المكون.
use bolt_lang::*;use component_position::Position;declare_id!("FSa6qoJXF BR3a7ThQkTAMrC15p6NkchPEjBdd4n6dXxA");#[system]pub mod system_movement { &n بسب; ; ؛ ; let position =&mut ctx.accounts.position; position.x += 1; Ok(ctx.accounts) struct المكونات { pub الموضع: المنصب، }
يقوم كل نظام (أنظمة) بتنفيذ تعليمات التنفيذ، وهي المسؤولة عن تطبيق منطق النظام على أي عدد من المكونات.
تحدد البنية المميزة بالماكرو #[system_input] مدخل.
ترجع تعليمات التنفيذ المكون المعدل، ويقوم البرنامج العالمي بتحديثه في بنية البيانات بعد التحقق من الأذونات ومنطق الأعمال.
مرة أخرى، لا تحتاج إلى الاهتمام بطبقة blockchain الأساسية عن طريق تحديد CPI، أو استرداد IDL، أو أي شيء آخر. ما عليك سوى تحديد حزمة المكونات التي تريد تشغيل أنظمتك عليها!
اربط كل شيء معًا بالبرنامج العالمي
الآن بعد أن أصبح لدينا المكونات (المكونات) والأنظمة (الأنظمة)، فلنقم بعد ذلك بإنشاء مثيل للعبة باستخدام البرنامج العالمي في TypeScript SDK. البرنامج العالمي هو نقطة الدخول لإنشاء مثيلات وكيانات ووظائف إضافية وأنظمة تنفيذ عالمية. يوفر SDK واجهات وطرق ملائمة للتفاعل مع BOLT.
التثبيت
لتثبيت Bolt sdk، قم بتشغيل الأمر التالي:
< pre>npm install @magicblock-labs/bolt-sdk --save-dev
إنشاء ملف مثيل عالمي (مثيل عالمي)
const initNewWorld = await InitializeNewWorld({ دافع: provider.wallet.publicKey, connection: provider.connection,});const tx = new anchor.web3.Transaction().add(createEntityIx);await provider.sendAndConfirm(initNewWorld.transaction);
إضافة كيان جديد (كيان)
const addEntity = await AddEntity({ الدافع: provider.wallet.publicKey, world: initNewWorld.worldPda, الاتصال: provider.connection, } );await provider.sendAndConfirm(addEntity.transaction);
إرفاق مكون المنصب بالكيان
< pre> const initComponent = await InitializeComponent({ دافع: provider.wallet.publicKey, entity: addEntity.entityPda , معرف المكون: positionComponent.programId,});انتظار provider.sendAndConfirm(initComponent.transaction);
تنفيذ نظام الحركة على مكون الموضع
const applySystem = await ApplySystem({ authority: provider.wallet .publicKey, النظام: systemMovement.programId, الكيان: addEntity.entityPda, المكونات: [positionComponent. ProgramId], });const tx = new anchor.web3.Transaction().add(applySystemIx);await provider.sendAndConfirm(applySystem.transaction);
في هذا المثال البسيط، قمنا بإنشاء كيان Player يحتوي على مكون موضع بإحداثيات x وy وz. يمكننا تنفيذ نظام الحركة لتغيير حالته. إليك أفضل ما في الأمر، باستخدام BOLT ECS لتحديد هياكل بيانات لعبتك، لن تكون قادرًا على إعادة استخدام الأنظمة والمكونات الحالية فحسب، بل يمكنك أيضًا السماح بسهولة بإجراء تعديلات أو امتدادات للعبتك. دعونا نفكر في ديناميكيات حركة أكثر تعقيدًا بعض الشيء، حيث يتم تعريف مكون السرعة الذي يغير موضعه على النحو التالي: #[derive(Copy)]pub struct Velocity { pub x: i64}
قد يرغب شخص ما في تقديم قدرات جديدة للتحرك بشكل أسرع. يمكنهم القيام بذلك ببساطة عن طريق إضافة نظام جديد يستخدم السرعة للعمل على مكون الموضع.
#[system]pub mod ; System_apply_velocity & nbsp; {& nbsp; pub & nbsp; & nbsp;-& gt; ctx.accounts.position.x += ctx; .accounts.velocity.x; Ok(ctx.accounts) } #[system_input] هيكل المكونات /p>
لاحظ مدى بساطة هذا الرمز. يأخذ هذا النظام الجديد مكونات الموقع والسرعة كمدخلات ويحدد منطق التشغيل. لا يوجد مفهوم لحساب Solana أو CPI، برنامج Agent World هو الذي يتعامل مع كل شيء هنا.
باستخدام بضعة أسطر من التعليمات البرمجية وعدم الحاجة إلى معرفة تقنية blockchain تقريبًا، قدمنا للتو سلوكًا جديدًا للألعاب!
الملخص
يستخدم BOLT وضع ECS لتمكين تطوير اللعبة يستطيع الأشخاص إنشاء ألعاب معيارية للغاية وفعالة وقابلة للتركيب. تعمل الكيانات كمكونات وحاويات لهياكل البيانات البدائية، مما يسمح بالتخصيص الديناميكي دون تغيير قاعدة التعليمات البرمجية الأساسية. يتفاعل النظام مع هذه المكونات لإدخال المنطق والسلوك في كيانات اللعبة. لا يؤدي هذا الفصل بين الاهتمامات إلى تبسيط عملية التطوير فحسب، بل يجعل أيضًا منطق اللعبة أكثر قابلية لإعادة الاستخدام ويعزز القدرة على توسيع اللعبة وتعديلها بطريقة غير مسموح بها بعد الإصدار.