۱۳۸۸ آذر ۱۴, شنبه
۱۳۸۸ آبان ۲۸, پنجشنبه
Unity Vs Game Studio
- داشتن Editor یک پارچه.
- پشتیبانی از Wii و i-phone و Web Player.
- پشتیبانی از Visual Studio برای کد نویسی.
- داشتن چند نوع زبان Script نویسی (C#, Java, Boo).
- داشتن PerFabs.
- import مستقیم از برنامه های سه بعدی و دو بعدی.
- داشتن Tag و Layers.
- پشتیبانی از Editor Script.
- و...
- داشتن Sky Entity.
- پشتیبانی از سایه هایی بهتر.
- داشتن debuger.
- کامپایل به Native Code.
- pointer به Object های مختلف.
- و...
هر سوالی که درباره Unity داشتید می تونید به من E-mail بزنید خوشحال می شم.
۱۳۸۷ اسفند ۱۴, چهارشنبه
Texts
Text یک Object هست که می تونه String هایی رو روی صفحه نمایش بده.این هم شکل ساده معرفی Text :
TEXT* first_txt =
{
pos_x = 300;
pos_y = 250;
layer = 3;
font = some_font; // previously defined font
string (my_string);
flags = VISIBLE;
}
خیلی شبیه به Panel هست. نه؟ اجزای کمی هم داره:
pos_x و pos_y مکان نمایش Text در صفحه نسبت به راستای افقی و عمودی.
layer تعیین می کند که Text شما روی چه عناصری در صفحه قرار بگیرد.
font نام فنتی را برای نمایش Text در یافت می کند که قبلا معرفی شده. اگر آن را مقدار دهی نکنیم text با فنت پیش فرض نمایش داده می شود.- string نام رشته ای که می خواهید نمایش دهید.
- flags = VISIBLE شئ Text را در صفحه نمایش نمایان می کند.
یه مثال از Text و String در Lite-c اینجا می تونید ببینید.
//////////////////////////////////////////////////////////////////
#include <acknex.h>
#include <default.c>
/////////////////////////////////////////////////////////////////
STRING* aloha_str = "Welcome!";
TEXT* greetings_txt =
{
pos_x = 300;
pos_y = 250;
string (aloha_str);
flags = VISIBLE;
}
////////////////////////////////////////////////////////////////////
function main()
{
video_mode = 7;
screen_color.blue = 150;
}
۱۳۸۷ اسفند ۱۲, دوشنبه
Strings
به رشته ای از کارکترها String گفته می شه که توی Lite-c به شکل زیر می شه اوون رو معرفی کرد.
STRING* player_str = "Johnny Bravo";
STRING* my_very_own_string = "I'm even cooler than the coolest!"
STRING* player_meets_monster = "Die now! I won't have time for that later!";
STRING* crypto1234 = "a#45@123--//";
STRING* test_string = ""; // empty string
STRING* riddle = "#100"; // string which stores up to 100 characters
با یه نگاه به بالا ازش می شه چیز های زیر رو یادگرفت:
- همه String ها قبل از استفاده باید با کلمه کلیدی "*STRING" معرفی بشن.
- مقدار هر String باید بین یک جفت کتیشن ("") قرار بگیره.
- ما می تونیم در موقع معرفی به String مقدار دهی کنیم یا هیچ مقداری به اوون ندیم تا بعدا اوون رو پر کنیم.
- string ها می تونن طول مشخصی داشته باشن مثلا STRING* riddle = "#100"; که طول این رشته نحایتا 100 کرکتر می شه.
نکته مهم: String ها در Game Studio نمی توان به تنهایی نمایش داد. برای نمایش آنها باید از TEXT ها استفاده کرد.
String ها در Lite-c مثل *char یا []char در C می باشند با این مزیت که handle کردن آن راحت تر است چون طول آن به صورت اتوماتیک تنظیم می شود و برای افراد مبتدی مناسب است.
در Lite-c محدودیتی برای طول رشته ها وجود ندارد.
۱۳۸۷ بهمن ۲۱, دوشنبه
Flag های Panel
برای panel در Game studio می توان از flag های زیر استفاده کرد.
- VISIBLE آن را در صفحه نمایش نمایان می کند.
- OVERLAY قسمت های که رنگ آن ها مشکی است را نامرئی می کند.
- TRANSLUCENT با set کردن آن Panel به صورت شیشه ای نمایش داده می شود و مقدار آن را می توان با متغیر alpha تعیین کرد.
- FILTER فنت های panel و عکس های آن کمی Blur می شود. این برای نوشته های کوچک خوب نیست ولی برای نوشته های بزرگ (از نظر سایز) می تواند خیلی خوب باشد.
- LIGHT عکس Panel و تمام عناصر آن رنگ هایشان با رنگ هایی که با متقیر های Blue و Green و Red مقدار دهی شده با آن مخلوط می شود.
- CENTER_X با Set کردن آن Digit ها به صورت افقی در راستای محور X ها ساخته می شوند.
- CENTER_Y با Set کردن آن Digit ها وقتی از Bitmap Font استفاده می کنند به صورت عمودی در راستای محور Y ها ساخته می شوند.
۱۳۸۷ بهمن ۴, جمعه
توضیهات بیشتر برای Panel
خوب من تو قسمت قبلی چندتا از Properties مهم Panel رو گفتم و اینجا قست دارم همه اوون ها رو بگم.
- BMAP عکس پس زمینه برای Panel اگه سایز Panel رو تنظیم نکنیم انرازه Panel با اندازه عکس یکی می شه.
سایز عکس نباید از ماکسیمم سایز کارت گرافیکی برای نمایش بیشتر با شه این مقدار معمولا (2048x2048) پیکسل می باشد.
اگه Panel شما Bitmap ندارد می توانید از پارامتر های blue, green, red و فلگ LIGHT برای رنگ کردن Panel خود استفاده کنید. در غیر این صورت Panel شما نامرئی خواهد شد.
BMAP در Panel می تواند در بازی عوض شود ولی اگر سایز آن با سایز قبلی متفاوت باشد باید مقدارهای size_x و size_y مجددا مقدار دهی شوند. - Layer با دریافت یک شماره ترتیب نمایش Panel ها رو مشخص می کند عدد های بالاتر روی عدد های کوچک قرار می گیرند. مقدار پیش فرض 0 است.
این پارامتر فقط در زمان معرفی Panel قابل مقداردهی می شود. ودر زمان بازی باید از تابع layer_sort استفاده کرد.
مقادیر منفی باعث می شود که آنها نمایش داده نشوند. از این می توان برای Load کردن عکس ها بصورت نامرئی استفاده کرد. تا بعدا آنها را نمایش دهیم. - pos_x و pos_y برای تعیین جای Panel از نقطه گوشه بالا سمت چپ صفحه. اگه این مقادیر خارج از صفحه باشد. جاهایی از Panel دیده می شود که داخل Panel قرار داشته باشد.
- size_x و size_y اندازه طول و عرض Panel بر مبنای Pixel.
اگر سایز را مشخص نکنیم سایز panel به اندازه تصویر آن می شود واگر تصویر نداشته باشد به اندازه بزرگترین عنصر می شود واگر آن هم نباشد به اندازه صفحه می شود.
اگر سایز Panel از عکس داخل آن کمتر باشد. آن عکس بریده می شود. واگر بزرگتر باشد آن عکس در آن نقاط تکرار می شود. این می تواند برای درست کردن پس زمینه مناسب باشد. - scale_x و scale_y این مقدار که می تواند بین 10.0 منفی تا 10.0 مثبت باشد در اندازه Panel ضرب می شود و روی تمام عناصر آن تاثیر می گذارد.
عداد منفی باعث قرینه شدن هم می شود.
این مقادیر روی Font های ویندوزی (truetype) بی اثر است. - angle برای چرخاندن پنل بر حسب درجه در خلاف عقربه های ساعت .
برای نمایش دادن اعداد و متن و واکنش panel نسبت به موس این مقدار باید صفر باشد.
مرکز چرخش را می توان با Properties های center_x و center_y مشخص کرد.
همه عناصر Panel بجز Digit به همراه Panel می چرخند. - center_x و center_y نقطه کانونی Panel را مشخص می کند. این مقدار به طور پیش فرض در نقطه 0 و 0 Panel قرار دارد.
- alpha برای تعیین مقدار شیشه ای بودن Panel است که با تغییر آن تمام عناصر تاثیر می پزیرند و مقدار آن می تواند بین 0 تا 100 با شد. که پیشفرض آن 50 است.
برای شیشه ای کردن panel باید فلگ transparent را set کرده باشیم ویا از فایل هایی که از این قابلیت پشتیبانی می کنند مثل tga و dds استفاده کنیم.
عکس هایی مثل tga و dds با مقدار های شیشه ای خود به علاوه مقدار 50 نمایش داده می شوند. برای بیشتر کردن این مقدار اعداد پایین 50 را استفاده کنید. وبرای کمتر کردن آن ها مقادیر بالای 50 را استفاده کنید. - red و green و blue برای تعیین رنگ پس زمینه Panel ویا رنگ font های true type .
اگر فلگ LIGHT را set کرده باشید و عکس پس زمینه وجود داشته باشد تمام اعضا از این رنگ کمی تاثیر می گیرند واگر عکس وجود نداشته باشد این رنگ برای پرکردن رنگ پس زمینه استفاده می شود. در حالات های دیگر این رنگ برای تعیین رنگ Font برای عنصر Digit است. - mouse_map نام یک BMAP را گرفته و آن را به عنوان شکل موس فقط برای آن Panel نمایش می دهد اگر نام BMAP معتبر نباشد شکل Normal آن نمایش داده می شود.
- event نام یه تابع را دریافت می کند. این تابع را وقتی اجرا می کند که با موس یه جایی از panel به غیر از عناصر آن مانند Button کیلک کنید. panel یه پارامتراختیاری به تابع می فرستد که مشخص می کند کدام کلید موس فشار داده شده است.
- target_map نام یک BMAP دریافت می کند و Panel در آن Bitmap نمایش داده می شود.
- flags من قبلا چند تا از Flag های مهم رو گفته بودم ولی بعدا راجعبه آن ها به طور کامل بحث می کنم.
۱۳۸۷ بهمن ۲, چهارشنبه
Needle
اشتباه نکنید منظورم سوزن نیست. منظورم اینکه چجوری می شه یه عکس رو دور خودش چرخوند اگه یه خط معولی رو می خواستیم این کار رو با هاش انجام بدیم با چند تا از فورمول های مثلثات به را حتی قابل انجام بود ولی یه شکل پیچیده مثل این :

اوون هم توی هر پرژه به صورت تکراری یه کمی ملال آور می شد!
Needle آخرین عنصر Panel در Game Studio هست که برای ساختن عقربه های ساعت و یا سرعت سنج ماشین مفید هست.
معرفی Needle به شکل زیر است:
needle(x, y, bmap, cx, cy, angle, min, max, var);
- x و y مکان قرار گیری عقربه نسبت به جای Panel .
- bmap نام bitmap ای که می خواهید به عنوان عقربه نمایش داده بشه.
- cx و cy مکان pivot عکس بر حسب pixel رو مشخص می کند. این نقطه از گوشه بالا سمت چپ محاسبه می شه.
- angle اختلاف دجه. بر حسب درجه.
- min و max مقادیری برای تنظیم مقدار چرخش. که بین 0 تا 360 می تواند باشد.
- var متغیری برای این چرخاندن عقربه.
یه مثال ساده برای Needle در Lite-c اگه بخوام بنویسم:
//////////////////////////////////////////////////////////////////
#include <acknex.h>
#include <default.c>
/////////////////////////////////////////////////////////////////
var my_var ;
BMAP* panel1 = "main.pcx";
PANEL* my_pan =
{
needle(132,140,"needle.pcx",11,4,0,0,360,my_var);
BMAP = panel1;
flags = VISIBLE OVERLAY;
pos_x = 30;
pos_y = 30;
}
void main()
{
video_mode = 7;
screen_color.blue = 150;
while(1)
{
my_var -= time_step * 10;
wait(1);
}
}
دو نکته راجبه Needle :
اگر مقدار متغیر از مقدار min و max تجاوز کنه عقربه به چرخش خودش ادامه می ده!
Needle را نمی توان در Panel های چرخانده شده نمایش داد.
Sliders
یکی دیگه از عناصر panel در Game studio که زیاد ازش تو سا ختن menu ها استفاده می شه Slider ها هستند. که می شه به صورت عمودی یا افقی تو صفحه نمایش داده بشه. وبا Drag کردن اوون مقدار یه متغیر رو تقییر داد. مثل صدای بازی.
یه تصویر ساده برای Slider :
می دونم خیلی شبیه Slider نیست! Slider ها معمولا نقطه شروع و پایان دارن ما بایید اوون ها رو روی عکس panel بکشیم مثل این:
وبعد دکمه های Slider رو به اوون اضافه می کنیم اینجوری:
زیاد کار جالبی نیست. نه؟ ولی تنها راه همینه!
و طریقه معرفی Slider ها به این شکل هست:
hslider (x, y, size_in_pixels, slider_bitmap, minimum_value, maximum_value, variable);
vslider (x, y, size_in_pixels, slider_bitmap, minimum_value, maximum_value, variable);
این جا هم می تونید یک مثال از Slider ها رو بینید:
//////////////////////////////////////////////////////////////////
#include <acknex.h>
#include <default.c>
/////////////////////////////////////////////////////////////////
var speed = 50;
BMAP* mouse_pcx = "mouse.pcx"; // bitmap used for the mouse pointer
////////////////////////////////////////////////////////////////////
function main()
{
video_mode = 7;
screen_color.blue = 150;
mouse_map = mouse_pcx;
mouse_mode = 2;
while (1)
{
mouse_pos.x = mouse_cursor.x;
mouse_pos.y = mouse_cursor.y;
wait (1);
}
}
//////////////////////////////////////////////////////////////////////
PANEL* main_pan =
{
bmap = "main2.pcx";
pos_x = 250;
pos_y = 200;
vslider (16, 71, 90, "slider.pcx", 0, 100, speed);
digits (15, 50, 3, _a4font, 1, speed);
flags = OVERLAY VISIBLE;
}
////////////////////////////////////////////////////////////////////
خوب یه کم روی معرفی Slider بحث کنیم.
vslider (16, 71, 90, "slider.pcx", 0, 100, speed);
- مقدار 16 و 71 مقدار x و y نسبت به مبدا Panel هستند.
- مقدار 90 هم سایز (طول) Slider ما بر حسب Pixel هست.
- slider.pcx هم نام عکسی هست که می خواهیم برای دکمه Slider استفاده بشه.
- مقدار 0 کمترین مقدار Slider رو تعیین می کنه.
- مقدار 100 بیشترین مقدار Slider رو تعیین می کنه.
- speed نام متغیری که با کشیدن Slider مقدار اوون کم و زیاد می شه.
توجه: مقدار پیش فرض Slider شما به مقدار متغییر شما قبل از نمایش Slider بستگی داره.
۱۳۸۷ دی ۲۹, یکشنبه
Buttons
button یکی دیگه از عناصر panel هست که می شه روش کیلیک کرد. این از همون دکمه هایی که روزی هزار بار روشون کیلک می کنیم. butoon ها در game studio این جوری معرفی می شن:
button (x, y, bitmap_normal, bitmap_released, bitmap_over, function_clicked, function_released, function_over);
خوب این یکی یه کم طولانی ولی خیلی راحت هست !
- x و y جای button رو از جایی که panell هست تعیین می کنه. (مثل digit و window)
- bitmap_clicked عکس دکمه شما وقتی که روش با دکمه چپ کیلیک می کنید.
- bitmap_normal عکس دکمه وقتی که روش کیلیک نشده وموس روش نیست.
- bitmap_over عکس button شما وقتی که موس روش هست ولی کیلیک نشده.
- function_clicked نام تابعی که می خواهید با کیلک کردن روی button اجرا بشه.
- function_released نام تابعی که می خواهید بعد از کیلیک یعنی وقتی دکمه موس اوومد بالا اجرا بشه.
- function_over نام تابعی که می خواهید وقتی که موس روی آن رفت اجرا شود. البته بدون کیلیک.
توجه : هیچ وقت توی معرفی button ها در game studio وقتی که تابع ها رو معرفی می کنید پرانتز نزارید این کار باعث می شه که مرتبا اوون تابع اجرا بشه. یعنی حتی وقتی که button کیلیک نشده.
و اگه از تا بع هایی نمی خواهید استفاده کنید جای اوون ها NULL بزارید.
حالا یه مثال:
تو این مثال این ها رو می سازیم.
- یه Panel
- تغییر شکل موس
- یه button که هم رنگش عوض می شه و هم وقتی روش کیلیک کنیم بازی بسته می شه.
//////////////////////////////////////////////////////////////////
#include <acknex.h>
#include <default.c>
/////////////////////////////////////////////////////////////////
BMAP* mouse_pcx = "mouse.pcx";
// bitmap used for the mouse pointer
////////////////////////////////////////////////////////////////
function main()
{
video_mode = 7;
screen_color.blue = 150;
mouse_map = mouse_pcx;
mouse_mode = 2;
while (1)
{
mouse_pos.x = mouse_cursor.x;
mouse_pos.y = mouse_cursor.y;
wait (1);
}
}
function quit_program()
{
while (key_any) {wait (1);}
sys_exit(NULL);
}
////////////////////////////////////////////////////////////////
PANEL* main_pan =
{
bmap = "main.pcx";
pos_x = 250;
pos_y = 200;
button (250, 134, "quitclicked.pcx", "quitnormal.pcx", "quitover.pcx",
quit_program, NULL, NULL);
flags = OVERLAY ¦ VISIBLE;
}
اینجا از سه تا عکس برای button استفاده کردم. و یه کد هم برای حرکت دادن موس توی تابع main نوشتم. من اینجا راجبه موس حرفی نمی زنم و بعدا به طور کامل اوون رو شرح می دم. و تابع quit_program که برای خروج از بازی هست.
و فراموش نکنید که قبل از استفاده هر چیز باید اوون رو معرفی کنید.
را جبه تابع quit_program :
خط اول اینو می گه که وایسا تا همه دکمه های موس و کیبورد رها بشن.
خط دوم هم می گه که برنامه باید بسته بشه.
راجبه تابع wait :
یه آرگمان می گیره که اگه منفی یک باشه می گه که بازی به مدت یک ثانیه واقعی وایسه.
اگه مثبت باشه یعنی بازی به مدت یک تیک cpu وایسه. عمل کرد این تابع مثل تابع sleep ای که توی API های windows هست و به این درد می خوره که وقتی از حلقه های بی نهایت استفاده می کنیم سیستم هنگ نکنه. ما بیشتر با همون مقدار مثبت یک کار داریم.
۱۳۸۷ دی ۲۷, جمعه
Windows
ما فقط می خواهیم قسمتی از این Bitmap رو نمایش بدیم. که اوون مستقیما به ارطفاع هواپیما داره. چجوری این کار رو بکنیم؟
ما باید یه window معرفی کنیم.
var altitude = 0; // height of the plane
PANEL* first_pan =
{
bmap = "frame.pcx";
window (40, 10, 178, 160, "height.pcx", 0, altitude);
flags = VISIBLE;
}
و موقع اجرا این جوری هست.
خوب حالا کلید Tab رو بزنید و عبارت زیر رو تایپ کنید.
altitude = 150;
حالا Enter را بزنید. می بینید که جای Bitmap در window تغییر می کند ومقدار 185 در window دیده می شوداما شکل کلی معرفی window در 3D Game Studio
window (x, y, size_x, size_y, bitmap, variable_x, variable_y);
- window کلمه کلیدی برای معرفی Window
- x و y جای قرار گیری window در Panel (مثل Digit )
- size_x و size_y اندازه فضای نمایش window به یاد داشته باشید که bitmap خیلی بزرگ هست و همه اوون رو نمی خواهیم نمایش بدیم.
- bitmap اسم bitmap ای که قبلا معرفی کردیم.
- variable_x مقدار مبدا bitmap در راستای افقی.
- variabel_y مقدار مبدا bitmap در راستای عمودی. (در مثال بالا استفاده شد.)
نتیجه: وقتی یه window درست می کنیم شما فقط یک قسمت کوچک از bitmap را می بینید. با تغییر مقادیر variable_x و variable_y جای bitmap را در راستای عمودی و افقی تغییر داد. و مقدار طول و عرض window را هم با size_x و size_y مشخص می کنیم.
۱۳۸۷ دی ۲۳, دوشنبه
Digits
خوب تا اینجا یاد گرفتیم چجوری Panel بسازیم حالا نوبت ساختن Digit ها هست. Digit یکی از عناصر Panel هست که می تونه مقادیر عددی رو نمایش بده.
PANEL* first_pan =
{
digits (410, 200, 2, *, 1, sys_seconds);
flags = VISIBLE;
}
یه چیجای عجیبی اینجا هست! من فکر می کنم که تو معرفی Panel باید توش یه Bitmap رو معرفی کرد. مثل "bmap = some_bitmap;" ویا مقدار های عددی برای pos_x و pos_y ! ما تصویر نمی خوایم پس خط معرفی bitmap نداریم. وننوشتن pos_x و pos_y باعث 0 شدن آنها می شود.
معرفی کردن Digit به نظر که سخت نمی رسه.
digits (410, 200, 2, *, 1, sys_seconds);
- digits که کلمه کلیدی هست.
- دو عدد اول (x = 410 and y = 200) مکان نمایش Digit رو از محل قرار گیری panel مشخص می کند. اگه panel در مختصات pos_x = 20 و pos_y =30 با شه. پنل ما در نقطه x = 430 و y = 230 ازمبدا صفحه قرار می گیره.
- عدد 2 کد Format هست. در اینجا یک عدد هست که باسه نمایش اعداد از اوون استفاده می شه تو این مثال من می تونم اعداد رو تا 99 نمایش بدم. ولی اگر من 2 رو با 5 عوض کنم می تونم تا عدد 99,999 رو نمایش بدم. از کد فرمت های پیچیده تر هم می شه باسه نمایش اعداد عشاری و text استفاده کرد.
- * به Game studio می گه که از font پیش فرض استفاده کن. این font برای نمایش چیزهای به صورت تستی برای Debug کردن استفاده می شود. ما می توانیم هر font که خواستیم معرفی و استفاده کنیم که توی پست های بعدی این کار رو توضیح می دم. ولی این font پیش فرض داخل Game studio موجود است واحتیاجی به معرفی ندارد.
- 1 یه ضریب هست که تو عددی که می خواهیم نمایش دهیم ضرب می شود!
- ودر آخر هم sys_seconds نام متغییری هست که می خواهیم نمایش دهیم. در اینجا ثانیه جاری سیستم رو گذاشتم هر چیزه دیگه ای هم خواستید میشه.
پس اگه شکل کلی Digit رو بخواهیم این جوری میشه.
digits (x, y, format, font, factor, variable);
اگه خواستید یه ساعت کامل داشته باشید.
digits (370, 200, 2, *, 1, sys_hours);
digits (390, 200, 2, *, 1, sys_minutes);
digits (410, 200, 2, *, 1, sys_seconds);
۱۳۸۷ دی ۲۰, جمعه
Panels
خوب ما با Panel چی می تونیم بسازیم؟ منظورم (Graphic user interface) یا GUI هست.
- panel های معمولی که یک عکس هست که روی صفحه نمایش داده میشه.
- Digits که یکی از عناصر Panel هست باسه نمایش نوشته یا عدد هست.
- Windows باسه درست کردن نوار جون یا قطب نما مناسب هستش.
- Button که معلومه. میشه روش کیلیک کرد تا یه تابع اجرا بشه.
- Slider که باکشیدن اوون می تونید یه مقدار متغییر رو کم و زیاد کنید.
- Needles که باسه ساختن عقربه ساعت یا سرعت سنج خیلی خوبه
فکنم فهمیدید که چقدر این panel باسه بازی لازم و مفید والبته دلچسبه!
یه کد ساده باسه panel :
////////////////////////////////////////////////////////////////////
#include <acknex.h>
#include <default.c>
////////////////////////////////////////////////////////////////////
BMAP first_pcx = "first.pcx"; // my first bmap
PANEL first_pan = // my first panel
{
pos_x = 0;
pos_y = 0;
layer = 1;
bmap = first_pcx;
flags = OVERLAY ¦ VISIBLE;
}
/////////////////////////////////////////////////////////////////////
function main()
{
video_mode = 7;
screen_color.blue = 150;
}
وقتی کد بالا رو اجرا کنیم.
این پنل خیلی قشنگ که روصفحه می بینید فایل bitmap اون این شکلی بوده
پس نقاط مشکی اضافه چی شده؟؟
خود Game Studio نقاطی که رنگ آنها
RGB(0,0,0)
با شد نامرئی می کند واگر ما بخواهیم نقاطی با رنگ مشکی ولی مرئی داشته باشیم تمامی مقادیر بجوز یکی از آنها مثلا قرمز را یک بدیم اون وقت دیگه اون نقاط با اینکه مشکی دیده می شه ولی نامرئی نمی شه!
حالا چجوری می گیم که این نقاط رو نامرئی بکنه ؟
با set کردن مقدار OVERLAY برای flag آن Panel باعث نامرئی شدن آن نقاط برای آن Bitmap ای که برای Panel معرفی کردیم می شود.
اگر بخواهیم چند flag را باهم مقدار دهی کنیم آن ها را با هم or می کنیم مثل:
flags = OVERLAY ¦ VISIBLE;
panel1.flags ¦= VISIBLE;
واگر بخواهیم یکی از آن ها را برداریم:
Panel1.flags &= OVERLAY;
مقدار Layer برای این است که ترتیب نمایش Panel ها را مشخص می کند وpanel هایی که مقدار Layer بیشتری دارند روی بقیه قرار می گیرند.
مقدار pos_x برای موقیت نمایش panel در راستای عمودی است.
مقدار pos_y برای موقیت نمایش panel در راستای افقی است.
Bitmaps
Bitmap چیزی جز یک تصویر که با برنامه های نقاشی دست شده نیست. شما در Game Studio می توانید از Format های زیادی از Bitmap ها استفاده کنید مثل pcx, bmp, tga, dds, jpg و غیره که می توانند 24bit یا 8bit باشند.
چجوری میشه یک Bitmap رو معرفی کرد؟ به مثال زیر توجه کنید.
BMAP* health_pcx = "health.pcx";
خوب ما کلمه کلیدی BMAP رو داریم و یک * که آخر اوون هست. ونام فایل Bitmap رو هم داخل " " مینیویسیم ویه ; که همیشه آخر همه خط ها هست. من اسم این Bitmap رو گذاشتم health_pcx یا می تونستم اینجوری بنویسم.
BMAP* test = "health.pcx";
حالا اسمش شد test .
البته همیشه سعی کنید که از اسم های با معنی استفاده کنید تا وقتی بعد از چند هفته دوباره به اون نگاه کردین بدونید این چیه مثل:
BMAP* health = "health.pcx";
شما میتونید بعد از چند هفته به یاد بیارید که health چی بوده من که یادم نمیاد متغییر بوده bitmap بوده یا چی بوده؟؟ پس یه راه بهتر:
BMAP* health_pcx = "health.pcx"
BMAP* armor_tga = "armor.tga";
بعضی ها هم از اسامی مخفف شده استفاده می کنن مثل bmHealth که bm یعنی Bitmap اگه این کار رو می کنید مطمعن با شید که همشه این مخفف ها به یاد داشته باشید وبه یک شکل استفاده کنید یعنی یک جا ننویسید bm وجای دیگه bp ویه جا دیگه ba !!!
Bitmap یکی از منابع مهم بازی است. هرجا که شما یک تصویر رو روی صفحه می بینید یک معرفی Bitmap پشت آن است.
پس برای اوون چی کارمیشه کرد؟؟؟
باسه نمایش یه Bitmap روی صفحه اول باید یه چیزایی یاد گرفت. به پست بعدی توجه کنید!
۱۳۸۷ دی ۱۸, چهارشنبه
اولین برنامه
#include <acknex.h>
#include <default.c>
var a = 0;
var b = 0;
var c = 0;
PANEL pDisplay
{
digits (35, 10, "a = %0.f", *, 1, a);
digits (35, 19, "b = %0.f", *, 1, b);
digits (35, 28, "c = %0.f", *, 1, c);
flags = VISIBLE;
}
function main()
{
video_mode = 7; // 800x600 pixels
screen_color.blue = 150; // dark blue
while (1)
{
c = a + b;
wait (1);
}
}
اگه کد بالا باستون خیلی پیچیده هست اصلا نگران نباشید چون من فقط
الان با خط های آبی اون کار دارم!
var a = 0;
var b = 0;
var c = 0;
خوب این یه معرفی ساده متغییر از نوع var
هست.
c = a + b;
درک این خط از Lite-c هم خیلی راحت هست. در
اینجا برنا مه داخل C حاصل جمع مقدار
a و b را قرار می دهد.
خوب بزارید یه مثال بزنم. اول این کد رو با پسوند
C ذخیره کنیم. مثلا Project1.c
بعد متمعن شوید که گزینه Use the current file for Test Run در منوی
Options->Preferences->Environment tab
علامت دار باشد.
وبعد کلید F5 رو بزنید.
حالا بازی اجرا میشه وشما یه صفحه آبی رو می بینید. (رنگ دلخواه من!)
بعد کلید TAB رو بزنید و اینو توش تایپ
کنید.
a=5;
و کلید Enter رو بزنید وبعد می بینید که
C هم برابر 5 شده. یعنی
5+0=5
حالا با همین روش مقدار b رو عوض کنید.
نتیجه معلومه.
راستی تابع main رو که یادنون نرفته:
video_mode = 7;
این یه متغییر از پیش تعریف شده است که وقتی مقدار 7 رو به اون می دیم یعنی اندازه صفحه بازی 800x600 باشد.
screen_color.blue = 150;
این خط هم رنگ صفحه رو تعیین می کند.
lite-c Language


راجبه header file ها هم این که Lite-c دوتا header file اصلی داره که یکی acknex.h هست و default.c که اولی تمام تابع هایی که ما برای ساخت بازی لازم داریم در آن است و دومی باسه debug کردن بازی هست.
درضمن می تونید از تمام header file هایی که در C استفاده می کردیم اینجا هم استفاده کنیم.
۱۳۸۷ دی ۱۷, سهشنبه
build کردن مرحله (Map Compiler)
از منوی File گزینه build map را انتخاب کنید.
- Build BSP Map برای compile کردن همه level به صورت BSP tree است که مناسب برای فضای بسته است (in door) این گزینه فقط در نسخه pro کارمی کند. (در همه نسخه ها موجود است ولی کار نمی کند و مدل Simple Map خروجی می دهد.)
- Build Simple Map مرحله را بدون ساخت BSP کامپایل می کند. این روش از روش قبل سریتر level را build می کند ولی در موقع اجرای بازی باعث کند شدن بازی می شود.
- Update Entities با انتخاب این گزینه entity هایی که در فایل wmb قبلی بودند properties های آنها update می شود بدون اینکه تمام مرحله دوباره Build شود.
- Update Textures مثل بالایی هست ولی فقط برای تغییرات textture ها هست.
- Update Lights برای دوباره محاسبه کردن نورهای static مرحله است.
- Visibility Calculations اگر خاموش باشد level شما زود تر compile می شود ولی render آن سنگینتر می شود.
- Light Calculations کیفیت سایه ها ونور ها را تعیین می کند. کیفیت پایینتر زود تر Build می شود.
- Warnings حالت Quiet هیچ Warning نمی دهد. حالت default پیقام های مهم را می دهد. حالت All تمام Warning ها را اعلام می کند.
- CPUs to be used تعداد CPU هایی که می خواهید برای Build مرحله استفاده شود.
- Detail faces محاسبه جزئیات face های model ها و بلاک های مرحله. اگر مقدار آن auto باشد فقط face هایی که دیده می شوند را محاسبه می کند.
- Zoom Level :بزرگ کردن اجسام قبل از compile وکوچک نمایی بعد از آن. کاربرد آن برای جلو گیری از خطای integer snap در level است. اندازه level در zoom factor ضرب می شود وحاصل نباید از Max Level Size بیشتر باشد.
- Tessellate Flat مقادیر کمتر باعث بالا رفتن کیفیت سایه ها برای نور های Dynamic می شود.(برای Texture های مسطح)(flat textures).
- Tessellate Turbulence مثل بالایی هست ولی برای textetuer های نا مسطح.(turbulence textures).
- Lightmap Ambient برای تعیین مقدار نور عمومی. مقادیر کمتر باعث بهتر شدن سایه های تاریکی می شود.
- Lightmap Gamma مقادیر بیشتر باعث درخشش (شفافیت) سایه ها می شود.
مشکل جابه جا شدن Pivot در level موقع import کردن Model
- WED را باز کنید و یک level جدید ایجاد کنید.
- وبعد از منوی File گزنه import وبعد import level from fbx
۱۳۸۷ دی ۱۶, دوشنبه
Import کردن model
اول باید در برنامه ای که مدل سازی را انجام داده ایم باید آن مدل را به یکی از Format های زیر Export کنیم.
- FBX
- 3Ds
- X
- Ase
بعضی از برنامه های 3D محور عودی آن ها Z و بعضی دیگر Y است که در موقع Export این سوال را می پرسد که محور عمودی شما کدام است و چون محور عمودی Game Studio محور Z است. شما Z را برای محور عمودی انتخاب کنید.
Game studio از Format های دیگری هم پشتیبانی می کند که من اینجا ننوشتم.
بعد از Export کردن از برنامه دلخواه تون MED رو باز کنید و از منوی File گزینه Import و بعد گزینه مربوط به فایلی که Export کرده بودید رو بزنید.
برای فایل های 3DS یه نکته مهم هست.
مقادیر زیر یک برای Scale Faktor باعث کوچک شدن جسم می شود و مقادیر بالای یک باعث بزرگ شدن مدل می شود.
درمورد pivot یا origin هم باید قبل از Export کردن جای درست باشد. تا بتوان به درستی از آن جسم استفاده کنیم. مثلا یک درب pivot آن در کنار آن است نه وسط آن.
Game studio از مقیاص quants استفاده می کند که تقریبا برابر یک Inch یا 2.54 سانتی متر است.
WED, MED ,SED
WED یا Level Editor که مراحل بازی رو با آن ساخته می شود. ابته میشه با برنامه های دیگر هم Import کرد.
MED یا Model Editor که اجسام سه بعدی بازی با آن ساخته می شود. از برنامه های دیگر هم میشه Import کرد.
SED یا Script Editor که کد نویسی برنامه با آن است.
سلام
سلام.
پست اول خالی بود نه به دلیل این که داشتم تست می کردم چه جوری هست. باسه این بود که همه چیز از 0 شروع میشه ولی به 0 نمی رسه.
سال نو میلادی (سال ستاره شناسی) مبارک.
من می خوام تو این بلاگ در رابطه با Game Studio که یک Engine باسه ساختن بازی های 3D هست صحبت کنم.
من فرض می کنم که کسانی که این مطالب رو می خونند به زبان C آشنایی کامل دارند. کسایی که آشنایی ندارند کتاب Teach Yourself C in 21 Days رو می تونن بخون.
