View Full Version : سوال: Scripting Engine
kia.celever
یک شنبه 15 خرداد 1390, 13:21 عصر
سلام من چند تا سوال در مورد اسکریپت نویسی در انجین ها داشتم.
چه شکلی میتونیم یه Script Engine پیاده سازی کنم ؟
منظورم اینه که اصلا کامپایلر رو خودم باید پیاده سازی کنم یا نه ؟
کد اسکریپت چه شکلی با کد اصلی برنامه که با ++C نوشته شده ارتباط برقرار میکنه ؟
چه طور میشه اسکریپت ها رو در یه محیط Realtime مثل Level Editor عوض کرد و نتیجه رو همونجا دید ؟
در آخر به نظرتون از کدوم زبان اسکریپت نویسی استفاده کنم ؟ ( اگه سینتکسش به ++C نزدیک باشه بهتره )
ممنون !
سپول
یک شنبه 15 خرداد 1390, 13:38 عصر
زبان های اسکریپت زیادی تو اینترنت هست.
معروفترین و از سریعترین ها lua هست که توی بازی های مثل crysis هم استفاده شده.
اتصال هر انجین اسکرپیت به برنامه اصلی هم متفاوته، مثلا lua یک مقدار مشکلتر هست اما باز هم با کتابخانه هایی مثل luabind کار رو براتون راحتتر می کنه.
من خودم AngelScript استفاده می کنم که اتصالش به برنامه آسون هست، و زبانش هم شبیه C هست یک مقدار.
GameMonkey هم هست که زبانش شبیه C هست و سرعت خوبی هم داره اما متاسفانه به طور مداوم توسعه و آپدیت نمی شه.
برای نتیجه دیدن و موارد دیگه در ادیتور اول اسکرپیت انجین رو در برنامه قرار می دین و اون رو bind می کنید، بعد هم که با استفاده از توابع اسکرپیت انجین اون رو کامپایل و اجرا می کنید، ...
پیاده سازی کامپایلر و اسکریپت انجین هم به خودتون بستگی داره، بعضی ها انجام می دن بعضی ها هم نه. مثلا کاربر kochol در همین فروم اسکریپت انجین خودش رو درست کرده که می تونید برای اینکار از او کمک بگیرید.
kia.celever
یک شنبه 15 خرداد 1390, 13:55 عصر
مرسی !
این AngleScript به نظر چیز خوبی میاد آیا شیئ گرایی هم ساپورت میکنه ؟
شما که باهاش کار کردید میتونید توضیح بدید چه طوری از کلاس هایی که توی کد ++C تعریف کردیم توی اسکریپت استفاده کنیم ؟
و چه طور (مثلا) اشاره گری به اون کلاس رو به اسکریپت پاس بدیم ؟
سپول
دوشنبه 16 خرداد 1390, 11:25 صبح
بله object oriented هم ساپورت می ده.
برای اتصال به برنامه هم یک سری تابع مثل RegisterGlobalFunction و امثال اینها داره که باهاش می تونید توابع و تایپ ها رو در اسکریپت تعیین کنید که به طور مستقیم وصل می شه به توابع داخل برنامه . هر تایپی حتی string و array هم خودتون باید براش تعریف و پیاده سازی کنید.
دیگه برای اطلاعات بیشتر مستندات خودش رو بخون ... توضیح دادن من بی معنیه.
kia.celever
دوشنبه 16 خرداد 1390, 11:35 صبح
تصمیم گرفتم از Lua و Luabind استفاده کنم.
فقط یه سوال دیگه:
میتونیم کاری کنیم که لازم نباشه کد اسکریپتمون رو کنار فایل exe برنامه قرار بدیم ؟
مثلا اسکریپت رو قبلا کامپایل کنیم ؟
برای محافظت از کدهامون ...
چون اونجوری اسکریپت میتونه راحت دستکاری بشه و ...
سپول
دوشنبه 16 خرداد 1390, 15:12 عصر
بله، توی lua نمی دونم چجوریه ولی اون هم احتمال زیاد می شه، بهش می گن byte-code
در ضمن lua انتخاب مطمئن تری هست، از اونجا که معروفترین و جا افتاده ترین انجین اسکریپت ه . ActionScript رو من از لحاظ سلیقه ای بیشتر حال می کردم برای همین انتخابش کردم.
pswin.pooya
دوشنبه 16 خرداد 1390, 16:12 عصر
ActionScript رو من از لحاظ سلیقه ای بیشتر حال می کردم برای همین انتخابش کردم.
منم مثل شما. البته فكر كنم منظورتون angle script بود :لبخند:
تصمیم گرفتم از Lua و Luabind استفاده کنم.
Lua يه كامپايلر فوقالعاده داره و كار باهاش خيلي راحته و يه كمك LuaJit فوقالعاده سريع ميشه (من خودم تست نكردم ولي يه جايي نوشته بود سرعتش دو برابر ميشه) و توي بازيهاي معروفي مثل FarCry استفاده شده. اما هم يه مشكل داره و هم يه مزيت و اون بدون نوع بودن داده هاي Lua هست. چون داده هاش بدون نوع هستن بر خلاف AngleScript نمي تونه مستقيما متغييرهاي داخل كد سي رو مقدار دهي كنه و يا اونها رو بخونه و اين خاصيت به پرفرمانسش هم صدمه ميزنه اما به خاطر كامپايلر قويي كه داره سرعتش از AngleScript بيشتره. (مگر اينكه برنامه شما به صورت دائم و پشت سر هم بخواد داده مابين كد C و اسكريپت جابجا كنه) اما همين خاصيتش باعث شده كه خيلي آسون بشه.
به هر حال از Lua توي بازيهاي معروفي مخصوصا بازيهايي كه زمان FarCry و قبل از اون (كه قدرت پردازنده خيلي كمتر از الان بود) استفاده شده و بخوبي جواب داده پس حالا هم ميتونه نياز كامل بازيسازها رو تامين كنه.
اين مابين اسكريپت kochol هم (Cyrus) هم سرعت خوبي داره و توي بعضي از تست ها سرعت اون از Lua هم بيشتره (فقط فكر كنم توي فرمولهاي رياضي كم مياره) و سينتكسش هم شبيه C/C++ هست:
http://cyrusscript.com/
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.