آموزش ساخت بازی سه بعدی به زبان Basic با دارک بیسیک Dark Basic
تهیه و آموزش نرم افزار دارک بیسیک
 
 
دوشنبه 02 اردیبهشت 1392 :: 02:44 ::  نويسنده : darkbasic
2- اشیاء پیچیده :
اشیاء پیچده به اشیائی گفته می شود که از چندین شیء مختلف تشکیل شده اند و هر قسمت آن رنگ و بافت خاصی را دارد . و هر قسمت می تواند نسبت به قسمت دیگر بصورت لولایی حرکت داشته باشد . مثلا هلیکوپتر ، ماشین ، آدم ، درخت ، کوه و ... دارای اجزاء مختلفی هستند که برای مثال آرنج یک انسان می تواند نسبت به بازویش چرخش داشته باشد . اشیاء پیچیده در دارک بیسیک توسط نرم افزار های مختلفی ایجاد می شوند و بصورت فایل نگهداری می شوند و برای استفاده باید آنها را از روی Hard صدا کنیم . از مهم ترین فرمت های اشیاء در دارک بیسیک می توان به DBO و X اشاره کرد . اشیاء با فرمت DBO جزء اشیاء استاندارد نرم افزار DarkBASIC محسوب می شوند . و به راحتی و با سرعت زیاد می توان آنها را از روی Hard صدا زد ( از روی فایل خواند ) . شیء بافرمت X نیز استاندارد موتور Direct X می باشد . اشیاء پیچیده به غیر از شکل و رنگ توانایی حرکت را هم دارند ؛ یعنی فریم هایی در این اشیاء وجود دارد که می توانیم با فرامینی مختف شیء را به حرکت درآوریم . بسته هایی به نام DarkMatter هم توسط این شرکت در سایت WWW.DarkBasicPro.Com معرفی شده که فرمتشان DBO و بسته هایی نیز در سایت وابسته به همین شرکت یعنی در سایت WWW.FpsCreator.Com شامل اشیاء سه بعدی با فرمت X قابل تهیه می باشد .
 
دستور LOAD OBJECT
با این دستور می توانیم یک شیء را از روی فایل صدا بزنیم . مانند مثال زیر :
 
LOAD OBJECT Filename,ObjectNumber
 
طبق این دستورالعمل به جای Filename مسیر و نام فایل و به جای ObjectNumber عددی طبیعی برای نام شیء قرار می دهیم تا بر روی شیء کنترل داشته باشیم . مانند مثال زیر :
 
Load Object "C:\Program Files\Dark Basic Software\Dark Basic Professional\Projects\RoomDemo\media\hero\ROOMDEMO.x",1
wait Key
 
در این مثال شیء ای با شکل آدمک نشان داده می شود . ولی چون شیء بصورت خوابیده طراحی شده از دستور XRotate استفاده می کنیم . مانند مثال زیر :
 
Load Object "C:\Program Files\Dark Basic Software\Dark Basic Professional\Projects\RoomDemo\media\hero\ROOMDEMO.x",1
XRotate Object 1,-90
wait Key
 
نکته : تمامی فرامینی که به اشیاء ساده ی سه بعدی نسبت داده می شدند ، بر روی اشیاء پیچیده ی سه بعدی هم کاربرد دارد .
 
نکته : هر فایل شیء سه بعدی با فرمت X در کنار خود فایلی دارد که بافت و رنگ آن شیء را مشخص می کند که باید همیشه در پوشه ای که شیء در آن است ، حضور داشته باشد .
 
نکته : اگر شیء در پوشه ای باشد که فایل اجرایی در آن پوشه اجرا می شود . میتوانیم به جای کد بالا بصورت زیر عمل کنیم .
 
 
Load Object "ROOMDEMO.x",1
XRotate Object 1,-90
wait Key
 
در این مثال فرض بر این است که فایل شیء سه بعدی ما همراه با فایل گرافیکی اش در پوشه ی است که فایل اجرایی در آن وجود دارد و هم اکنون در حال اجراست .
 
دستور PLAY OBJECT
با این دستور می توانیم اشیاء پیچیده ی سه بعدی را که در آن فریم هایی برای حرکت قرار داده شده به حرکت در آوریم . مانند دستورالعمل زیر :
 
PLAY OBJECT ObjectNumber
 
طبق این دستورالعمل به جای ObjectNumber نام شیء مورد نظر را قرار می دهیم . مانند مثال زیر :
 
Load Object "C:\Program Files\Dark Basic Software\Dark Basic Professional\Projects\RoomDemo\media\hero\ROOMDEMO.x",6
XRotate Object 6,-90
PLAY OBJECT 6
wait Key
 
دستور SET OBJECT SPEED
با این دستور سرعت حرکت شیء پیچیده را تنظیم می کنیم . مانند دستورالعمل زیر :
 
SET OBJECT SPEED ObjectNumber,Speed
 
طبق این دستورالعمل به جای ObjectNumber شماره ی شیء پیچیده ی سه بعدی و به جای Speed سرعت حرکت را بصورت یک عدد قرار می دهیم . ولی هر شیئی با سرعت خاص خود طراحی شده که باید آن را توسط Speed تنظیم کنیم . البته تنظیم سرعت شیء یا Speed آن شیء نسبت به سرعت دستور Sync باید توسط ما تنظیم شود . مانند مثال زیر :
 
Sync On : Sync Rate 30
Load Object "C:\Program Files\Dark Basic Software\Dark Basic Professional\Projects\RoomDemo\media\hero\ROOMDEMO.x",6
Rotate Object 6,-90,180,0
PLAY OBJECT 6
Set Object Speed 6,12000
Do
Sync
Loop
 
بدلیل اینکه شیء آدمک ما با سرعت بسیار کمی طراحی شده به خاطر همین سرعت معمولی آن را 1200 قرار دادیم . با اجرای این مثال تمامی فرم های شیء آدمک نشان داده شدند . یعنی در شیء تعدادی از فریم ها مثلا فریم 1 تا 6000 حرکت راه رفتن و 6000 تا 12000 پریدن و ... می باشد .
 
تابع TOTAL OBJECT FRAMES
این تابع تعداد کل فریم های شیء را برمی گرداند . مانند دستورالعمل زیر :
 
(varInteger = TOTAL OBJECT FRAMES(ObjectNumber
 
این تابع تعداد کل فریم های شیء شماره ی ObjectNumber را در متغیر varInteger ذخیره می کند . مانند مثال زیر :
 
Load Object "C:\Program Files\Dark Basic Software\Dark Basic Professional\Projects\RoomDemo\media\hero\ROOMDEMO.x",6
(HeroFrame# = Total Object Frames(6
(#Text 10,10,Str$(HeroFrame
Wait Key
 
در این مثال تعداد کل فریم های شیء شماره ی 6 توسط تابع ()Total Object Frames در متغیر #HeroFrame ذخیره و بعد چاپ می شود .
 
با اضافه کردن شماره ی شروع فریم به دستور PLAY OBJECT می توانیم حرکت شیء پیچیده را از همان فریم شروع کنیم . مانند مثال زیر :
 
Sync On : Sync Rate 30
Load Object "C:\Program Files\Dark Basic Software\Dark Basic Professional\Projects\RoomDemo\media\hero\ROOMDEMO.x",6
Rotate Object 6,-90,180,0
Set Object Speed 6,12000
PLAY OBJECT 6,6000
Do
Sync
Loop
 
در این مثال حرکت شیء از فریم 6000 شروع شد . با اضافه کردن شماره ی شروع و پایان به دستور PLAY OBJECT می توانیم حرکت شیء پیچده را از شماره ی فریم شروع تا شماره ی فریم پایانی حرکت دهیم . مانند مثال زیر :
 
Sync On : Sync Rate 30
Load Object "C:\Program Files\Dark Basic Software\Dark Basic Professional\Projects\RoomDemo\media\hero\ROOMDEMO.x",6
Rotate Object 6,-90,180,0
Set Object Speed 6,12000
PLAY OBJECT 6,6000,12000
Do
Sync
Loop
 
در این مثال شیء پیچیده ی شماره ی 6 از فریم 6000 تا فریم 12000 حرکت می کند .
 
دستور LOOP OBJECT
این دستور همانند دستور PLAY OBJECT می باشد . با این تفاوت که حرکت شیء از فریم شروع تا فریم پایانی دائما ادامه خواهد داشت . مانند دستورالعمل زیر :
 
LOOP OBJECT ObjectNumber
 
طبق این دستورالعمل به جای ObjectNumber نام شیء مورد نظر را قرار می دهیم . مانند مثال زیر :
 
Sync On : Sync Rate 30
Load Object "C:\Program Files\Dark Basic Software\Dark Basic Professional\Projects\RoomDemo\media\hero\ROOMDEMO.x",6
Rotate Object 6,-90,180,0
Set Object Speed 6,12000
Loop Object 6
Do
Sync
Loop
 
با اضافه کردن شماره ی شروع فریم به دستور LOOP OBJECT می توانیم حرکت شیء پیچیده را از آن فریم شروع کنیم . مانند مثال زیر :
 
Sync On : Sync Rate 30
Load Object "C:\Program Files\Dark Basic Software\Dark Basic Professional\Projects\RoomDemo\media\hero\ROOMDEMO.x",6
Rotate Object 6,-90,180,0
Set Object Speed 6,12000
Loop Object 6,6000
Do
Sync
Loop
 
در این مثال حرکت شیء از فریم 6000 شروع و تا فریم آخر دائما در حال حرکت خواهد بود . با اضافه کردن شماره ی شروع و پایان به دستور Loop Object می توانیم حرکت شیء پیچده را از شماره ی فریم شروع تا شماره ی فریم پایانی دائما حرکت دهیم . مانند مثال زیر :
 
Sync On : Sync Rate 30
Load Object "C:\Program Files\Dark Basic Software\Dark Basic Professional\Projects\RoomDemo\media\hero\ROOMDEMO.x",6
Rotate Object 6,-90,180,0
Set Object Speed 6,12000
Loop Object 6,6000,12000
Do
Sync
Loop
 
در این مثال شیء پیچیده ی شماره ی 6 از فریم 6000 تا فریم 12000 دائما حرکت خواهد داشت .

دستور STOP OBJECT
این دستور باعث توقف حرکت شیء سه بعدی می شود . مانند مثال زیر :
 
Sync On : Sync Rate 30
Load Object "C:\Program Files\Dark Basic Software\Dark Basic Professional\Projects\RoomDemo\media\hero\ROOMDEMO.x",6
Rotate Object 6,-90,180,0
Set Object Speed 6,12000
Loop Object 6,6000,12000
Do
Sync
If ReturnKey()=1 Then Stop Object 6
Loop
 
با اجرای این مثال با زدن دکمه ی Enter حرکت شیء سه بعدی متوقف خواهد شد .

تابع OBJECT SPEED
این تابع سرعت حرکت شیء پیچیده ی سه بعدی را که آخرین بار تنظیم شده باشد ، حساب می کند . مانند مثال زیر :
 
Sync On : Sync Rate 30
Load Object "C:\Program Files\Dark Basic Software\Dark Basic Professional\Projects\RoomDemo\media\hero\ROOMDEMO.x",6
Rotate Object 6,-90,180,0
Set Object Speed 6,12000
Loop Object 6
Do
((Text 10,10,str$(Object Speed(6
Sync
Loop
 
تابع OBJECT FRAME
این تابع شماره ی فریم جاری حرکت شیء پیچیده را برمی گرداند . یعنی مشخص می کند که هم اکنون حرکت شیء در چه فریمی می باشد . مانند مثال زیر :
 
Sync On : Sync Rate 30
Load Object "C:\Program Files\Dark Basic Software\Dark Basic Professional\Projects\RoomDemo\media\hero\ROOMDEMO.x",6
Rotate Object 6,-90,180,0
Set Object Speed 6,12000
Loop Object 6
Do
((Text 10,10,str$(Object Frame(6
Sync
Loop
 
دستور SET OBJECT FRAME
با این دستور شماره ی شروع حرکت شیء را از نو تنظیم می کنیم . مانند مثال زیر :
 
Sync On : Sync Rate 30
Load Object "C:\Program Files\Dark Basic Software\Dark Basic Professional\Projects\RoomDemo\media\hero\ROOMDEMO.x",6
Rotate Object 6,-90,180,0
Set Object Speed 6,12000
Loop Object 6
Do
If ReturnKey()=1 Then Set Object Frame 6,6000
Sync
Loop
 
تابع OBJECT EXIST
این تابع بررسی می کند که آیا شیء سه بعدی ( ساده یا پیچیده ) با شماره مورد نظر وجود دارد یا خیر . اگر وجود داشته باشد ، تابع مقدار یک و اگر وجود نداشته باشد ، تابع مقدار صفر را برمی گرداند . مانند مثال زیر :
 
Make Object Box 1,10,10,10
Make Object Sphere 2,20
Delete Object 2
Do
"If Object Exist(1) Then Text 10,10,"Box Is Exist
"If Object Exist(2) Then Text 10,25,"Sphere Is Exist
Loop
 
دستور HIDE OBJECT
این دستور باعث نامرعی شدن شیء سه بعدی ( ساده یا پیچیده ) می شود . مانند مثال زیر :
 
Make Object Box 1,10,20,30
Wait 2000
Hide Object 1
Wait Key
 
دستور SHOW OBJECT
اگر شیئ سه بعدی ( ساده یا پیچیده ) توسط دستور قبلی ( Hide Object ) نامرعی شده باشد ، می توانیم توسط دستور Show Object دوباره آن را آشکار کنیم . مانند مثال زیر .
 
Make Object Box 1,10,20,30
Wait 2000
Hide Object 1
Wait 2000
Show Object 1
Wait Key
 
تابع OBJECT VISIBLE
این تابع بررسی می کند که آیا شیء سه بعدی مورد نظر ( ساده یا پیچیده ) مرعی است یا نامرعی . اگر مرعی بود ، عدد یک و اگر نامرعی بود ، عدد صفر توسط تابع برمی گردد . مانند مثال زیر :
 
Sync On:Sync Rate 30
Make Object Box 1,10,20,30
Do
   Sync
   If InKey$()="h" Or InKey$()="H" Then Hide Object 1
   If InKey$()="S" Or InKey$()="s" Then Show Object 1
   If Object Visible(1)=1
      "Text 10,10,"Object Is Show
   Else
      "Text 10,10,"Object Is Hide
   EndIf
Loop
 
با اجرای این مثال با زدن دکمه ی H جعبه نامرعی و با زدن دکمه ی S جعبه مرعی می شود . و تابع ()Object Visible مرعی یا نامرعی بودن جعبه را بررسی و نتیجه را توسط دستور Text چاپ می کند .
 
دستور FIX OBJECT PIVOT
با این دستور ، شیء ثابت و محور های X و Y و Z شیء مورد نظر ، موازی محور های X و Y و Z مختصات فضای سه بعدی خواهند شد . یعنی محور X شیء ، موازی محور X فضای سه بعدی و محور Y شیء ، موازی محور Y فضای سه بعدی و محور Z شیء ، موازی محور Z فضای سه بعدی خواهد شد و نسب به شیء ثابت هم می ماند . مانند مثال زیر :
 
Make Object Box 1,10,10,10
ZRotate Object 1,45
Fix Object Pivot 1
Do
      YRotate Object 1,Object Angle Y(1)+0.1
Loop
Wait Key
 
دستور MOVE OBJECT
این دستور شیء را در فضای سه بعدی به عقب و جلو ( راستای محور Z خود شیء ) حرکت می دهد . مانند دستورالعمل زیر :
 
MOVE OBJECT ObjectNumber,Speed
 
طبق این دستورالعمل به جای ObjectNumber مقدار حرکت شیء سه بعدی ( ساده یا پیچیده ) و به جای Speed سرعت حرکت شیء را توسط یک عدد مشخص می کنیم . یعنی اگر Speed بزرگتر از صفر باشد ، شیء به همان مقدار به جلو و اگر Speed کوچک تر از صفر باشد ، شیء به همان مقدار به عقب حرکت خواهد کرد . مانند مثال زیر :
 
Sync On : Sync Rate 30
Make Object Box 10,100,10,100 : Position Object 10,0,-15,50
Load Object "C:\Program Files\Dark Basic Software\Dark Basic Professional\Projects\RoomDemo\media\hero\ROOMDEMO.x",6
xrotate object 6,-90
fix object pivot 6
Rotate Camera 0,0,0 : Set Object Speed 6,12000
Loop Object 6
Do
   If UpKey()=1 Then Move Object 6,10
   If DownKey()=1 Then Move Object 6,-10
   Sync
Loop
 
با اجرای این مثال اگر ما دکمه ی جهت بالا را فشار دهیم . شیء شماره ی 6 به جلو ( در جهت محور Z خود ) و اگر دکمه ی جهت پائین را فشار دهیم ، شیء شماره ی 6 به عقب ( خلاف جهت محور Z خود ) حرکت خواهد کرد .



 
 
 

ورود کاربران

خوش آمدید! لطفا وارد حساب خود شوید

رمز عبور را فراموش کرده‌اید؟
حساب کاربری ندارید؟

فراموشی رمز عبور

نام کاربری یا ایمیل خود را وارد کنید

یا

ثبت نام کاربران

در چند ثانیه حساب کاربری خود را بسازید

قبلا ثبت نام کرده‌اید؟

نظرات کاربران

دیدگاه خود را با ما در میان بگذارید