الفرق بين المراجعتين لصفحة: «Godot/best practices/node alternatives»

من موسوعة حسوب
Naser-dakhel (نقاش | مساهمات)
أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE:أين وكيف تتفادى استخدام العقد لكل شيء في جودو}}</noinclude> العقد سهلة الإنشاء، ولكن...'
 
ط مراجعة وتدقيق
 
سطر 4: سطر 4:
توفر جودو كائنات أخف لإنشاء واجهات برمجة تطبيقات التي تستخدم العقد، أبقي ذلك في عين الاعتبار كخيار عند تصميم كيفية بناء خاصيات مشروعك.
توفر جودو كائنات أخف لإنشاء واجهات برمجة تطبيقات التي تستخدم العقد، أبقي ذلك في عين الاعتبار كخيار عند تصميم كيفية بناء خاصيات مشروعك.


أولاً: الكائن Object: أبسط كائن خفيف يجب أن يستخدم الكائن الأصلي إدارة الذاكرة اليدوي، ومع ذلك ليس من الصعب إنشاء هيكلية بيانات خاصة حتى هيكلية العقد، وهي أخف من صنف العقدة
== الكائن Object ==
أبسط كائن خفيف يجب أن يستخدم الكائن الأصلي إدارة الذاكرة اليدوي، ومع ذلك ليس من الصعب إنشاء هيكلية بيانات خاصة حتى هيكلية العقد، وهي أخف من صنف العقدة <code>Node</code>.


* '''مثال''': لاحظ عقدة الشجرة، تدعم مستوى عالي من التعديل لجدول المحتوى مع عدد عشوائي من الصفوف والأعمدة. البيانات المستخدمة لإنشاء التصوير هي حقيقةً كائنات TreeItem.
*'''مثال''': لاحظ عقدة الشجرة <code>Tree</code>، تدعم مستوى عالي من التعديل لجدول المحتوى مع عدد عشوائي من الصفوف والأعمدة. البيانات المستخدمة لإنشاء التصوير هي حقيقةً كائنات <code>TreeItem</code>.
* '''ميزات''': تبسيط واجهات برمجة التطبيقات إلى كائنات ذات نطاق أصغر تساعد في تحسين الوصول ووقت التكرار. بدلًا من العمل مع مكتبة العقدة كاملة، يمكن اختصار مجموعة الكائنات يستطيع منها إنشاء وإدارة العقد الفرعية المناسبة
*'''ميزات''': تبسيط واجهات برمجة التطبيقات إلى كائنات ذات نطاق أصغر تساعد في تحسين الوصول ووقت التكرار. بدلًا من العمل مع مكتبة العقدة كاملة، يمكن اختصار مجموعة الكائنات يستطيع منها إنشاء وإدارة العقد الفرعية المناسبة.


<blockquote>'''ملاحظة''': يجب الانتباه عند التعامل معهم، إذ يمكن تخزين الكائن في متغير ولكن هذه المراجع يمكن أن تصبح غير صالحة بدون سابق إنذار. مثلًا إذا قرر من أنشئ الكائن حذفه، هذا سيعطي حالة خطأ إذا قرر أحدهم الوصول إليه لاحقًا.</blockquote>ثانيًا: RefCounted: أعقد قليلًا من الكائن. تتبع المراجع لنفسها وتحذف الذاكرة فقط عندما لا يبقى أي مرجع لنفسه. إن هذه مفيدة في معظم الحالات عندما نحتاج لبيانات في صنف مخصص
<blockquote>'''ملاحظة''': يجب الانتباه عند التعامل معهم، إذ يمكن تخزين الكائن في متغير ولكن هذه المراجع يمكن أن تصبح غير صالحة بدون سابق إنذار. مثلًا إذا قرر من أنشئ الكائن حذفه، هذا سيعطي حالة خطأ إذا قرر أحدهم الوصول إليه لاحقًا.</blockquote>


* '''مثال''': لاحظ كائن FileAccess إنه يعمل مثل كائن عادي عدا أنه ليس هناك حاجة لحذفه
== الكائن RefCounted ==
* '''ميزات''': نفس ميزات الكائن
أعقد قليلًا من الكائن <code>Object</code>. تتبع المراجع references لنفسها وتحذف الذاكرة فقط عندما لا يبقى أي مرجع لنفسه. إن هذه مفيدة في معظم الحالات عندما نحتاج لبيانات في صنف مخصص.


ثالثًا: المورد Resource: وهي معقدة أكثر من RefCounted لديها الخاصية الداخلية لسلسلة/ إزالة سلسلة (أي حفظ وتحميل) خصائص الكائن الخاص بهم من/إلى ملفات جودو المصدرية.
*'''مثال''': لاحظ كائن <code>FileAccess</code> إنه يعمل مثل كائن <code>Object</code> عادي عدا أنه ليس هناك حاجة لحذفه
*'''ميزات''': نفس ميزات الكائن <code>Object</code>


* '''مثال''': البرامج النصية، PackedScene (من أجل ملفات المشهد) والأنواع الأخرى مثل كل صنف AudioEffects. يمكن حفظ وتحميل كل هذه، أي هي تمتد من الموارد.
== المورد Resource ==
* '''الميزات''': [[Godot/scripting/resources|تحدثنا عن ميزات الموارد]] وعن طرق تخزين البيانات التقليدية، ولكن في سياق استخدام الموارد بدلًا من العقد، هذه تتميز بتوافق مع الفاحص. وهي بنفس خفة الكائنات و RefCounted يمكنها أيضًا إظهار وتصدير الخاصيات في الفاحص. هذا يسمح لهم لشغل دور مثل العقد الفرعية عن استعمالية الواجهة، ولكن أيضًا تحسن الأداء إذا كان الهدف أن يكون هناك أكبر عدد ممكن من المواد/العقد في المشهد.
وهو معقد أكثر من الكائن <code>RefCounted</code> لديه الخاصية الداخلية لسلسلة serialize/ إزالة سلسلة deserialize (مثل حفظ وتحميل) خصائص الكائن الخاص بهم من/إلى ملفات جودو المصدرية.
 
*'''مثال''': البرامج النصية، PackedScene (من أجل ملفات المشهد) والأنواع الأخرى مثل كل صنف <code>AudioEffects</code>. يمكن حفظ وتحميل كل هذه، أي هي تُشتق من المورد <code>Resource</code>.
*'''الميزات''': [[Godot/scripting/resources|تحدثنا عن ميزات الموارد <code>Resource</code>]] وعن طرق تخزين البيانات التقليدية، ولكن في سياق استخدام الموارد <code>Resource</code> بدلًا من العقد <code>Node</code>، هذه تتميز بتوافق مع الفاحص Inspector. وهي بنفس خفة الكائنات <code>Obejct</code> و <code>RefCounted</code> يمكنها أيضًا إظهار وتصدير الخاصيات في الفاحص. هذا يسمح لهم لشغل دور مثل العقد الفرعية عن استعمالية الواجهة، ولكن أيضًا تحسن الأداء إذا كان الهدف أن يكون هناك أكبر عدد ممكن من الموارد <code>Resource</code>/العقد <code>Node</code> في المشهد.
== مصادر ==
== مصادر ==
* [https://docs.godotengine.org/en/stable/tutorials/best_practices/introduction_best_practices.html صفحة Best Practices في توثيق جودو الرسمي.]
* [https://docs.godotengine.org/en/stable/tutorials/best_practices/introduction_best_practices.html صفحة Best Practices في توثيق جودو الرسمي.]
[[تصنيف:Godot|{{SUBPAGENAME}}]]
[[تصنيف:Godot|{{SUBPAGENAME}}]]
[[تصنيف:Godot Best Practices|{{SUBPAGENAME}}]]
[[تصنيف:Godot Best Practices|{{SUBPAGENAME}}]]

المراجعة الحالية بتاريخ 07:36، 28 أكتوبر 2023

العقد سهلة الإنشاء، ولكن لديها محدودياتها، فيمكن أن يحتوي المشروع عشرات آلاف العقد العاملة، ولكن كلما زاد تعقيدها كلما زاد الضغط على أداء المشروع.

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

الكائن Object

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

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

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

الكائن RefCounted

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

  • مثال: لاحظ كائن FileAccess إنه يعمل مثل كائن Object عادي عدا أنه ليس هناك حاجة لحذفه
  • ميزات: نفس ميزات الكائن Object

المورد Resource

وهو معقد أكثر من الكائن RefCounted لديه الخاصية الداخلية لسلسلة serialize/ إزالة سلسلة deserialize (مثل حفظ وتحميل) خصائص الكائن الخاص بهم من/إلى ملفات جودو المصدرية.

  • مثال: البرامج النصية، PackedScene (من أجل ملفات المشهد) والأنواع الأخرى مثل كل صنف AudioEffects. يمكن حفظ وتحميل كل هذه، أي هي تُشتق من المورد Resource.
  • الميزات: تحدثنا عن ميزات الموارد Resource وعن طرق تخزين البيانات التقليدية، ولكن في سياق استخدام الموارد Resource بدلًا من العقد Node، هذه تتميز بتوافق مع الفاحص Inspector. وهي بنفس خفة الكائنات Obejct و RefCounted يمكنها أيضًا إظهار وتصدير الخاصيات في الفاحص. هذا يسمح لهم لشغل دور مثل العقد الفرعية عن استعمالية الواجهة، ولكن أيضًا تحسن الأداء إذا كان الهدف أن يكون هناك أكبر عدد ممكن من الموارد Resource/العقد Node في المشهد.

مصادر