|
آموزش ساخت بازی سه بعدی به زبان Basic با دارک بیسیک Dark Basic تهیه و آموزش نرم افزار دارک بیسیک |
|||
|
دوشنبه 09 اردیبهشت 1392 :: 01:51 :: نويسنده : darkbasic
این دسته از دستورات وظیفه ی کنترل برخورد اشاء سه بعدی با یکدیگر را دارند . یعنی با بکارگیری این دستورات می توانیم کنترل کنیم که هنگام برخورد هر شیء با شیء دیگر ، چه کاری انجام شود . برای مثال دستورات زیر را اجرا می کنیم . sync on : sync rate 120 : hide mouse : color
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\basic3d\Marble.Bmp",1
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\basic3d\fur.Bmp",2
make object box 1,400,10,400 : position object 1,0,-5,0
make object box 2,400,100,10 : position object 2,0,50,-200
make object box 3,400,100,10 : position object 3,0,50,200
make object box 4,10,100,400 : position object 4,-200,50,0
make object box 5,10,100,400 : position object 5, 200,50,0
Adam=6
make Object box Adam,10,10,10 : position object Adam,50,20,50
for t=1 to 5
texture object t,1
next t
texture object Adam,2
Do
if upkey()=1 Then move object Adam,2
if downkey()=1 Then move object Adam,-2
if leftkey()=1
(yrotate object Adam,WrapValue(object angle y(Adam)-2
EndIf
if rightkey()=1
(yrotate object Adam,WrapValue(object angle y(Adam)+2
EndIf
(xCm#=object position x(Adam):yCm#=object position y(Adam
(zCm#=object position z(Adam):aCm#=object Angle y(Adam
hCm#=30:dCm#=50:sCm#=60
SET CAMERA TO FOLLOW xCm#,yCm#,zCm#,aCm#,dCm#,hCm#,sCm#,0
Sync
Loop
در این مثال با استفاده از چند جعبه ، فضایی ایجاد کردیم . با زدن دکمه های جهت بالا ، جهت پائین ، جهت راست و جهت پائین جعبه ی کوچک به جلو ، عقب ، راست و چپ حرکت خواهد کرد . ولی زمانی که به موانع برخورد می کند از آنها عبور می کند . اگر بخواهیم موانع را واقعی جلوه دهیم ( مثل دیوار سخت شوند تا نتوانیم از آن عبور کنیم ) باید برای هر شیء ( چه دیوار و چه شیء شخصیت محرک ) فضای برخورد تعریف کنیم . مانند دستور زیر :
دستور MAKE OBJECT COLLISION BOX
MAKE OBJECT COLLISION BOX ObjectNumber,X1,Y1,Z1,X2,Y2,Z2,CollisionFlag
طبق این دستورالعمل به جای ObjectNumber نام شییء سه بعدی و به جای (X1 و Y1 و Z1 ) و (X2 و Y2 و Z2 ) مختصات دو نقطه نسبت به مرکز شیء سه بعدی را قرار می دهیم و به جای CollisionFlag عدد صفر یا یک را قرار می دهیم . مانند مثال زیر :
Make Object Box 70 ,10,10,10
Make Object Collision Box 70,-5,-5,-5,5,5,5,1
Wait Key
در این مثال ابتدا یک جعبه با شماره ی 70 ایجاد کردیم و در خط بعدی با استفاده از دستور Make Object Collision Box مختصات دو نقطه نسب به مرکز شیء یعنی ، نقطه ی اول با مختصات X1=-5 ( فاصله ی نقطه ی اول تا محور X شیء سه بعدی ) و Y1=-5 ( فاصله ی نقطه ی اول تا محور Y شیء سه بعدی ) و Z1=-5 ( فاصله ی نقطه ی اول تا محور Z شیء سه بعدی ) ، و نقطه ی دوم با مختصات X2=5 ( فاصله ی نقطه ی دوم تا محور X شیء سه بعدی ) و Y2=5 ( فاصله ی نقطه ی دوم تا محور Y شیء سه بعدی ) و Z2=5 ( فاصله ی نقطه ی دوم تا محور Z شیء سه بعدی ) را قرار می دهیم . این دستور این دو نقطه را بعنوان ابتدا و انتهای قطر یک مستطیل در فضای شیء سه بعدی در نظر گرفته و فضای برخوردی به شکل جعبه ی سه بعدی در شیء سه بعدی ایجاد می کند و در عین حال این فضا را به شیء می چسباند . اگر به جای CollisionFlag عدد یک را قرار دهیم ، موقع دوران شیء سه بعدی فضای برخورد ایجاد شده هم چرخش خواهد کرد . در هر حالت با حرکت شیء سه بعدی فضای برخورد هم همراه با شیء حرکت خواهد کرد .
برای فهم بهتر فضای برخورد به شکل زیر دقت کنید .
![]() همانطور که در شکل می بینید ، هر شیء خود نیز دارای محور X و Y و Z می باشد . می توانیم نقاطی را نسبت به شیء تصور کنیم . دستور Make Object Collision Box دو نقطه در شیء ایجاد می کند . مانند شکل زیر :
![]() مختصات X و Y و Z دونقطه نسبت به مختصات شیء سه بعدی است . یعنی مختصات نقطه های فرضی ارتباط مستقیمی با مختصات فضای بازی ندارد . دستور فوق نقاط را ابتدا و انتهای قطر یک جعبه فرض می کند و جعبه ی فرضی را بعنوان فضای برخورد شیء سه بعدی در همان شیء ایجاد می کند . مانند شکل زیر :
![]() در مثال بالا جعبه ی کوچک بعنوان فضای برخورد جعبه ی بزرگ می باشد .
دستور DELETE OBJECT COLLISION BOX
با این دستور می توان فضای برخورد شیء سه بعدی را حذف کرد . مانند مثال زیر :
Make Object Box 70 ,50,10,30
Make Object Collision Box 70 ,-25,-5,-15,25,5,15,1
Delete Object Collision Box 70
Wait Key
تابع OBJECT COLLISION
این تابع به بررسی برخورد همراه با فررفتگی دو شیء سه بعدی می پردازد . اگر دو شیء با هم برخورد همراه با فرو رفتگی داشته باشند ، تابع مقدار یک و اگر برخورد همراه با فرورفتگی در هم نداشته باشند ، عدد صفر را برمی گرداند . مانند مثال زیر :
Make Object Box 20,10,10,10 : Position Object 20,0,25,30
Make Object Collision Box 20,-5,-5,-5,5,5,5,1
Make Object Sphere 16,10
Make Object Collision Box 16,-8,-8,-8,8,8,8,1
Position Camera 0,30,-60
Sync On : Sync Rate 30
Do
For MyAngle = 0 To 359 Step 3
Position Object 16,Sin(MyAngle)*30,25,Cos(MyAngle)*30
"If Object Collision(16,20)=1 Then Text 10,10,"Collision
Sync
Next MyAngle
Loop
با اجرای این مثال زمانی که کره با جعبه برخورد همراه با فرورفتگی داشته باشد ، تابع مقدار یک را برمی گرداند و عبارت Collision چاپ خواهد شد .
تابع OBJECT HIT
این تابع تنها به بررسی برخورد دو شیء سه بعدی با یکدیگر خواهد پرداخت . اگر دو شیء با هم برخورد داشته باشند ، تابع مقدار یک و اگر برخورد نداشته باشند ، عدد صفر برگردانده می شود . مانند مثال زیر :
Make Object Box 20,10,10,10 : Position Object 20,0,25,30
Make Object Collision Box 20,-5,-5,-5,5,5,5,1
Make Object Sphere 16,10
Make Object Collision Box 16,-8,-8,-8,8,8,8,1
Position Camera 0,30,-60
Sync On : Sync Rate 30
Do
For MyAngle = 0 To 359 Step 3
Position Object 16,Sin(MyAngle)*30,25,Cos(MyAngle)*30
"If Object HIT(16,20)=1 Then Text 10,10,"Hit
Sync
Next MyAngle
Loop
با اجرای این مثال زمانی که کره با جعبه برخورد می کند ، تابع مقدار یک را برمی گرداند و عبارت Hit چاپ خواهد شد .
دستور SET OBJECT COLLISION OFF و دستور SET OBJECT COLLISION ON
دستور SET OBJECT COLLISION OFF فضای برخورد شیء سه بعدی را غیرفعال
و دستور SET OBJECT COLLISION ON فضای برخورد شیء سه بعدی را دوباره فعال می کند . مانند مثال زیر :
Make Object Box 20,10,10,10 : Position Object 20,0,25,30
Make Object Collision Box 20,-5,-5,-5,5,5,5,1
Make Object Sphere 16,10
Make Object Collision Box 16,-8,-8,-8,8,8,8,1
Position Camera 0,30,-60
Sync On : Sync Rate 30
Do
For MyAngle = 0 To 359 Step 3
Position Object 16,Sin(MyAngle)*30,25,Cos(MyAngle)*30
"If Object Collision(16,20)=1 Then Text 10,10,"Collision
"If Inkey$()="F" Or Inkey$()="f
Set Object Collision Off 20
EndIf
"If Inkey$()="N" Or Inkey$()="n
Set Object Collision On 20
EndIf
Sync
Next MyAngle
Loop
با اجرای این مثال با زدن دکمه ی F فضای برخورد کره غیرفعال شده و عبارت Collision چاپ نخواهد شد و اگر دکمه ی N را بزنیم فضای برخورد شیء کره فعال شده و موقع برخورد کره با جعبه ، عبارت Collision چاپ خواهد شد .
تابع GET OBJECT COLLISION X و تابع GET OBJECT COLLISION Y و
تابع GET OBJECT COLLISION Z
تابع ()GET OBJECT COLLISION X مقدار حرکت شیء ( سه بعدی ) تا برخورد با شیء ( سه بعدی ) دیگر در راستای محور X ها و تابع ()GET OBJECT COLLISION Y مقدار حرکت شیء ( سه بعدی ) تا برخورد با شیء ( سه بعدی ) دیگر در راستای محور Y ها و تابع ()GET OBJECT COLLISION Z مقدار حرکت شیء ( سه بعدی ) تا برخورد با شیء ( سه بعدی ) دیگر در راستای محور Z ها را برمی گرداند . یعنی هر بار این توابع خوانده شود ، مقدار حرکتی که شیء ( سه بعدی ) با برخورد با شیء دیگر داشته را برمی گرداند . مانند مثال زیر :
Make Object Box 200,10,10,10 : Position Object 200,0,0,0
Make Object Collision Box 200,-5,-5,-5,5,5,5,1
(Make Object Sphere 1,10 : Color Object 1,Rgb(255,0,0
(Make Object Sphere 2,10 : Color Object 2,Rgb(0,255,0
(Make Object Sphere 3,10 : Color Object 3,Rgb(0,0,255
Make Object Collision Box 1,-5,-5,-5,5,5,5,1
Make Object Collision Box 2,-5,-5,-5,5,5,5,1
Make Object Collision Box 3,-5,-5,-5,5,5,5,1
Position Camera -10,10,-60 : Point Camera 0,0,0
Sync On : Sync Rate 30
Do
For MyAngle# = 0 To 359 Step 0.5
Position Object 1 , Sin(WrapValue(MyAngle#))*30,0,0
If Object Collision(1,200)=1
"Text 10,10,"Collision Red Sphere
(()Text 10,30,"GET OBJECT COLLISION X="+Str$(GET OBJECT COLLISION X
(()Text 10,50,"GET OBJECT COLLISION Y="+Str$(GET OBJECT COLLISION Y
(()Text 10,70,"GET OBJECT COLLISION Z="+Str$(GET OBJECT COLLISION Z
EndIf
Position Object 2 , 0,Sin(WrapValue(MyAngle#+45))*30,0
If Object Collision(2,200)=1
"Text 210,10,"Collision Green Sphere
(()Text 210,30,"GET OBJECT COLLISION X="+Str$(GET OBJECT COLLISION X
(()Text 210,50,"GET OBJECT COLLISION Y="+Str$(GET OBJECT COLLISION Y
(()Text 210,70,"GET OBJECT COLLISION Z="+Str$(GET OBJECT COLLISION Z
EndIf
Position Object 3 , 0,0,Sin(WrapValue(MyAngle#+90))*30
If Object Collision(3,200)=1
"Text 410,10,"Collision Blue Sphere
(()Text 410,30,"GET OBJECT COLLISION X="+Str$(GET OBJECT COLLISION X
(()Text 410,50,"GET OBJECT COLLISION Y="+Str$(GET OBJECT COLLISION Y
(()Text 410,70,"GET OBJECT COLLISION Z="+Str$(GET OBJECT COLLISION Z
EndIf
Sync
Next MyAngle
Loop
نکته : با توجه به مثال بالا برای استفاده از این توابع ، باید حتما برای هر برخورد یک IF تعریف کنیم ، تا مقدار برگشتی تابع مطابق با شرط مورد نظرمان باشد .
دستور SET OBJECT COLLISION TO SPHERES
این دستور فضای برخوردی به شکل کره در اطراف شیء ایجاد می کند . مانند دستورالعمل زیر :
SET OBJECT COLLISION TO SPHERES ObjectNumber
طبق این دستورالعمل به جای ObjectNumber شماره ی شیء مورد نظر را قرار می دهیم . مانند مثال زیر :
Make Object Box 10,100,10,100
SET OBJECT COLLISION TO SPHERES 10
Do
Loop
دستور AUTOMATIC OBJECT COLLISION
این دستور فضایی با شعاع مشخص به دور شیء سه بعدی ایجاد می کند . مانند دستورالعمل زیر :
AUTOMATIC OBJECT COLLISION ObjectNumber,Radius,Response
طبق این دستورالعمل به جای ObjectNumber شماره ی شیء مورد نظر و به جای Radius شعاع برخورد دور شیء را قرار می دهیم . اگر Response صفر باشد ، وقتی شیء به مانع متحرک برخورد کرد ، خودش به کنار کشیده میشود و اگر به مانع ثابت برخورد کرد ، نمی تواند از آن مانع عبور کند ( موانعی مثل دیوار یا تانک ) ، یا آن را کنار بزند . ولی اگر Response برابر یک باشد ، زمانی که به مانع برخورد می کند ، یا از داخل آن عبور می کند و اگر مانع متحرک باشد ( خود مانع از دستور بالا استفاده کرده باشد ) ، مانع را کنار خواهد زد . مانند مثال زیر :
imgAsfalt = 1
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\basic3d\Marble.Bmp",imgAsfalt
Set Ambient Light 50
Make Object Box 1,400,10,400 : Position Object 1,0,-5,0
Make Object Box 2,400,100,10 : Position Object 2,0,50,-200
Make Object Box 3,400,100,10 : Position Object 3,0,50,200
Make Object Box 4,10,100,400 : Position Object 4,-200,50,0
Make Object Box 5,10,100,400 : Position Object 5,200,50,0
make object collision box 1,-200,-5,-200,200,5,200,0
make object collision box 2,-200,-50,-5,200,50,5,0
make object collision box 3,-200,-50,-5,200,50,5,0
make object collision box 4,-5,-50,-200,5,50,200,0
make object collision box 5,-5,-50,-200,5,50,200,0
For intTexture = 1 To 5
Texture Object intTexture,imgAsfalt
Next intTexture
objMain = 10
Make Object Box objMain,10,10,10
Position Object objMain,0,970,0
(Color Object objMain,Rgb(255,0,0
objNone = 11
Make Object Box objNone,10,10,10
Position Object objNone,50,70,0
(Color Object objNone,Rgb(0,0,255
make object collision box objMain,-5,-5,-5,5,5,5,0
Set Object Collision To Spheres objMain
Automatic Object Collision objMain,5.5,0
make object collision box objNone,-5,-5,-5,5,5,5,0
Set Object Collision To Spheres objNone
Automatic Object Collision objNone,5.5,0
intAngle# = 0
Do
(#Inc intAngle#,0.1 : intAngle# = WrapValue(intAngle
If upkey()=1 Then move object objMain,0.2
If downkey()=1 Then move object objMain,-0.2
If leftkey()=1
(yrotate object objMain,WrapValue(object angle y(objMain)-0.5
EndIf
If rightkey()=1
(yrotate object objMain,WrapValue(object angle y(objMain)+0.5
EndIf
(opx=Object Position X(objMain
(opy=Object Position y(objMain
(opz=Object Position z(objMain
Position Object objMain,OPX,OPY-1,OPZ
Position Object objNone,Sin(intAngle#)*70,10,Cos(intAngle#)*70
(xCm#=object position x(objMain
(yCm#=object position y(objMain
(zCm#=object position z(objMain
aCm#=object Angle y(objMain):hCm#=30:dCm#=50:sCm#=60
SET CAMERA TO FOLLOW xCm#,yCm#,zCm#,aCm#,dCm#,hCm#,sCm#,0
Loop
در این مثال زمانی که مکعب قرمز به موانع متحرک و یا ثابت برخورد می کند ( با کنترل ما توسط دکمه های جهت ) ، خود مکعب قرمز به کنار می رود . چون طبق دستورالعمل Response برابر صفر است . ولی در مثال زیر Response برابر یک شده ؛ خواهد دید موانع مقاومتی در برابر مکعب قرمز نخواهند داشت .
imgAsfalt = 1
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\basic3d\Marble.Bmp",imgAsfalt
Set Ambient Light 50
Make Object Box 1,400,10,400 : Position Object 1,0,-5,0
Make Object Box 2,400,100,10 : Position Object 2,0,50,-200
Make Object Box 3,400,100,10 : Position Object 3,0,50,200
Make Object Box 4,10,100,400 : Position Object 4,-200,50,0
Make Object Box 5,10,100,400 : Position Object 5,200,50,0
make object collision box 1,-200,-5,-200,200,5,200,0
make object collision box 2,-200,-50,-5,200,50,5,0
make object collision box 3,-200,-50,-5,200,50,5,0
make object collision box 4,-5,-50,-200,5,50,200,0
make object collision box 5,-5,-50,-200,5,50,200,0
For intTexture = 1 To 5
Texture Object intTexture,imgAsfalt
Next intTexture
objMain = 10
Make Object Box objMain,10,10,10
Position Object objMain,0,970,0
(Color Object objMain,Rgb(255,0,0
objNone = 11
Make Object Box objNone,10,10,10
Position Object objNone,50,70,0
(Color Object objNone,Rgb(0,0,255
make object collision box objMain,-5,-5,-5,5,5,5,0
Set Object Collision To Spheres objMain
Automatic Object Collision objMain,5.5,1
make object collision box objNone,-5,-5,-5,5,5,5,0
Set Object Collision To Spheres objNone
Automatic Object Collision objNone,5.5,0
intAngle#=0
Do
(#Inc intAngle#,0.1 : intAngle# = WrapValue(intAngle
If upkey()=1 Then move object objMain,0.2
If downkey()=1 Then move object objMain,-0.2
If leftkey()=1
(yrotate object objMain,WrapValue(object angle y(objMain)-0.5
EndIf
If rightkey()=1
(yrotate object objMain,WrapValue(object angle y(objMain)+0.5
EndIf
(opx=Object Position X(objMain
(opy=Object Position y(objMain
(opz=Object Position z(objMain
Position Object objMain,OPX,OPY-1,OPZ
Position Object objNone,Sin(intAngle#)*70,10,Cos(intAngle#)*70
(xCm#=object position x(objMain
(yCm#=object position y(objMain
(zCm#=object position z(objMain
aCm#=object Angle y(objMain):hCm#=30:dCm#=50:sCm#=60
SET CAMERA TO FOLLOW xCm#,yCm#,zCm#,aCm#,dCm#,hCm#,sCm#,0
Loop
جمعه 06 اردیبهشت 1392 :: 01:45 :: نويسنده : darkbasic
دستور TURN CAMERA LEFT و دستور TURN CAMERA RIGHT دستور TURN CAMERA LEFT دوربین پیش فرض را حول محور Y خود ، به سمت چپ و دستورTURN CAMERA RIGHT دوربین پیش فرض را حول محور Y خود ، به سمت راست می چرخاند . مانند دستورالعمل های زیر :
TURN CAMERA LEFT AngleValue
TURN CAMERA RIGHT AngleValue
طبق این دستورالعمل ها به جای AngleValue مقدار چرخش دوربین ، ( بر حسب درجه ) را قرار می دهیم . مانند مثال زیر :
Make Object Box 10,100,10,100 : Position Object 10,0,-15,50
Make Object Box 20,10,10,10 : Position Object 20,50,30,70
Rotate Camera 0,0,0
Do
If LeftKey()=1 Then Turn Camera Left 1
If RightKey()=1 Then Turn Camera Right 1
Loop
با اجرای این مثال اگر ما دکمه ی جهت چپ را فشار دهیم ، دوربین پیش فرض به چپ و اگر دکمه ی جهت راست را فشار دهیم ، دوربین پیش فرض به راست گردش خواهد کرد .
با اضافه کردن شماره ی دوربین جدید می توانیم دوربین جدید را نیز حول محور Y خود به سمت چپ و راست ، بچرخانیم . مانند مثال زیر :
Make Object Box 10,100,10,100 : Position Object 10,0,-15,50
Make Object Box 20,10,10,10 : Position Object 20,50,30,70
Make Camera 2 : Set Current Camera 2 : Rotate Camera 2,0,0,0
Do
If LeftKey()=1 Then Turn Camera Left 2,1
If RightKey()=1 Then Turn Camera Right 2,1
Loop
دستور TURN OBJECT LEFT و دستور TURN OBJECT RIGHT
دستور TURN OBJECT LEFT شیء سه بعدی ( ساده یا پیچیده ) را حول محور Y خود ، به سمت چپ
و دستور TURN OBJECT RIGHT شیء سه بعدی ( ساده یا پیچیده ) را حول محور Y خود ، به سمت راست می چرخاند . مانند دستورالعمل های زیر :
TURN OBJECT LEFT ObjectNumber,Value
TURN OBJECT RIGHT ObjectNumber,Value
طبق این دستورالعمل ها به جای ObjectNumber نام شیء و به جای Value مقدار چرخش شیء را قرار می دهیم . مانند مثال زیر :
Make Object Box 10,100,10,100 : Position Object 10,0,-15,50
Make Object Box 20,10,10,10 : Position Object 20,50,30,70
Rotate Camera 0,0,0
Do
If LeftKey()=1 Then Turn Object Left 20,1
If RightKey()=1 Then Turn Object Right 20,1
Loop
با اجرای این مثال اگر ما دکمه ی جهت چپ را فشار دهیم ، جعبه به چپ و اگر دکمه ی جهت راست را فشار دهیم ، جعبه به راست گردش خواهد کرد .
دستور PITCH CAMERA UP و دستور PITCH CAMERA Down
دستور PITCH CAMERA UP دوربین پیش فرض را حول محور X خود ، به سمت بالا و دستورPITCH CAMERA DOWN دوربین پیش فرض را حول محور X خود ، به سمت پائین می چرخاند . مانند دستورالعمل های زیر :
PITCH CAMERA UP AngleValue
PITCH CAMERA DOWN AngleValue
طبق این دستورالعمل ها به جای AngleValue مقدار چرخش دوربین ، ( بر حسب درجه ) را قرار می دهیم . مانند مثال زیر :
Make Object Box 10,100,10,100 : Position Object 10,0,-15,50
Make Object Box 20,10,10,10 : Position Object 20,50,30,70
Rotate Camera 0,0,0
Do
If UpKey()=1 Then Pitch Camera Up 1
If DownKey()=1 Then Pitch Camera Down 1
Loop
با اجرای این مثال اگر ما دکمه ی جهت بالا را فشار دهیم ، دوربین پیش فرض به بالا و اگر دکمه ی جهت پائین را فشار دهیم ، دوربین پیش فرض به پائین گردش خواهد کرد .
با اضافه کردن شماره ی دوربین جدید می توانیم دوربین جدید را نیز حول محور X خود به سمت بالا و پائین ، بچرخانیم . مانند مثال زیر :
Make Object Box 10,100,10,100 : Position Object 10,0,-15,50
Make Object Box 20,10,10,10 : Position Object 20,50,30,70
Make Camera 2 : Set Current Camera 2 : Rotate Camera 2,0,0,0
Do
If UpKey()=1 Then Pitch Camera Up 2,1
If DownKey()=1 Then Pitch Camera Down 2,1
Loop
دستور PITCH OBJECT UP و دستور PITCH OBJECT DOWN
دستور PITCH OBJECT UP شیء سه بعدی ( ساده یا پیچیده ) را حول محور X خود ، به سمت بالا و دستورPITCH OBJECT DOWN شیء سه بعدی ( ساده یا پیچیده ) را حول محور X خود ، به سمت پائین می چرخاند . مانند دستورالعمل های زیر :
PITCH OBJECT UP Value
PITCH OBJECT DOWN Value
طبق این دستورالعمل ها به جای Value مقدار چرخش شیء ، را با یک عدد مشخص می کنیم . مانند مثال زیر :
Make Object Box 10,100,10,100 : Position Object 10,0,-15,50
Make Object Box 20,10,10,10 : Position Object 20,50,30,70
Rotate Camera 0,0,0
Do
If UpKey()=1 Then Pitch Object Up 20,1
If DownKey()=1 Then Pitch Object Down 20,1
Loop
با اجرای این مثال اگر ما دکمه ی جهت بالا را فشار دهیم ، شیء به بالا و اگر دکمه ی جهت پائین را فشار دهیم ، شیء به پائین گردش خواهد کرد .
دستور ROLL CAMERA LEFT و دستور ROLL CAMERA RIGHT
دستور ROLL CAMERA LEFT دوربین پیش فرض را حول محور Z خود ، به سمت چپ و دستورROLL CAMERA RIGHT دوربین پیش فرض را حول محور Z خود ، به سمت راست می چرخاند . مانند دستورالعمل های زیر :
ROOL CAMERA LEFT AngleValue
ROOL CAMERA RIGHT AngleValue
طبق این دستورالعمل ها به جای AngleValue مقدار چرخش دوربین ، ( بر حسب درجه ) را قرار می دهیم . مانند مثال زیر :
Make Object Box 10,100,10,100 : Position Object 10,0,-15,50
Make Object Box 20,10,10,10 : Position Object 20,50,30,70
Rotate Camera 0,0,0
Do
If LeftKey()=1 Then Roll Camera Left 1
If RightKey()=1 Then Roll Camera Right 1
Loop
با اجرای این مثال اگر ما دکمه ی جهت چپ را فشار دهیم ، دوربین پیش فرض به چپ و اگر دکمه ی جهت راست را فشار دهیم ، دوربین پیش فرض به راست چرخش خواهد کرد .
با اضافه کردن شماره ی دوربین جدید می توانیم دوربین جدید را نیز حول محور X خود به سمت بالا و پائین ، بچرخانیم . مانند مثال زیر :
Make Object Box 10,100,10,100 : Position Object 10,0,-15,50
Make Object Box 20,10,10,10 : Position Object 20,50,30,70
Make Camera 2 : Set Current Camera 2 : Rotate Camera 2,0,0,0
Do
If LeftKey()=1 Then Roll Camera Left 2,1
If RightKey()=1 Then Roll Camera Right 2,1
Loop
دستور ROLL OBJECT LEFT و دستور ROLL OBJECT RIGHT
دستور ROLL OBJECT LEFT شیء را حول محور Z خود ، به سمت چپ و دستورROLL OBJECT RIGHT شیء را حول محور Z خود ، به سمت راست می چرخاند . مانند دستورالعمل های زیر :
ROOL OBJECT LEFT ObjectNumber,Value
ROOL OBJECT RIGHT ObjectNumber,Value
طبق این دستورالعمل ها به جای ObjectNumber شماره ی شیء سه بعدی و به جای Value مقدار چرخش شیء ، را قرار می دهیم . مانند مثال زیر :
Make Object Box 10,100,10,100 : Position Object 10,0,-15,50
Make Object Box 20,10,10,10 : Position Object 20,50,30,70
Rotate Camera 0,0,0
Do
If LeftKey()=1 Then Roll Object Left 20,1
If RightKey()=1 Then Roll Object Right 20,1
Loop
با اجرای این مثال اگر ما دکمه ی جهت چپ را فشار دهیم ، شیء به چپ و اگر دکمه ی جهت راست را فشار دهیم ، شیء به راست چرخش خواهد کرد .
دستور CONTROL CAMERA USING ARROWKEYS
این دستور کنترل حرکت دوربین را به دکمه های جهت بالا و پایین و چپ و راست می سپارد . مانند دستورالعمل زیر :
CONTROL CAMERA USING ARROWKEYS CameraNumber,MoveSpeed,TurnSpeed
طبق این دستورالعمل به جای CameraNumber شماره ی دوربین و به جای MoveSpeed سرعت حرکت دوربین به جلو و عقب و به جای TurnSpeed سرعت چرخش دوربین به راست و چپ را قرار می دهیم . مانند مثال زیر :
Make Object Box 10,100,10,100 : Position Object 10,0,-15,50
Make Object Box 20,10,10,10 : Position Object 20,50,30,70
Make Camera 1 : Rotate Camera 1,0,0,0 : Set Current Camera 1
Do
CONTROL CAMERA USING ARROWKEYS 1,1,1
Loop
اگر بخواهیم دوربین پیش فرض را با دستورالعمل بالا تحت کنترل درآوریم ، به جای CameraNumber عدد صفر را قرار می دهیم . مانند مثال زیر :
Make Object Box 10,100,10,100 : Position Object 10,0,-15,50
Make Object Box 20,10,10,10 : Position Object 20,50,30,70
Rotate Camera 0,0,0
Do
CONTROL CAMERA USING ARROWKEYS 0,0.5,0.1
Loop
دستور SET CAMERA RANGE
با این دستور می توانیم شعاعی را که دوربین پیش فرض تا آن مسافت ، اشیاء را نمایش می دهد ، از نو تنظیم کنیم . مانند دستورالعمل زیر :
SET CAMERA RANGE NearValue,FarValue
طبق این دستورالعمل ، دوربین پیش فرض ، اشیاء موجود بین فاصله ی NearValue تا FarValue از خود را نشان خواهد داد . مانند مثال زیر :
Make Object Box 10,100,10,100 : Position Object 10,0,-15,50
Make Object Box 20,10,10,10 : Position Object 20,50,30,70
FarValue = 75
NearValue = 10
Do
If UpKey() Then Inc FarValue
If DownKey() Then Dec FarValue
If FarValue > 150 Then FarValue = 150
If FarValue < 20 Then FarValue = 20
(Text 10,10,"Far = "+Str$(FarValue
SET CAMERA RANGE NearValue,FarValue
Loop
با اجرای این مثال با زدن دکمه های جهت بالا و پائین ، مسافت نمایش داده شده در دوربین پیش فرض تغییر خواهد کرد .
با اضافه کردن شماره ی دوربین جدید می توانیم مسافت نمایش داده شده توسط دوربین جدید را نیز از نو تنظیم کنیم . مانند مثال زیر :
Make Object Box 10,100,10,100 : Position Object 10,0,-15,50
Make Object Box 20,10,10,10 : Position Object 20,50,30,70
Make Camera 2 : Set Current Camera 2 : Rotate Camera 2,0,0,0
FarValue = 75
NearValue = 10
Do
If UpKey()=1 Then Inc FarValue
If DownKey()=1 Then Dec FarValue
If FarValue > 150 Then FarValue = 150
If FarValue < 20 Then FarValue = 20
(Text 10,10,"Far = "+Str$(FarValue
SET CAMERA RANGE 2,NearValue,FarValue
Loop
دستور SET CAMERA TO FOLLOW
با این دستور ، دوربین پیش فرض بطور خودکار به دنبال نقطه ی مورد نظر خواهد رفت . همانند دستورالعمل زیر :
SET CAMERA TO FOLLOW X,Y,Z,Angle,Distance,Height,Smooth,Collision
طبق این دستورالعمل به جای X و Y و Z مختصات نقطه ی مورد نظر و به جای Angle زاویه ی دوربین نسبت به نقطه حول محور Y آن نقطه و به جای Distance فاصله ی دوربین تا نقطه و به جای Height ارتفاع دوربین تا نقطه و به جای Smooth شدت حرکت دوربین به سمت نقطه و به جای Collision رفتار دوربین نسبت به برخورد با اجسام سخت را قرار می دهیم ( 0 یا 1 ) . مانند مثال زیر :
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\basic3d\Marble.Bmp",1
make object box 1,1400,10,1400 : position object 1,0,-5,0
make Object box 2,10,10,10 : position object 2,50,10,50
For I = 1 To 2 : Texture Object I,1 : Next I
Do
(xCam#=object position x(2):yCam#=object position y(2
(zCam#=object position z(2):aCam#=object Angle y(2
hCam#=30:dCam#=50:sCam#=60
SET CAMERA TO FOLLOW xCam#,yCam#,zCam#,aCam#,dCam#,hCam#,sCam#,0
if upkey()=1 Then move object 2,1
if downkey()=1
move object 2,-1
EndIf
if leftkey()=1
(yrotate object 2,WrapValue(object angle y(2)-1
EndIf
if rightkey()=1
(yrotate object 2,WrapValue(object angle y(2)+1
EndIf
Loop
با اجرای این مثال شیء جعبه توسط دکمه های جهت بالا ، جهت پائین ، جهت چپ و جهت راست حرکت خواهد کرد . و دوربین پیش فرض به دنبال شیء حرکت می کند . با این کار نیازی به تعیین موقعیت مکانی دوربین نمی باشد . چون این دستور بطور خودکار این کار را انجام می دهد .
با اضافه کردن شماره ی دوربین جدید به این دستورالعمل می توانیم دوربین جدید را هم به دنبال شیء مورد نظر حرکت دهیم . مانند مثال زیر :
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\basic3d\Marble.Bmp",1
Make Camera 4 : Set Current Camera 4
make object box 1,1400,10,1400 : position object 1,0,-5,0
make Object box 2,10,10,10 : position object 2,50,10,50
For I = 1 To 2 : Texture Object I,1 : Next I
Do
(xCm#=object position x(2):yCm#=object position y(2
(zCm#=object position z(2):aCm#=object Angle y(2
hCm#=30:dCm#=50:sCm#=60
SET CAMERA TO FOLLOW 4,xCm#,yCm#,zCm#,aCm#,dCm#,hCm#,sCm#,0
if upkey()=1 Then move object 2,1
if downkey()=1 Then move object 2,-1
if leftkey()=1
(yrotate object 2,WrapValue(object angle y(2)-1
EndIf
if rightkey()=1
(yrotate object 2,WrapValue(object angle y(2)+1
EndIf
Loop
دستور GHOST OBJECT ON
این دستور شیء سه بعدی را نیمه شفاف می کند . مانند دستورالعمل زیر :
GHOST OBJECT ON ObjectNumber
طبق این دستورالعمل به جای ObjectNumber شماره ی شیء سه بعدی مورد نظر را قرار می دهیم . مانند مثال زیر :
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\basic3d\Marble.Bmp",1
Make Object Box 10,100,10,100 : Position Object 10,0,-5,0
Make Object Sphere 15,10
Position Camera 0,20,-60
Texture Object 10,1
Sync On : Sync Rate 30
Ghost Object On 15
Do
For MyAngle = 0 To 359 Step 2
Position Object 15,Sin(MyAngle)*50,10,Cos(MyAngle)*50
(Point Camera Object Position X(15),Object Position Y(15),Object Position Z(15
Sync
Next MyAngle
Loop
دستور GHOST OBJECT OFF
اگر با استفاده از دستور قبل ( GHOST OBJECT ON ) شیء سه بعدی شفاف شده باشد ، با این دستور شیء سه بعدی به حالت اولش برمی گردد . مانند مثال زیر :
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\basic3d\Marble.Bmp",1
Make Object Box 10,100,10,100 : Position Object 10,0,-5,0
Make Object Sphere 15,10
Position Camera 0,20,-60
Texture Object 10,1
Sync On : Sync Rate 30
Ghost Object On 15
Do
For MyAngle = 0 To 359 Step 2
Position Object 15,Sin(MyAngle)*50,10,Cos(MyAngle)*50
(Point Camera Object Position X(15) , Object Position Y(15) , Object Position Z(15
Sync
If Inkey$()="f" Or Inkey$()="F" Then Ghost Object Off 15
If Inkey$()="n" Or Inkey$()="N" Then Ghost Object On 15
Next MyAngle
Loop
با اجرای این مثال با زدن دکمه ی N شیء به حالت نیمه شفاف و با زدن دکمه ی F شیء به حالت عادی برمی گردد.
دوشنبه 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 خود ) حرکت خواهد کرد .
دوشنبه 02 اردیبهشت 1392 :: 02:38 :: نويسنده : darkbasic
دوربین : با اجرای مثال های بالا ، راجع به ایجاد اشیاء ساده و پیچیده ی سه بعدی ، اشیاء توسط دوربین پیش فرض DarkBasic نمایش داده می شدند . یعنی ما از دریچه ی دوربین پیش فرض به اشیاء نگاه می کردیم . می توانیم به غیر از دوربین پیش فرض ، خود نیز دوربین های دیگری هم ایجاد کنیم و از دید هر یک از آنها به صحنه نگاه کنیم . دستور MAKE CAMERA
با این دستور می توانیم دوربین جدید ایجاد کنیم . مانند دستورالعمل زیر :
MAKE CAMERA CameraNumber
طبق این دستورالعمل به جای CameraNumber عددی طبیعی در محدوده ی مثبت متغیر Integer قرار می دهیم . این عدد به معنای نام دوربین می باشد . توسط همین عدد در خطوط بعدی برنامه بر روی دوربین کنترل خواهیم باشیم . مانند مثال زیر :
Make Camera 1
در این مثال دوربین جدیدی با شماره ی 1 ایجاد شد .
دستور DELETE CAMERA
با این دستور دوربین جدید ایجاد شده را حذف می کنیم . مانند مثال زیر :
Make Camera 1
Make Camera 2
Delete Camera 1
Wait Key
تابع CAMERA EXIST
این تابع بررسی می کند که آیا دوربین مورد نظر وجود دارد یا خیر . اگر وجود داشته باشد ، تابع مقدار یک و اگر وجود نداشته باشد ، تابع مقدار صفر را برمی گرداند . مانند مثال زیر :
Make Camera 1
Make Camera 2
Delete Camera 1
Do
cls
"If Camera Exist(1) Then Print "Camera 1 Exist" Else Print "Camera 1 Not Exist
"If Camera Exist(2) Then Print "Camera 2 Exist" Else Print "Camera 2 Not Exist
Loop
دستور Set Current Camera
با این دستور دوربین مورد نظرمان را فعال می کنیم . مانند مثال زیر :
Make Camera 13
Make Camera 7
Make Camera 6
Set Current Camera 7
در این مثال سه دوربین با شماره های 13 و 7 و 6 ایجاد شدند و در آخر از بین این سه دوربین ، دوربین شماره ی 7 فعال شد . یعنی با اجرای دستور Set Current Camera ، صحنه ( تمام اشیاء ) از دید دوربین شماره ی 7 نشان داده خواهد شد .
دستور POSITION CAMERA
با این دستور موقعیت مکانی دوربین پیش فرض را در فضای سه بعدی مشخص می کنیم . مانند دستورالعمل زیر :
POSITION CAMERA X,Y,Z
طبق این دستورالعمل به جای X و Y و Z مختصات موقعیت مکانی جدید دوربین پیش فرض را در فضای سه بعدی ، قرار می دهیم . مانند مثال زیر :
Make Object Box 5,10,10,10
Wait 2000
Position Camera 0,10,-20
Wait Key
با اجرای این مثال بعد از 2 ثانیه دوربین پیش فرض به موقعت مکانی ( مختصات 20-Z= و 10Y= و 0X= ) پرش خواهد کرد ( تغییر مکان خواهد داد ) . و جسم ، سر جایش بی حرکت می ماند .
با اضافه کردن شماره ی دوربین جدید به این دستورالعمل ، می توانیم موقعت مکانی دوربین جدید را نیز در فضای سه بعدی مشخص کنیم . مانند مثال زیر :
Make Object Box 15,10,10,10
Make Camera 5
Position Camera 5,0,10,-20
Set Current Camera 5
Wait Key
در این مثال دوربین جدیدی با شماره ی 5 ایجاد شد و در خط سوم موقعت مکانی جدید آن در فضای سه بعدی مشخص شد و در خط چهارم ، توسط دستور Set Current Camera دوربین جدید که شماره اش 5 بود فعال شد و صحنه هم اکنون از دید دوربین جدید ( دوربین شماره 5 ) نشان داده می شود .
تابع CAMERA POSITION X و تابع CAMERA POSITION Y و تابع CAMERA POSITION Z
تابع ()CAMERA POSITION X موقعیت X دوربین پیش فرض ( فاصله ی دوربین پیش فرض تا محور X ها ) و تابع ()CAMERA POSITION Y موقعیت Y دوربین پیش فرض ( فاصله ی دوربین پیش فرض تا محور Y ها ) و تابع ()CAMERA POSITION Z موقعیت Z دوربین پیش فرض ( فاصله ی دوربین پیش فرض تا محور Z ها ) را بدست می آورند . مانند مثال زیر :
Position Camera 0,10,-20
()Print Camera Position X
()Print Camera Position Y
()Print Camera Position Z
Wait Key
تا قرار دادن شماره ی دوربین های جدید بعنوان ورودی در سه تابع بالا ، می توانیم موقعت X و Y و Z دوربین های جدید را نیز بدست آوریم . مانند مثال زیر :
Make Object Box 15,10,10,10
Make Camera 5 : Position Camera 5,50,100,-20
Do
(X = Camera Position X(5
(Y = Camera Position Y(5
(Z = Camera Position Z(5
(Text 10,10,Str$(X) : Text 10,25,Str$(Y) : Text 10,40,Str$(Z
Loop
دستور POSITION OBJECT
با این دستور موقعیت مکانی اشیاء سه بعدی را در فضای سه بعدی مشخص می کنیم . مانند دستورالعمل زیر :
POSITION OBJECT ObjectNumber,X,Y,Z
طبق این دستورالعمل به جای X و Y و Z مختصات موقعیت مکانی جدید شیء مورد نظر را قرار می دهیم . مانند مثال زیر :
Make Object Box 5,10,10,10
Make Object Sphere 6,15
Wait 2000
Position Object 6,10,20,10
Wait Key
با اجرای این مثال ابتدا یک جعبه با شماره ی 5 و یک کره با شماره ی 6 ایجاد شدند و بعد از 2 ثانیه شیء کره با شماره ی 6 هر جا که بود هم اکنون به موقعت مکانی ( مختصات 10=Z و 20=Y و 10=X ) پرش کرد ( تغییر مکان داد ) .
تابع Object POSITION X و تابع Object POSITION Y و تابع Object POSITION Z
تابع ()Object POSITION X موقعیت X شیء ( فاصله ی شیء تا محور X ها )
و تابع ()Object POSITION Y موقعیت Y شیء ( فاصله ی شیء تا محور Y ها )
و تابع ()Object POSITION Z موقعیت Z شیء ( فاصله ی شیء تا محور Z ها ) را بدست می آورند . مانند مثال زیر :
Make Object Cylinder 10,20
Position Object 10,-45,0,29
Do
(X = Object Position X(10
(Y = Object Position Y(10
(Z = Object Position Z(10
(Text 10,10,Str$(X
(Text 10,25,Str$(Y
(Text 10,40,Str$(Z
Loop
دستور POINT CAMERA
با این دستور دوربین پیش فرض هر کجا که باشد ، از همان جا به مختصات نقطه ای مشخص در فضای سه بعدی خیره خواهد شد . مانند دستورالعمل زیر :
POINT CAMERA X,Y,Z
طبق این دستورالعمل به جای X و Y و Z مختصات نقطه ای ( منظور از نقطه ، مکانی در فضا می باشد ) را در فضای سه بعدی مشخص می کنیم ، تا دوربین پیش فرض به آن مکان نگاه کند . مانند مثال زیر :
Make Object Box 10,100,10,100 : Position Object 10,0,-5,0
Make Object Box 20,10,10,10 : Position Object 20,50,30,50
Make Object Sphere 15,10
Position Camera 0,30,-60
Sync On : Sync Rate 30
Do
For MyAngle = 0 To 359 Step 2
(Text 10 , 10 , Str$(Sin(MyAngle)*50
Position Object 15,Sin(MyAngle)*50,25,Cos(MyAngle)*50
(Point Camera Object Position X(15),Object Position Y(15),Object Position Z(15
Sync
Next MyAngle
Loop
با اجرای این مثال ، کره دائما در حال حرکت است و دوربین پیش فرض هم دائما به آن نگاه می کند . با اضافه کردن شماره ی دوربین جدید به این دستورالعمل می توانیم دوربین جدیدمان را به این کره خیره کنیم . مانند مثال زیر :
Make Object Box 10,100,10,100 : Position Object 10,0,-5,0
Make Object Box 20,10,10,10 : Position Object 20,50,30,50
Make Object Sphere 15,10
Make Camera 7
Set Current Camera 7 : Position Camera 7,0,30,-60
Sync On : Sync Rate 30
Do
For MyAngle = 0 To 359 Step 2
(Text 10,10,Str$(Sin(MyAngle)*50
Position Object 15,Sin(MyAngle)*50,25,Cos(MyAngle)*50
(Point Camera 7,Object Position X(15),Object Position Y(15), Object Position Z(15
Sync
Next MyAngle
Loop
دستور POINT OBJECT
با این دستور شیء مورد نظر هر کجا که باشد ، به مختصات نقطه ای مشخص در فضای سه بعدی خیره خواهد شد . مانند دستورالعمل زیر :
POINT Object objectnumber,X,Y,Z
طبق این دستورالعمل به جای X و Y و Z مختصات نقطه ای را در فضای سه بعدی مشخص می کنیم تا شیء مورد نظر به آن نقطه نگاه کند ( یعنی محور Z شیء ، نقطه را هدف قرار دهد ) . مانند مثال زیر :
Make Object Box 10,100,10,100 : Position Object 10,0,-5,0
Make Object Box 20,10,10,10 : Position Object 20,50,30,50
Make Object Sphere 15,10
Position Camera 0,30,-60
Sync On : Sync Rate 30
Do
For MyAngle = 0 To 359 Step 2
(Text 10,10,Str$(Sin(MyAngle)*50
Position Object 15,Sin(MyAngle)*50,25,Cos(MyAngle)*50
(Point Object 20,Object Position X(15),Object Position Y(15), Object Position Z(15
Sync
Next MyAngle
Loop
با اجرای این مثال شیء جعبه به کره ( مختصات X و Y و Z کره ) خیره خواهد شد .
دستور XROTATE CAMERA
این دستور دوربین پیش فرض را حول محور X خود دوربین ، دوران می دهد ( می چرخاند ) . مانند دستورالعمل زیر :
XROTATE CAMERA XAngle
طبق این دستورالعمل به جای XAngle زاویه دوربین حول محور X خودش را قرار می دهیم . یعنی عددی در محدوده ی 0 تا 360 مانند مثال زیر :
Make Object box 20,40,40,40
Sync On : Sync Rate 30
Do
For Xangle = 0 To 360 Step 5
Xrotate Camera Xangle
Sync
Next Xangle
Loop
با اضافه کردن شماره ی دوربین جدید به این دستورالعمل می توانیم دوربین جدید را حول محور X خودش ، دوران دهیم ( بچرخانیم ) . مانند مثال زیر :
Make Camera 17
Set Current Camera 17
Make Object box 20,40,40,40
Sync On : Sync Rate 30
Do
For Xangle = 0 To 360 Step 5
Xrotate Camera 17,Xangle
Sync
Next Xangle
Loop
دستور YROTATE CAMERA
این دستور دوربین پیش فرض را حول محور Y خودش دوران می دهد ( می چرخاند ) . مانند دستورالعمل زیر :
YROTATE CAMERA YAngle
طبق این دستورالعمل به جای YAngle زاویه دوربین حول محور Y خود دوربین را قرار می دهیم . یعنی عددی در محدوده ی 0 تا 360 مانند مثال زیر :
Make Object box 20,40,40,40
Sync On : Sync Rate 30
Do
For Yangle = 360 To 0 Step -5
Yrotate Camera Yangle
Sync
Next Yangle
Loop
با اضافه کردن شماره ی دوربین جدید به این دستورالعمل می توانیم دوربین جدید را حول محور Y خودش ، دوران دهیم ( بچرخانیم ) . مانند مثال زیر :
Make Camera 1
Set Current Camera 1
Make Object box 20,40,40,40
Sync On : Sync Rate 30
Do
For Yangle = 0 To 360 Step 5
Yrotate Camera 1,Yangle
Sync
Next Yangle
Loop
دستور ZROTATE CAMERA
این دستور دوربین پیش فرض را حول محور Z خودش دوران می دهد ( می چرخاند ) . مانند دستورالعمل زیر :
ZROTATE CAMERA ZAngle
طبق این دستورالعمل به جای ZAngle زاویه دوربین حول محور Z خودش را قرار می دهیم . یعنی عددی در محدوده ی 0 تا 360 مانند مثال زیر :
Make Object box 20,40,40,40
Sync On : Sync Rate 30
Do
For Zangle = 0 To 360 Step 5
Zrotate Camera Zangle
Sync
Next Zangle
Loop
با اضافه کردن شماره ی دوربین جدید به این دستورالعمل می توانیم دوربین جدید را حول محور Z خودش ، دوران دهیم ( بچرخانیم ) . مانند مثال زیر :
Make Camera 11
Set Current Camera 11
Make Object box 20,40,40,40
Sync On : Sync Rate 30
Do
For Zangle = 0 To 360 Step 5
Zrotate Camera 11,Zangle
Sync
Next Zangle
Loop
در این سه مثال جعبه ثابت بود و تنها دوربین در حال چرخش بود .
دستور ROTATE CAMERA
اگر بخواهیم به جای استفاده از دستورات قبلی جهت چرخش دوربین حول محور X و Y و Z خود دوربین ، تنها با یک دستور ، دوربین پیش فرض را حول محور X ها و Y ها و Z همان دوربین می چرخانیم ، پس از دستورالعمل زیر استفاده می کنیم .
ROTATE CAMERA Xangle,Yangle,ZAngle
طبق این دستورالعمل به جای Xangle مقدار چرخش دوربین حول محور X همان دوربین ، به جای Yangle مقدار چرخش دوربین حول محور Y همان دوربین ، و به جای ZAngle ، مقدار چرخش دوربین حول محور Z همان دوربین پیش فرض را قرار می دهیم . مانند مثال زیر :
Make Object box 22,40,40,40
Wait 2000
Rotate Camera 10,50,30
Wait Key
با اضافه کردن شماره ی دوربین جدید به این دستورالعمل می توانیم دوربین جدید را حول محورهای X و Y و Z همان دوربین جدید ، دوران دهیم ( بچرخانیم ) . مانند مثال زیر :
Make Camera 6 : Set Current Camera 6
Make Object box 22,40,40,40
Wait 2000
Rotate Camera 6,10,50,30
Wait Key
دستور XROTATE Object
این دستور شیء را حول محور X همان شیء دوران می دهد ( می چرخاند ) . مانند دستورالعمل زیر :
XROTATE OBJECT XAngle
طبق این دستورالعمل به جای XAngle زاویه شیء حول محور X خود شیء را قرار می دهیم . یعنی عددی در محدوده ی 0 تا 360 مانند مثال زیر :
Make Object box 20,40,40,40
Sync On : Sync Rate 30
Do
For Xangle = 0 To 360 Step 5
Xrotate Object 20,Xangle
Sync
Next Xangle
Loop
دستور YROTATE OBJECT
این دستور شیء را حول محور Y همان شیء دوران می دهد ( می چرخاند ) . مانند دستورالعمل زیر :
YROTATE OBJECT YAngle
طبق این دستورالعمل به جای YAngle زاویه دوربین حول محور Y خود شیء را قرار می دهیم . یعنی عددی در محدوده ی 0 تا 360 مانند مثال زیر :
Make Object box 20,40,40,40
Sync On : Sync Rate 30
Do
For Yangle = 360 To 0 Step -5
Yrotate Object 20,Yangle
Sync
Next Yangle
Loop
دستور ZROTATE OBJECT
این دستور شیء را حول محور Z همان شیء دوران می دهد ( می چرخاند ) . مانند دستورالعمل زیر :
ZROTATE OBJECT ZAngle
طبق این دستورالعمل به جای ZAngle زاویه شیء حول محور Z خود شیء را قرار می دهیم . یعنی عددی در محدوده ی 0 تا 360 مانند مثال زیر :
Make Object box 20,40,40,40
Sync On : Sync Rate 30
Do
For Zangle = 0 To 360 Step 5
Zrotate Object 20,Zangle
Sync
Next Zangle
Loop
شکل های زیر به ترتیب از سمت چپ به راست ، چرخش دوربین و یا اشیاء سه بعدی را حول محور های X و Y و Z خودشان نشان می دهد .
![]() دستور ROTATE OBJECT
اگر بخواهیم به جای استفاده از دستورات بالا ، تنها با یک دستور ، شیء را حول محور X و Y و Z همان شیء بچرخانیم ، از دستورالعمل زیر استفاده می کنیم .
ROTATE OBJECT ObjectNumber,Xangle,Yangle,ZAngle
طبق این دستورالعمل به جای ObjectNumber شماره ی شیء مورد نظر و به جای Xangle مقدار چرخش شیء حول محور X خود شیء ، به جای Yangle مقدار چرخش شیء حول محور Y خود شیء ، و به جای ZAngle ، مقدار چرخش شیء حول محور Z همان شیء را قرار می دهیم . مانند مثال زیر :
Make Object box 22,40,40,40
Wait 2000
Rotate Object 22,10,50,30
Wait Key
تابع CAMERA ANGLE X و تابع CAMERA ANGLE Y و تابع CAMERA ANGLE Z
تابع ()CAMERA ANGLE X زاویه ی محور X دوربین پیش فرض و تابع ()CAMERA ANGLE Y زاویه ی محور Y دوربین پیش فرض و تابع ()CAMERA ANGLE Z زاویه ی محور Z دوربین پیش فرض را حول محورهای خود دوربین بدست می آورند . مانند مثال زیر :
Position Camera 0,10,-20
Rotate Camera 20,30,-10
()Print CAMERA ANGLE X
()Print CAMERA ANGLE Y
()Print CAMERA ANGLE Z
Wait Key
تا قرار دادن شماره ی دوربین جدید بعنوان ورودی سه تابع بالا ، می توانیم زاویه ی محور هی X و Y و Z دوربین های جدید را نیز بدست آوریم . مانند مثال زیر :
Make Object Box 15,10,10,10
Make Camera 5 : Rotate Camera 5,50,100,-20
Do
(X = CAMERA ANGLE X(5
(Y = CAMERA ANGLE Y(5
(Z = CAMERA ANGLE Z(5
(Text 10,10,Str$(X) : Text 10,25,Str$(Y) : Text 10,40,Str$(Z
Loop
تابع OBJECT ANGLE X و تابع OBJECT ANGLE Y و تابع OBJECT ANGLE Z
تابع ()OBJECT ANGLE X زاویه ی محور X شیء و تابع ()OBJECT ANGLE Y زاویه ی محور Y شیء و تابع ()OBJECT ANGLE Z زاویه ی محور Z شیء را بدست می آورند . مانند مثال زیر :
Make Object Box 15,10,10,10
Rotate Object 15,30,-10,0
(Print Object ANGLE X(15
(Print Object ANGLE Y(15
(Print Object ANGLE Z(15
Wait Key
دستور COLOR OBJECT
با این دستور می توانیم شیء سه بعدی را با رنگ دلخواه رنگ آمیزی کنیم . مانند دستورالعمل زیر :
COLOR OBJECT ObjectNumber,ColorValue
طبق این دستورالعمل به جای ObjectNumber شماره ی شیء سه بعدی و به جای ColorValue شماره ی رنگ مورد نظرمان را قرار می دهیم . مانند مثال زیر :
Make Object Box 1,10,50,70
Make Object Sphere 2,20 : Position Object 2,30,0,0
Make Object Cylinder 3,30 : Position Object 3,-30,0,0
(Color Object 1,Rgb(255,0,0
(Color Object 2,Rgb(0,255,0
(Color Object 3,Rgb(0,0,255
Wait Key
دستور LOAD IMAGE
این دستور فایل تصویری با فرمت Bmp ، Jpg ، Tga ، Dds ، Dib و یا Png را بر روی حافظه فراخوانی ( از فایل تصویری موجود در Hard موقتا به Ram کپی می شود ) می کند . مانند دستورالعمل زیر :
LOAD IMAGE Filename,ImageNumber
طبق این دستورالعمل به جای Filename مسیر و نام فایل تصویری مورد نظر و به جای ImageNumber شماره ای به تصویر می دهیم تا توسط همین شماره بر روی تصویر کنترل داشته باشیم . مانند مثال زیر :
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\gfx\backdrop.Jpg",1
Wait Key
دستور TEXTURE OBJECT
این دستور تصویر فرخوانی شده در حافظه ( توسط دستور Load Image ) را به شیء سه بعدی می چسباند . مانند دستورالعمل زیر :
TEXTURE OBJECT ObjectNumber,ImageNumber
طبق این دستورالعمل به جای ObjectNumber نام شیء و به جای ImageNumber شماره ی تصویر فراخوانی شده در حافظه ( توسط دستور Load Image ) را قرار می دهیم تا تصویر به شیء سه بعدی بچسبد . مانند مثال زیر :
Make Object Sphere 5,10 : Position Camera 0,0,-20
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\basic2d\parchment.Jpg",3
TEXTURE OBJECT 5,3
Wait Key
با اجرای این مثال ابتدا یک شیء کره با شماره ی 5 در خط اول ایجاد و بعد تصویری با فرمت Jpg با شماره ی 3 به حافظه فراخوانی شد ( از فایل تصویری موجود در Hard موقتا به Ram کپی شد ) و توسط دستور TEXTURE OBJECT تصویر شماره ی 3 به شیء شماره ی 5 چسبید .
تابع IMAGE EXIST
این تابع بررسی می کند که آیا تصویری با شماره ی مورد نظر ایجاد شده یا نه .
اگر تابع ()Image Exist عدد یک را برگرداند یعنی تصویر ایجاد شده ( یعنی بر روی حافظه فراخوانی شده ) و اگر عدد صفر برگردانده شود ، یعنی تصویری با این شماره ایجاد نشده . مانند مثال زیر :
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\basic2d\parchment.Jpg",3
".If Image Exist(3) Then Print "Image 3 Exist
".If Image Exist(5) Then Print "Image 5 Exist
Wait Key
در این مثال تنها تصویری با شماره ی 3 ایجاد شده . پس تنها عبارت ( .Image 3 Exist ) چاپ خواهد شد .
دستور DELETE IMAGE
این دستور تصویر ایجاد شده در حافظه ( توسط دستور Load Image ) را حذف می کند . مانند دستورالعمل زیر :
DELETE IMAGE ImageNumber
طبق این دستورالعمل به جای ImageNumber شماره تصویر ایجاد شده را قرار می دهیم . مانند مثال زیر :
Make Object Sphere 5,10 : Position Camera 0,0,-20
Load Image "C:\Program Files\Dark Basic Software\Dark Basic Professional\Help\examples\basic2d\parchment.Jpg",3
TEXTURE OBJECT 5,3
Wait 2000
Delete Image 3
Wait Key
با اجرای این مثال پس از دو ثانیه تصویر حذف شده و تصویر چسبانده شده به شیء نیز ناپدید می گردد .
دستور MOVE CAMERA
این دستور دوربین پیش فرض را در فضای سه بعدی به عقب و جلو ( راستای محور Z خود دوربین ) حرکت می دهد . مانند دستورالعمل زیر :
MOVE CAMERA DistanceValue
طبق این دستورالعمل به جای DistanceValue مقدار حرکت دوربین را توسط یک عدد مشخص می کنیم . یعنی اگر عدد بزرگتر از صفر باشد ، دوربین به همان مقدار به جلو و اگر عدد کوچک تر از صفر باشد ، دوربین به همان مقدار به عقب حرکت خواهد کرد . مانند مثال زیر :
Make Object Box 10,100,10,100 : Position Object 10,0,-15,50
Make Object Box 20,10,10,10 : Position Object 20,50,30,70
Rotate Camera 0,0,0
Do
If UpKey()=1 Then Move Camera 1
If DownKey()=1 Then Move Camera -1
Loop
با اجرای این مثال اگر ما دکمه ی جهت بالا را فشار دهیم . دوربین پیش فرض به جلو ( در جهت محور Z خود ) و اگر دکمه ی جهت پائین را فشار دهیم دوربین پیش فرض به عقب ( خلاف جهت محور Z خود ) حرکت خواهد کرد .
با اضافه کردن شماره ی دوربین جدید می توانیم دوربین جدید را نیز (راستای محور Z خود ) به عقب و جلو حرکت دهیم . مانند مثال زیر :
Make Object Box 10,100,10,100 : Position Object 10,0,-15,50
Make Object Box 20,10,10,10 : Position Object 20,50,30,70
Make Camera 2 : Set Current Camera 2
Rotate Camera 2,0,0,0
Do
If UpKey()=1 Then Move Camera 2, 1
If DownKey()=1 Then Move Camera 2, -1
Loop
یکشنبه 01 اردیبهشت 1392 :: 01:46 :: نويسنده : darkbasic
این فصل پرمطلب ترین فصل وبلاگ می باشد . و شامل دستوراتی سه بعدی برای ایجاد ، حذف و تغییرات بر روی اشیای ساده و پیچیده ی سه بعدی می باشد .
مختصات سه بعدی به دنیای سه بعدی خوش آمدین . مختصات سه بعدی در محیط دارک بیسیک شباهت زیادی به دنیای واقعی ما دارد . یعنی مختصات سه بعدی شامل سه محور اصلی X و Y و Z است . سیستم مختصات سه بعدی در BarkBASIC بصورت شکل زیر می باشد .
در این شکل محور X ها طول و محور Y ها عرض و محور Z ها ارتفاع می باشد . یعنی زمانی که به مانیتور کامپیوتر نگاه می کنیم ، محور های مختصات سه بعدی بصورت شکل زیر است .
مطابق شکل ، محور X ها جهت چپ و راست و محور Y ها جهت بالا و پائین و محور Z ها به داخل و خارج از مانیتور ( عمود بر صفحه ی نمایشگر ) اشاره دارد . شکل زیر سه صفحه ی اصلی X-Y و X-Z و Y-Z را نشان می دهد .
هر جسم و یا نقطه ای در سیستم مختصات سه بعدی با هر یک از محور های X و Y و Z دارای یک فاصله منحصر به فرد می باشد . مانند نقطه ی P در شکل زیر :
در شکل بالا به ترتیب از چپ به راست ، فاصله ی نقطه ی P با هر کدام از محور ها نشان داده شده است . مختصات نقطه ای که در تقاطع این سه محور وجود داشته باشد ( 0 و 0 و 0 ) می باشد . یعنی X آن برابر صفر و Y آن برابر صفر و Z آن برابر صفر است یا می توان گفت ( X = 0 , Y = 0 , Z = 0 ) . ولی اگر مطابق شکل بالا فاصله ی نقطه ی P از محور X ها 10 و از محور Y ها 12 و از محور Z ها 14 در نظر بگیریم ، مختصات نقطه ی P برابر ( 14 و 12 و 10 ) خواهد بود .
آزمایش عملی در فضای سه بعدی : کدهای زیر را اجرا می کنیم . سپس موس را به بالا و پائین و چپ و راست حرکت می دهیم . همچنین می توانیم با حرکت چرخ مابین دکمه های موس به پایین و بالا ، در مجموع موقعیت یک کره را در مختصات سه بعدی تغییر دهیم .
Make Object Sphere 1,10 Position Camera 0,0,-300 Do (OPX = Object Position X(1 (OPY = Object Position Y(1 (OPZ = Object Position Z(1 ()MMX = MouseMoveX ()MMY = MouseMoveY ()MMZ = MouseMoveZ ()Position Object 1,OPX+MMX(),OPY+MMY()*-1,OPZ+MMZ (OSX=Object Screen X(1 (OSY=Object Screen Y(1 (If OBJECT IN SCREEN(1 "("+(Text OSX(1),OSY(1),"(X="+Str$(OPX)+",Y="+Str$(OPY)+",Z="+Str$(OPZ EndIf If OPX > 150 Then Position Object 1,150,OPY,OPZ If OPX < -150 Then Position Object 1,-150,OPY,OPZ If OPY > 150 Then Position Object 1,OPX,150,OPZ If OPY < -150 Then Position Object 1,OPX,-150,OPZ If OPZ > 240 Then Position Object 1,OPX,OPY,240 If OPZ < -240 Then Position Object 1,OPX,OPY,-240 Loop
فعلا با دستورات نوشته شده ی این کد ها کاری نداریم . فقط آنها را تایپ و اجرا می کنیم . با اجرای این مثال و حرکت موس و چرخ مابین کلید های آن ، مختصات این کره بر روی صفحه چاپ خواهد شد . یعنی با حرکت موس به بالا و پائین موقعیت Y و با حرکت موس به چپ و راست موقعیت X و با حرکت چرخ مابین دو کلید موس ، موقعیت Z کره تغییر خواهد کرد . البته ما حرکت کره را محدود کردیم ، تا از صفحه زیاد دور نشود .
نکته ی تکراری : برای اینکه طول بعضی از خطوط برنامه آن قدر بلند است که در عرض جا نمی شود ، ما تمام خطوطی که متعلق به یک خط در برنامه است را در این وبلاگ به رنگ نارنجی نوشتیم .
اشیاء سه بعدی در DarkBASIC : اشیاء سه بعدی در DarkBasic به دو بخش تقسیم می شوند . بخش اول ، اشیاء ساده و بخش دوم اشیاء پیچیده .
1- اشیاء ساده : اشیای ساده شامل جعبه ، کره ، مکعب ، مخروط و ... می باشند . مانند شکل زیر :
دستور MAKE OBJECT BOX این دستور جعبه سه بعدی می سازد . مانند دستورالعمل زیر :
MAKE OBJECT BOX ObjectNumber,Width,Height,Depth
طبق این دستورالعمل به جای ObjectNumber یک عدد در محدوده ی مثبت Integer یعنی یک تا 2,147,483,647 قرار می دهیم . در واقع با ایجاد هر شیء باید یک عدد نیز به آن اختصاص دهیم که به معنای نام آن شیء می باشد . با وجود این عدد که به معنی نام آن شیء است ، می توانیم در خطوط بعدی ، دستورات لازم را به شیء اعمال کنیم . یعنی توسط همین عدد ، شیء را تحت کنترل در بیاوریم . و به جای Width عرض و به جای Height ارتفاع و به جای Depth عمق جعبه را قرار می دهیم . مانند مثال زیر :
ObjectNumber = 1 Make Object Box ObjectNumber,10,20,30 Wait Key
با اجرای این مثال جعبه ای با عرض 10 و ارتفاع 20 و عمق 30 ایجاد خواهد شد .
نکته : ما نمی توانیم دو شیء را با یک عدد نامگذاری کنیم . مثلا اگر مثال زیر نوشته شود ، برنامه با خطا روبرو خواهد شد .
Make Object Box 2,10,5,30 Make Object Box 2,40,160,75
در این مثال ابتدا در خط اول یک جعبه ایجاد می شود ولی در خط دوم چون عدد اختصاصی به جعبه ی دوم توسط جعبه ی اول رزرو شده بود ، برنامه دچار خطا شد . یعنی به جای عدد 2 باید عدد دیگری قرار می دادیم . مثلا 5
دستور MAKE OBJECT CONE این دستور مخروط سه بعدی می سازد . مانند دستورالعمل زیر :
MAKE OBJECT CONE ObjectNumber,Size
طبق این دستورالعمل به جای ObjectNumber یک عدد برای نام مخروط و به جای Size سایز مخروط را قرار می دهیم . مانند مثال زیر :
Make Object Cone 2,10 Wait Key
دستور MAKE OBJECT CUBE این دستور مکعب سه بعدی ( جعبه ای که هر سطح آن مربع و به یک اندازه باشد ) می سازد . مانند دستورالعمل زیر :
MAKE OBJECT CUBE ObjectNumber,Size
طبق این دستورالعمل به جای ObjectNumber یک عدد برای نام مکعب و به جای Size سایز مکعب ( سایز هر ضلع آن ) را قرار می دهیم . مانند مثال زیر :
Make Object Cube 3,100 Wait Key
دستور MAKE OBJECT CYLINDER این دستور استوانه ی سه بعدی می سازد . مانند دستورالعمل زیر :
MAKE OBJECT CYLINDER ObjectNumber,Size
طبق این دستورالعمل به جای ObjectNumber یک عدد برای نام استوانه و به جای Size سایز استوانه ( قطر و ارتفاع استوانه هر دو به یک اندازه و به مقدار Size خواهند بود ) را قرار می دهیم . مانند مثال زیر :
Make Object Cylinder 3,70 Wait Key
دستور MAKE OBJECT PLAIN این دستور صفحه ای در فضا بشکل مستطیل می سازد . مانند دستورالعمل زیر :
MAKE OBJECT PLAIN ObjectNumber,Width,Height
طبق این دستورالعمل به جای ObjectNumber یک عدد برای نام صفحه و به جای Width عرض و به جای Height ارتفاع صفحه را قرار می دهیم . مانند مثال زیر :
Make Object Plain 70,10,10 Wait Key
دستور MAKE OBJECT SPHERE این دستور کره ی سه بعدی می سازد . مانند دستورالعمل زیر :
MAKE OBJECT SPHERE ObjectNumber,Size
طبق این دستورالعمل به جای ObjectNumber یک عدد برای نام کره و به جای Size اندازه ی قطر کره را قرار می دهیم . مانند مثال زیر :
Make Object Sphere 70,40 Wait Key
کره از سطوحی تشکیل شده است که با استفاده از دستورالعمل زیر می توانیم تعداد سطوح عمودی و افقی کره را تنظیم کنیم .
MAKE OBJECT SPHERE ObjectNumber,Size,Rows,Columns
طبق این دستورالعمل به جای ObjectNumber یک عدد برای نام کره و به جای Size اندازه ی قطر کره و به جای Rows تعداد سطوح افقی و به جای Columns تعداد سطوح عمودی کره را قرار می دهیم . مانند مثال زیر :
Make Object Sphere 1,40,10,10 Wait Key Make Object Sphere 2,40,30,30 Wait Key
با اجرای این مثال ابتدا یک کره با 10 سطح افقی و 10 سطح عمودی ساخته شد و با زدن یک کلید کره ی بعدی با 30 سطح افقی و 30 سطح عمودی ساخته شد . چون تعداد سطوح در کره ی دومی بیشتر بود ، پس کیفیت آن بالاتر از کیفیت کره ی اول خواهد بود . مانند شکل زیر :
دستور MAKE OBJECT TRIANGLE با این دستور می توانیم مثلت در فضای سه بعدی ایجاد کنیم . مانند دستورالعمل زیر :
MAKE OBJECT TRIANGLE ObjectNumber,X1,Y1,Z1,X2,Y2,Z2,X3,Y3,Z3
طبق این دستورالعمل به جای ObjectNumber یک عدد برای نام مثلث و به جای X1 و Y1 و Z1 مختصات یکی از گوشه های مثلت و به جای X2 و Y2 و Z2 مختصات گوشه ی دوم مثلث و به جای X3 و Y3 و Z3 مختصات گوشه ی سوم مثلت را قرار می دهیم . مانند مثال زیر :
MAKE OBJECT TRIANGLE 2,3.5,6,7,2,0,3,5,0,3 Wait Key
مثلث بالا در مختصات فضای سه بعدی توسط شکل زیر ، شبیه سازی شده است . ![]() دستور DELETE OBJECT
با این دستور شیء مورد نظرمان را حذف می کنیم . مانند دستورالعمل زیر :
DELETE OBJECT ObjectNumber
طبق این دستورالعمل به جای ObjectNumber شماره ی شیء مورد نظر را قرار می دهیم تا حذف شود . مانند مثال زیر :
Make Object Box 1,10,20,30
Make Object Sphere 2,25
Wait 2000
Delete Object 1
Wait Key
با اجرای این مثال شی جعبه با شماره ی 1 و کره با شماره ی 2 ایجاد شدند . سپس پس از 2 ثانیه شیء جعبه با شماره ی 1 حذف شد .
شنبه 31 فروردین 1392 :: 00:00 :: نويسنده : darkbasic
دستور SYNC
این دستور باعث بهبود روند اجرای بازی خواهد شد . یعنی می تواند محتویات صحنه را تحت زمان های مشخص شده ای ، از نو ترسیم و محاسبه کند . ابتدا با استفاده از دستور Sync On دستور را فعال و با دستور Sync Rate سرعت فریم ها را در هر ثانیه تنظیم و با دستور Sync محاسبات را انجام می دهیم . مانند مثال زیر :
SYNC ON
SYNC RATE 30
DO
"PRINT "keep to approximately 30 frames per second
SYNC
LOOP
Sync Off
در این مثال ، ابتدا دستور در خط اول فعال شد . و در خط دوم سرعت 30 فریم در ثانیه را تنظیم کردیم و در حلقه ی Do … Loop سرعت ترسیم و محاسبات ، هر ثانیه 30 بار توسط دستور Sync به روز رسانی می شوند .
در واقع این دستور یکی از مهم ترین دستورات DarkBasic می باشد . چون اگر دقت کرده باشید ، هر سیستمی سرعت خاص خود را دارد . مثلا کامپیوتری با CPU پنتیوم 3000 و یا AMD 4000 و یا هر سیستم دیگری قدرت و سرعت خود را دارد . یعنی بازی نوشته شده ، در هر کامپیوتری با یک سرعت خاص اجرا خواهد شد . یعنی در یک کامپیوتر ضعیف بازی ما ضعیف و کند حرکت و اجرا می شود و در کامپیوتر قوی تر ، خیلی تیز و سریع اجراء خواهد شد . با استفاده از دستور Sync ، بازی در تمامی کامپیوتر ها با یک سرعت ثابت اجرا خواهد شد . یعنی اگر ما Sync Rate را بر روی 30 تنظیم کرده باشیم . دستورات بین حلقه ی Do و Loop در هر ثانیه تنها 30 بار اجرا خواهند شد .
دستور IF
این دستور با استفاده از عملگرها ( + و – و And و Or و > و ... که قبلا راجع به آنها گفتیم ) به بررسی و مقایسه ی مقادیر اعداد و متغیرها و روابط بین آنها در برنامه می پردازد ، تا مسیر اجرای برنامه را تحت کنترل ما در بیاورد . یعنی در برابر شرایط ایجاد شده تصمیم بگیرد و در پی آن اقدامی انجام دهد . در واقع این دستور جزء دستورات شرطی برنامه ی DarkBasic است که بصورت های مختلفی می توان از آن استفاده کرد . از جمله دستورالعمل زیر :
If Condition Then Statement
طبق این دستورالعمل ابتدا دستور کلیدی If را تایپ می کنیم و به جای Condition شرط مورد نظرمان را قرار می دهیم . سپس بعد از تایپ کلمه ی کلیدی Then به جای Statement فرمان مورد نیازمان را قرار می دهیم . یعنی اگر شرط Condition درست و منطقی بود ، فرمان Statement اجرا شود . همانند مثال زیر :
A = 20
"If A > 10 Then Print "A Is > 10
Wait Key
با اجرای این مثال ، ابتدا عدد 20 در متغیر A ذخیره می شود و در خط دوم دستور If عبارت A > 10 را بررسی می کند . اگر درست و منطقی بود ، فرمان نوشته شده بعد از Then انجام می شود . یعنی عبارت A Is > 10 چاپ خواهد شد . اگر متغیر A از 10 کوچکتر باشد دستور نوشته شده بعد از Then اجرا نخواهد شد و DarkBasic آن را رها خواهد کرد و به اجرای خطوط بعدی برنامه خواهد پرداخت .
در مثال بالا بعد از کلمه ی کلیدی Then تنها یک دستور تایپ و اجرا شد . در برخی مواقع نیاز داریم چندین خط بعد از بررسی اجرا شود . در این صورت مانند دستورالعمل زیر عمل می کنیم :
If Condition
Statement
EndIf
طبق این دستورالعمل ، بعد از دستور If به جای Condition شروط مورد نظرمان را تایپ می کنید و در خط بعد به جای Statement فرمان های مورد نظرمان را قرار می دهیم . عبارت EndIf جزئی از دستور If بحساب می آید که پایان شرط را مشخص می کند . یعنی ما می توانیم هر تعداد دستوری را که نیاز داشتیم ، بین If Condition و EndIf قرار دهیم . مانند مثال زیر :
$Input Character
"If Character$ = "a
" ---------- " Print
$Print "Character Is ";Character
"Print "Thank You
EndIf
Wait Key
در این مثال بین خط دوم و ششم سه خط دستور قرار دادیم که می توان آن را کم و زیاد کرد . تا الان با استفاده از دستور If به بررسی درستی عبارات پرداختیم تا در قبال آن فرامینی را اجرا کنیم . دستور If را می توان به صورتی استفاده کرد که پس از بررسی عبارات به درستی و نادرستی عبارات بپردازد تا در قبال هر کدام فرامینی مربوط به هر حالت را بطور جداگانه ، اجرا کند . مانند دستورالعمل زیر :
If Condition
Statement1
Else
Statement2
EndIf
طبق این دستورالعمل شرط Condition بررسی می شود . اگر درست و منطقی بود ، دستور Statement1 انجام می شود ، و اگر ( شرط Condition ) نادرست و غیرمنطقی بود ، دستور Statement2 انجام می شود . مانند مثال زیر :
Input "Input Number ?" ; Number
If Number = 1
"Print "True
Else
"Print "False
EndIf
Wait Key
با اجرای این مثال ، یک عدد از کاربر گرفته شده و داخل متغیر Number ذخیره می شود . سپس دستور If مقدار آن متغیر را بررسی می کند . اگر مقدار متغیر Number برابر 1 بود ، عبارت True و اگر هر مقدار دیگری به غیر از 1 باشد ، عبارت False چاپ خواهد شد . یعنی اگر شرط نوشته شده روبروی دستور If یعنی Number = 1 درست باشد ، دستورات نوشته شده بین دستور If و Else اجرا می شود و در غیر اینصورت دستورات نوشته شده بین Else و EndIf اجرا خواهند شد .
دستور If می تواند چندین عبارت را ( با هم در یک خط ) بررسی کند . مانند مثال زیر :
Number = 100
"strName$ = "Sam
Age = 20
If Number=100 And strName$<>"Jone" Or Age>=10
"Print "Ok
EndIf
Wait Kay
دستور SELECT
در دستور If تنها دو حالت قابل بررسی بود ( یکی حالت درست و دیگری حالت نادرست ) . اما در دستور Select حالت های زیادی قابل بررسی و پیش بینی هستند . برای استفاده از دستور Select طبق دستورالعمل زیر عمل می کنیم :
Select Expression
Case Value
Statement
EndCase
EndSelect
طبق این دستورالعمل عبارت Expression مورد بررسی قرار می گیرد . اگر عبارت Expression دقیقا برابر Value بود . دستور Statement انجام می شود . مانند مثال زیر :
Number = 2
Select Number
Case 2
"Print "Two
EndCase
EndSelect
Wait Key
در این مثال مقدار داخل متغیر Number که روبروی دستور Select تایپ شده ، بررسی می شود ، اگر مقدار داخل آن برابر 2 باشد ، دستورات نوشته شده بین Case 2 و EndCase همگی اجرا خواهند شد . یعنی در این مثال عبارت Two چاپ می شود . ما می توانیم موارد زیادی را نیز بررسی کنیم . مانند مثال زیر :
numDay = 4
Select numDay
Case 0
"Print "Sat
EndCase
Case 1
"Print "Sun
EndCase
Case 2
"Print "Mon
EndCase
Case 3
"Print "Tue
EndCase
Case 4
"Print "Wed
EndCase
Case 5
"Print "Tur
EndCase
Case 6
"Print "Fri
EndCase
EndSelect
Wait Key
در این مثال پیش بینی شده ، که اگر متغیر numDay عددی در محدوده ی 0 تا 6 باشد ، نام آن روز طبق شماره اش چاپ شود . در این مثال چون مقدار داخل متغیر numDay برابر 4 است ، دستورات تایپ شده بین Case 4 و EndCase ( دو خط بعدی اش ) اجرا خواهد شد . یعنی عبارت Wed چاپ می شود . ولی اگر متغیر numDay مقداری خارج از محدوده ی 0 تا 6 در خود داشته باشد ، و ما بخواهیم آن حالت خاص را هم مورد بررسی قرار دهیم ، باید گزینه ی Case Default را به دستورمان اضافه کنیم . مانند مثال زیر :
$Input Character
$Select Character
"Case "A
Print 1
EndCase
"Case "B
Print 2
EndCase
Case Default
"Print "Input 1 Or 2
EndCase
EndSelect
Wait Key
با اجرای این مثال یک عبارت از کاربر دریافت و داخل متغیر $Character ذخیره می شود . اگر مقدار آن برابر عبارت A باشد ، عدد 1 و اگر مقدار آن برابر عبارت B باشد ، عدد 2 چاپ می شود . درغیر اینصورت هر عبارت دیگری وارد متغیر $Character شود ، عبارت Input 1 Or 2 چاپ خواهد شد .
دستور WAIT
این دستور اجرای برنامه را به اندازه ی عددی که به آن اختصاص می دهیم ، به تاخیر می اندازد . مانند دستورالعمل زیر :
Wait Delay
طبق این دستورالعمل دستور Wait اجرای برنامه را به مقدار Delay میلی ثانیه به تاخیر می اندازد . Delay یک عدد از نوع Integer است که اگر مقدار آن را 1 بدهیم یک هزارم ثانیه و اگر 1000 قرار دهیم برنامه را بمدت یک ثانیه نگه می دارد . سپس دستورات بعدی اجرا می شوند . مانند مثال زیر :
"Print "Wait For 5 Seconds
Wait 5000
End
دستور SLEEP
این دستور دقیقا مانند دستور گذشته عمل می کند و به مقدار عدد اختصاصی به آن برنامه را متوقف می کند . مانند مثال زیر :
".Print "Please Wait Five Second
Sleep 5000
دستور WAIT KEY
این دستور برنامه را آن قدر نگه می دارد تا کلیدی از کیبورد فشرده شود . مانند مثال زیر :
"PRINT "press any key to end
WAIT KEY
END
با اجرای این مثال ابتدا عبارت press any key to end چاپ شده ، سپس برنامه توسط دستور WAIT KEY در خط دوم نگه داشته می شود . در این هنگام با زدن یکی از دکمه های کیبورد اجرای برنامه ادامه پیدا می کند و با اجرای دستور END برنامه به پایان می رسد .
دستور SUSPEND FOR KEY
این دستور دقیقا همان دستور WAIT KEY را انجام می دهد و برنامه را تا زمان فشرده شدن یک کلید از کیبورد متوقف می کند . مانند مثال زیر :
"PRINT "press any key to end
SUSPEND FOR KEY
END
دستور WAIT MOUSE
این دستور مانند دستور قبلی ( Wait Key ) اجرای برنامه را متوقف می کند . منتهی تا زمانی که یکی از دکمه های موس زده شود ! مانند مثال زیر :
"PRINT "press any mouse button
WAIT MOUSE
دستور SUSPEND FOR MOUSE
این دستور مانند دستور قبلی ( Wait Mouse ) اجرای برنامه را تا زمان فشرده شدن یکی از دکمه های موس متوقف می کند . مانند مثال زیر :
"PRINT "click mouse to end
SUSPEND FOR MOUSE
END
دستور INC
این دستور مقدار مشخصی عدد را به یک متغیر از نوع عدد اضافه می کند . مانند دستورالعمل زیر :
Inc Variable,Value
طبق این دستورالعمل ، هر بار به مقدار Value به متغیر Variable اضافه می شود . مانند مثال زیر :
A# = -2
Do
Inc A#,0.5
#Print A
wait 500
Loop
دستور DEC
این دستور شباهت زیادی به دستور قبلی ( Inc ) دارد . با این تفاوت که به جای افزایش به مقدار متغیر ، مقداری را هر بار از آن کم می کند . مانند مثال زیر :
myNumber = 10
Do
Dec myNumber,1
Print myNumber
wait 500
Loop
زمان استفاده از دستور Inc و Dec اگر بخواهیم تنها یک واحد از متغیرها زیاد یا کم شود ، میتوانیم تنها از نام Inc و Dec و نام متغیر بعد از آن استفاده کنیم . مانند مثال زیر :
A = 10
B = 10
Inc A
Dec B
Print "A = ";A;" B = ";B
Wait Key
دستور DATA
با این دستور می توان مقادیری داده ( شامل عدد یا کاراکتر ) را بطور متوالی در خطوط برنامه یادداشت کنیم ، تا بعد ها از آن داده ها استفاده کنیم . مانند مثال زیر :
DATA 17,"NINE",9.0
DATA 0,"Yes",300
DATA -100,"I Am A Boy",200.05
دستور READ
در دستور گذشته مقادیری را در خطوط برنامه یادداشت کردیم . با استفاده از این دستور ، می توانیم آن مقادیر را ، با استفاده از متغیر ها ، استفاده کنیم . مانند مثال زیر :
DATA 17,"NINE",9.0
DATA 0,"Yes",300
DATA -100,"I Am A Boy",200.05
#Read a,s$,b
Print a
$Print s
#Print b
Wait Key
با اجرای این مثال عدد 17 و عبارت NINE و عدد 9.0 چاپ می شوند . با توجه به مثال برای فراخوانی داده ها از متغیری همنوع همان داده استفاده کردیم . برای خواندن داده های خوط بعدی باید دستور Read را تکرار کنیم مانند مثال زیر :
DATA 17,"NINE",9.0
DATA 0,"Yes",300
DATA -100,"I Am A Boy",200.05
#Read a,s$,b
#Print a;s$;b
#Read a,s$,b
#Print a;s$;b
#Read a,s$,b
#Print a;s$;b
Wait Key
دستور RESTORE
می توانیم با ایجاد برچسب ، داده ها را نامگذاری و بعد با دستور Restore از قسمت فراخوانی نام برچسب ، از داده ها دوباره استفاده کنیم . مانند مثال زیر :
:Lotterydata
DATA 12,23,34,45,56,67
DATA 23,34,45,56,67,11
DATA 34,45,56,67,33,22
:Ticketdata
DATA 01,02,03,04,05,06
DATA 21,32,43,24,13,22
RESTORE lotterydata
READ a,b,c,d,e,f
PRINT "LOTTERY ",a,b,c,d,e,f
RESTORE ticketdata
READ a,b,c,d,e,f
PRINT "TICKET ",a,b,c,d,e,f
Wait Key
پنجشنبه 29 فروردین 1392 :: 00:06 :: نويسنده : darkbasic
این فصل شامل دستوراتی برای پخش آهنگ با فرمت های گوناگون ، از جمله MP3 و MID از روی فایل می باشد . ما می توانیم آهنگ ها را ایجاد و یا حذف کنیم . همچنین می توانیم میزان بلندی صدا و سرعت پخش هر آهنگ را کم و زیاد کنیم .
دستور LOAD MUSIC با این دستور آهنگ مورد نظرمان را از روی فایل صدا می کنیم و یک عدد به آن اختصاص دهیم . مانند دستورالعمل زیر :
LOAD MUSIC Filename,MusicNumber
طبق این دستورالعمل به جای Filename مسیر و نام فایل مورد نظرمان را قرار می دهیم . و به جای MusicNumber یک عدد در محدوده ی 1 تا 65535 قرار می دهیم تا توسط آن عدد در خطوط بعدی به آهنگمان کنترل داشته باشید . مانند مثال زیر :
Load Music "C:Program FilesDark Basic Professional XPMediaMusicMP3Music fun.mp3" , 1 Wait Key
در این مثال موزیکی با نام Music fun با فرمت mp3 که در مسیر C:Program FilesDark Basic Professional XPMediaMusicMP3 بود بر روی حافظه فراخوانی کردیم . در واقع عدد یک اختصاص داده شده در مثال بالا ، نام موزیک ما می باشد و در هر جایی از برنامه این موزیک توسط همین عدد قابل ردیابی است و می توانیم فرامین مختلفی را توسط این عدد به موزیکمان اعمال کنیم .
تابع MUSIC EXIST این تابع بررسی می کند که آیا موزیک مورد نظرمان بر روی حافظه موجود است یا نه . اگر بر روی حافظه فراخوانی شده باشد ، تابع مقدار یک و اگر فراخوانی نشده باشد ، تابع مقدار صفر را برمی گرداند . مانند مثال زیر :
Load Music "C:Program FilesDark Basic Professional XPMediaMusicMP3Music fun.mp3",1 ".If Music Exist(1) Then Print "Music 1 Is Exist (Print Music Exist(2 Wait Key
دستور PLAY MUSIC اگر موزیکی را قبلا ( توسط دستور Load Music ) بر روی حافظه فراخوانی کرده باشیم و عددی به آن اختصاص داده باشیم ، با این دستور می توانیم با اشاره به عدد اختصاصی به آن موزیک آن را پخش کنیم . مانند دستورالعمل زیر :
PLAY MUSIC MusicNumber
طبق این دستورالعمل به جای MusicNumber عدد اختصاصی به موزیکمان را قرار می دهیم . یعنی اگر سه موزیک در حافظه فراخوانی کرده باشیم و به هر کدام یک عدد اختصاص داده باشیم . می توانیم با این دستور و همچنین قرار دادن عدد اختصاصی به موزیک ، آن را پخش کنیم . مانند مثال زیر :
Load Music "C:Program FilesDark Basic Professional XPMediaMusicMP3Music fun.mp3" , 1 Load Music "C:Program FilesDark Basic Professional XPMediaMusicMP3music space.mp3" , 2 Load Music "C:Program FilesDark Basic Professional XPMediaMusicMP3music misty room.mp3" , 3 Play Music 2 Wait Key
در این مثال سه موزیک بر روی حافظه فراخوانی شد و در آخر موزیک شماره ی 2 پخش شد . در یک زمان چندین موزیک می توانند با هم در حال پخش باشند . مانند مثال زیر :
Load Music "C:Program FilesDark Basic Professional XPMediaMusicMP3Music fun.mp3" , 1 Load Music "C:Program FilesDark Basic Professional XPMediaMusicMP3music space.mp3" , 2 Load Music "C:Program FilesDark Basic Professional XPMediaMusicMP3music misty room.mp3" , 3 Play Music 1 Play Music 2 Play Music 3 Wait Key
تابع MUSIC PLAYING این تابع بررسی می کند که آیا موزیک مورد نظرمان درحال پخش است یا نه . اگر موزیک در حال پخش باشد ، تابع عدد یک و اگر در حال پخش نباشد ، تابع عدد صفر را برمی گرداند . مانند مثال زیر :
Load Music "C:Program FilesDark Basic Professional XPMediaMusicMP3Music fun.mp3" , 1 Load Music "C:Program FilesDark Basic Professional XPMediaMusicMP3music space.mp3" , 2 Play Music 1 (Print Music Playing(1 (Print Music Playing(2 Wait Key
دستور STOP MUSIC این دستور باعث توقف کامل موزیک می شود . مانند مثال زیر :
Load Music "C:Program FilesDark Basic Professional XPMediaMusicMP3Music fun.mp3" , 100 Play Music 100 : Print "Playing Music ." : Wait 2000 Stop Music 100 Cls : Print "Stop Music . Press Any Key To Exit ." : Wait Key
دستور PAUSE MUSIC این دستور باعث توقف موزیک بطور موقت می شود . یعنی اگر نصف موزیک پخش شده باشد ، با این دستور پخش موزیک متوقف شده و در خطوط بعدی می توانیم موزیک متوقف شده را از همانجا پخش کنیم . مانند مثال زیر :
Load Music "C:Program FilesDark Basic Professional XPMediaMusicMP3Music fun.mp3" , 25 Play Music 25 Print "Playing Music" : Wait 2000 Pause Music 25 Wait Key
تابع MUSIC PAUSED این تابع بررسی می کند که آیا موزیک مورد نظرمان موقتا متوقف شده یا نه . اگر موقتا متوقف شده باشد ، تابع مقدار یک و اگر متوفق نشده باشد ، تابع مقدار صفر را برمی گرداند . مانند مثال زیر :
Load Music "C:Program FilesDark Basic Professional XPMediaMusicMP3Music fun.mp3",25 Play Music 25 Print "Playing Music" : Wait 2000 Pause Music 25 ".If Music Paused(25)=1 Then Print "Music Paused Wait Key
دستور RESUME MUSIC اگر موزیک مورد نظر را توسط دستور Pause Music متوفق کرده باشیم ، می توانیم با این دستور ادامه ی موزیک را از همان جا پخش کنیم . مانند مثال زیر :
Load Music "C:Program FilesDark Basic Professional XPMediaMusicMP3Music fun.mp3" , 10 Play Music 10 Print "Playing Music" : Wait 2000 Pause Music 10 Print "Pause Music" : Wait 2000 Resume Music 10 Print "Resume Music" : Wait 2000 Wait Key
دستور LOOP MUSIC این دستور باعث پخش متوالی موزیک می گردد . یعنی موزیک مورد نظر را پخش می کند و اگر موزیک تمام شود ، دوباره از اول بطور خودکار پخش خواهد شد . پخش موزیک مورد نظر تا زمانی که دستور توقف در خطوط بعدی صادر نشده باشد ، ادامه خواهد داشت . مانند مثال زیر :
Load Music "C:Program FilesDark Basic Professional XPMediaMusicMP3Music fun.mp3" , 4 Loop Music 4 Print "Press Any Key To Pause Music ." : Wait Key Stop Music 4 Cls : Print "Press Any Key To Exit ." : Wait Key
تابع MUSIC LOOPING این تابع بررسی می کند که آیا موزیک مورد نظر بطور متوالی در حال پخش است یا نه . یعنی اگر دستور Loop Music در باره ی موزیک مورد نظرمان اجرا شده باشد ، تابع مقدار یک و اگر اجرا نشده باشد ، تابع مقدار صفر را برمی گرداند . مانند مثال زیر :
Load Music "C:Program FilesDark Basic Professional XPMediaMusicMP3Music fun.mp3" , 4 Loop Music 4 ".If Music Looping(4)=1 Then Print "Music Looping Wait Key
دستور DELETE MUSIC با این دستور موزیک مورد نظرمان را که از فایل به حافظه فراخوانده بودیم ، از حافظه پاک می کنیم . مانند مثال زیر :
Load Music "C:Program FilesDark Basic Professional XPMediaMusicMP3Music fun.mp3",50 Play Music 50 : Print "Playing Music ." : Wait 2000 Stop Music 50 : Print "Stop Music ." : Wait 2000 Delete Music 50 Print "Delete Music ." : Wait 2000 : End
با پاک شدن موزیک از حافظه ، موزیک قابل پخش نمی باشد و برای پخش دوباره ، موزیک باید دوباره به حافظه فراخوانی شود .
دستور SET MUSIC SPEED با این دستور می توانیم سرعت پخش موزیک را تنظیم کنیم . مانند دستورالعمل زیر :
SET MUSIC SPEED MusicNumber,Speed
طبق این دستورالعمل به جای MusicNumber عدد موزیک و به جای Speed سرعت پخش موزیک را قرار می دهیم که پیش فرض آن 100 است . یعنی اگر سرعت موزیک را 50 قرار دهیم موزیک با نصف سرعت و اگر 200 قرار دهیم با دو برابر سرعت پخش خواهد شد و اگر 100 باشد با سرعت عادی پخش خواهد شد . مانند مثال زیر :
Load Music "C:Program FilesDark Basic Professional XPMediaMusicMP3Music fun.mp3",50 ".Play Music 50 : Print "Playing Music Normal Speed Wait 2000 : Cls Set Music Speed 50,200 ".Print "Playing Music 2X Speed Wait 2000 : Cls Set Music Speed 50,50 ".Print "Playing Music Half Speed Wait Key
تابع MUSIC SPEED این تابع مقدار سرعت پخش موزیک مورد نظرمان را برمی گرداند . مانند مثال زیر :
Load Music "C:Program FilesDark Basic Professional XPMediaMusicMP3Music fun.mp3",50 Set Music Speed 50,200 (Print "Music Speed = " ; Music Speed(50 Wait Key
دستور SET MUSIC VOLUME با این دستور ، بلندی صدای موزیک مورد نظرمان را کم و زیاد کنیم . مانند دستورالعمل زیر :
SET MUSIC VOLUME MusicNumber,Volume
طبق این دستورالعمل به جای MusicNumber شماره موزیک و به جای Volume مقدار بلندی صدا را قرار می دهیم که پیش فرض آن 100 می باشد . یعنی اگر بلندی صدای موزیک را 50 قرار دهیم صدای پخش موزیک نصف و اگر 100 قرار دهیم ، بلندی صدای موزیک معمولی خواهد شد . مانند مثال زیر :
Load Music "C:Program FilesDark Basic Professional XPMediaMusicMP3Music fun.mp3",50 ".Play Music 50 : Print "Playing Music Normal Volume Wait 2000 : Cls Set Music Volume 50,50 ".Print "Playing Music Half Volume Wait 2000 : Cls Set Music Volume 50,100 ".Print "Playing Music Normal Volume Wait Key
تابع MUSIC VOLUME این تابع مقدار بلندی صدای موزیک مورد نظرمان را برمی گرداند . مانند مثال زیر :
Load Music "C:Program FilesDark Basic Professional XPMediaMusicMP3Music fun.mp3",40 Play Music 40 Set Music Volume 40,50 (Print "Music Volume = " ; Music Volume(40 Wait Key
سهشنبه 27 فروردین 1392 :: 23:16 :: نويسنده : darkbasic
این فصل شامل دستوراتی برای ایجاد و حذف و ویرایش تصاویری با فرمت های BMP ، JPG ، TGA ، DDS ، DIB و PNG می باشد . می توان تصویر را از روی فایل فراخوانی کرد . کاربرد بیتمپ معمولا برای نمایش عکس و یا لوگوی تصویر اولیه بازی است .
دستور LOAD BITMAP این دستور تصویری را از روی فایل بر روی صفحه فراخوانی می کند . مانند دستورالعمل زیر :
LOAD BITMAP Filename,BitmapNumber
طبق این دستورالعمل به جای Filename آدرس و نام و فرمت فایل تصویری و به جای BitmapNumber شماره ای بین 0 تا 32 قرار می دهیم . توسط همین شماره می توانیم در خطوط بعدی ، تصویر مورد نظرمان را کنترل کنیم . مانند مثال زیر :
Load Bitmap "C:Program FilesDark Basic SoftwareDark Basic ProfessionalProjectsRoomDemomedia oomWalld.bmp" , 1 Wait Key
اگر به جای BitmapNumber عدد صفر را قرار دهیم و یا هیچ گونه عددی قرار ندهیم ، تصویر بر روی صفحه نمایش ، نشان داده می شود . مانند مثال زیر :
Load Bitmap "C:Program FilesDark Basic SoftwareDark Basic ProfessionalProjectsRoomDemomedia oomWalld.bmp" , 0 Wait Key
نکته : در این دستور اگر به جای BitmapNumber عدد صفر قرار دهیم ، در حالت گرافیک قرار می گیریم . یعنی می توانیم از دستورات گرافیکی و چاپی استفاده کنیم . سایر اعداد برای محاسبات تصویری کاربرد دارند . یعنی اگر از این دستور استفاده کنیم و عددی بالا تر از صفر قرار دهیم ، فرامین چاپی و گرافیکی دیده نخواهند شد .
دستور CREATE BITMAP با این دستور می توانیم یک تصویر خالی با سایز دلخواه بسازیم . مانند دستورالعمل زیر :
CREATE BITMAP BitmapNumber,Width,Height
طبق این دستورالعمل به جای BitmapNumber یک عدد قرار می دهید تا در خطوط بعدی بر روی تصویرمان کنترل داشته باشیم . و به جای Width اندازه ی پهنای تصویر و به جای Height اندازه ی ارتفاع تصویر را قرار می دهیم . مانند مثال زیر :
CREATE BITMAP 1,640,480 WAIT KEY
در این مثال تصویری با شماره ی یک و طول 640 و ارتفاع 480 ایجاد شد .
دستور SET CURRENT BITMAP این دستور تصویر دلخواهمان را از بین دیگر تصاویر ، فعال می کند . مانند مثال زیر :
Load Bitmap "C:Program FilesDark Basic SoftwareDark Basic ProfessionalProjectsRoomDemomedia oomWalld.bmp" , 0 CREATE BITMAP 1,640,480 SET CURRENT BITMAP 0 WAIT KEY
اگر تصویر شماره صفر فعال باشد ، دستورات چاپی و گرافیکی قابل دیدن خواهند بود .
دستور DELETE BITMAP این دستور تصاویر ایجاد شده و یا خوانده شده از فایل را حذف می کند . در مانند دستورالعمل زیر :
DELETE BITMAP BitmapNumber
طبق این دستورالعمل به جای BitmapNumber شماره تصویر را قرار می دهیم تا تصویر مورد نظر حذف شود . مانند مثال زیر :
CREATE BITMAP 1,640,480 Load Bitmap "C:MyBitmap.bmp",2 DELETE BITMAP 1 WAIT KEY
در این مثال تصویر شماره ی 1 حذف می شود . البته از روی Ram حذف می شود، نه اینکه فایل از بین برود .
دستور COPY BITMAP این دستور تصویری را در تصویر دیگری کپی می کند . مانند دستورالعمل زیر :
COPY BITMAP FromBitmap,ToBitmap
طبق این دستورالعمل به جای FromBitmap شماره ی تصویری که می خواهیم از آن کپی تهیه کنیم و به جای ToBitmap شماره ی تصویری را که می خواهیم در آن بچسبانیم ، قرار می دهیم . مانند مثال زیر :
Load Bitmap "C:Program FilesDark Basic SoftwareDark Basic ProfessionalProjectsRoomDemomedia oomWalld.bmp" , 1 Create Bitmap 2,200,200 Copy Bitmap 1,2 Wait Key
در این مثال تصویر شماره ی 1 در تصویر شماره ی 2 کپی می شود . از این دستور می توان به شکل دیگری هم استفاده کرد . مانند دستورالعمل زیر :
COPY BITMAP FromBitmap,LEFT,TOP,RIGHT,BOTTOM,ToBitmap,left,top, right,bottom
در این روش مختصات تصویر انتخابی از تصویر اول در مختصات تصویر انتخابی در تصویر دوم کپی می شود . مانند مثال زیر :
Load Bitmap "C:Program FilesDark Basic SoftwareDark Basic ProfessionalProjectsRoomDemomedia oomWalld.bmp",1 Create Bitmap 2,200,200 COPY BITMAP 1,50,50,100,100,2,0,0,50,50 COPY BITMAP 2,0 Set Current Bitmap 0 WAIT KEY
دستور MIRROR BITMAP این دستور تصویر را حول محور عمودی انعکاس می دهد . مانند تصویر در آینه عمودی . مانند مثال زیر :
Load Bitmap "C:Program FilesDark Basic SoftwareDark Basic ProfessionalProjectsRoomDemomedia oomWalld.bmp",0 Do MIRROR BITMAP 0 Wait 500 Loop
دستور FLIP BITMAP این دستور تصویر را حول محور افقی انعکاس می دهد . مانند تصویر در آینه افقی . مانند مثال زیر :
Load Bitmap "C:Program FilesDark Basic SoftwareDark Basic ProfessionalProjectsRoomDemomedia oomWalld.bmp" , 0 Do Flip BITMAP 0 Wait 500 Loop
دستور FADE BITMAP این دستور باعث محو شدن تصویر می شود ( تمایل به رنگ سیاه ) . مانند دستورالعمل زیر :
FADE BITMAP BitmapNumber,FadeValue
طبق این دستورالعمل به جای BitmapNumber عدد مربوط به تصویر و به جای FadeValue مقدار محوشدگی تصویر را قرار می دهیم که عددی در محدوده ی صفر تا 100 می باشد که این عدد درصد شفافیت تصویر را مشخص می کند . یعنی اگر عدد 90 را قرار دهیم ، تنها 90 درصد از شفافیت تصویر باقی خواهد ماند . مانند مثال زیر :
Load Bitmap "C:Program FilesDark Basic SoftwareDark Basic ProfessionalProjectsRoomDemomedia oomWalld.bmp" , 0 For I = 1 To 10 Fade BITMAP 0,90 Wait 500 Next I
دستور BLUR BITMAP این دستور باعث تار شدن تصویر می شود . مانند دستورالعمل زیر :
BLUR BITMAP BitmapNumber,BlurValue
طبق این دستورالعمل به جای BitmapNumber عدد مربوط به تصویر و به جای BlurValue مقدار تار شدگی تصویر را قرار می دهیم که عددی در محدوده ی 1 تا 6 می باشد که این عدد شدت تارشدگی تصویر را مشخص می کند . یعنی اگر عدد 1 را قرار دهیم ، تصویر به مقدار کم تار می شود و اگر بیشترین عدد یعنی 6 را قرار دهیم ، تصویر به مقدار زیاد ، تار خواهد شد . مانند مثال زیر :
Load Bitmap "C:Program FilesDark Basic SoftwareDark Basic ProfessionalProjectsRoomDemomedia oomWalld.bmp" , 0 Wait 1000 Blur BITMAP 0,5 Wait Key
تابع CURRENT BITMAP این تابع شماره ی تصویر فعال را برمی گرداند . مانند مثال زیر :
CREATE BITMAP 1,640,480 SET CURRENT BITMAP 0 ()PRINT CURRENT BITMAP WAIT KEY
تابع BITMAP EXIST این تابع مشخص می کند که آیا تصویر مورد نظر در حافظه موجود است یا نه . مانند مثال زیر :
CREATE BITMAP 1,640,480 Set Current Bitmap 0 (PRINT BITMAP EXIST(1 WAIT KEY
در این مثال چون تصویری با شماره ی یک در حافظه ایجاد شده ، تابع مقدار 1 و اگر این شماره تصویر در حافظه نباشد ( مثلا با دستور Delete Bitmap حذف شده باشد ) ، تابع مقدار صفر را برمی گرداند .
تابع BITMAP WIDTH و تابع BITMAP HEIGHT و تابع BITMAP DEPTH این سه تابع به ترتیب پهنا و ارتفاع و عمق رنگ ( تعداد رنگ های تشکیل دهنده ی تصویر ، مثلا 32 بیت یعنی حدود 16 میلیون رنگ ) تصویر مورد نظر را برمی گردانند . مانند مثال زیر :
Load Bitmap "C:Program FilesDark Basic SoftwareDark Basic ProfessionalProjectsRoomDemomedia oomWalld.bmp" , 0 (Print "Bitmap Width = " ; Bitmap Width(0 (Print "Bitmap Height = " ; Bitmap Height(0 (Print "Bitmap Depth = " ; Bitmap Depth(0 Wait Key
تابع BITMAP MIRRORED این تابع مشخص می کند که آیا تصویر مورد نظر در راستای محور افقی انعکاس پیدار کرده یا نه ( یعنی آیا از دستور MIRROR BITMAP استفاده شده است یا نه ) . مانند مثال زیر :
Load Bitmap "C:Program FilesDark Basic SoftwareDark Basic ProfessionalProjectsRoomDemomedia oomWalld.bmp" , 0 Do Wait 2000 MIRROR BITMAP 0 If BITMAP MIRRORED(0)=1 "Print "Bitmap Mirrored Else "Print "Bitmap Not Mirrored EndIf Loop
تابع BITMAP FLIPPED این تابع مشخص می کند که آیا تصویر مورد نظر در راستای محور عمودی انعکاس پیدار کرده یا نه ( یعنی آیا از دستور FLIPP BITMAP استفاده شده است یا نه ) . مانند مثال زیر :
Load Bitmap "C:Program FilesDark Basic SoftwareDark Basic ProfessionalProjectsRoomDemomedia oomWalld.bmp" , 0 Do Wait 2000 Flip BITMAP 0 If BITMAP Flipped(0)=1 "Print "Bitmap Flipped Else "Print "Bitmap Not Flipped EndIf Loop سهشنبه 27 فروردین 1392 :: 00:47 :: نويسنده : darkbasic
این فصل شامل دستوراتی برای رسم اشکال دو بعدی مانند نقطه دایره خط و . . . می باشد . همچنین می توانیم رنگ قلم و زمینه آن را نیز مشخص کنیم .
تابع RGB با این تابع می توانیم عبارات عددی و یا کراکتری و همچنین اشکال دو بعدی و اشیاء سه بعدی را با رنگ دلخواهمان چاپ و یا رسم کنیم . این تابع سه ورودی دارد مانند دستورالعمل زیر :
(NumberColor = RGB(Red,Green,Blue
در کامپیوتر رنگ ها از سه رنگ اصلی قرمز و سبز و آبی بوجود آمده اند . یعنی هر رنگی یک شماره ی منحصر به فرد دارد . در تابع می توانیم به هر کدام از رنگ های اصلی ( قرمز و سبز و آبی ) عددی بین 0 تا 255 اختصاص دهیم و آن را وارد این تابع کنیم ، تا رنگ کل که خود یک عدد است توسط این تابع ایجاد شود . بعد می توانیم از آن عدد برای مشخص کردن رنگ قلم برای چاپ و ترسیم استفاده کنیم . طبق این دستورالعمل به جای Red ( به معنای شدت رنگ قرمز ) عددی در محدوده ی 0 تا 255 و به جای Green ( به معنای شدت رنگ سبز ) عددی در محدوده ی 0 تا 255 و به جای Blue ( به معنای شدت رنگ آبی ) عددی در محدوده ی 0 تا 255 قرار می دهیم . تابع با توجه به مقادیر وارده عددی تولید می کند که حاصل مخلوط این سه عدد ( این سه رنگ اصلی ) است . یعنی این تابع با توجه به اعداد ورودی 16777216 رنگ تولید می کند . مانند مثال های زیر :
(NumberColor = Rgb(255,0,0
در این مثال شدت رنگ قرمز 255 و شدت رنگ سبز 0 و شدت رنگ آبی 0 می باشد . در نتیجه عدد NumberColor به دلیل شدت رنگ بالای قرمز عددی را برمی گرداند که آن عدد کد رنگ قرمز پررنگ می باشد .
اگر (Rgb (255,0,0 باشد ، عدد NumberColor رنگ قرمز را مشخص می کند . اگر (Rgb (0,255,0 باشد ، عدد NumberColor رنگ سبز را مشخص می کند . اگر (Rgb (0,0,255 باشد ، عدد NumberColor رنگ آبی را مشخص می کند . اگر (Rgb (0,0,0 باشد ، عدد NumberColor رنگ سیاه را مشخص می کند . اگر (Rgb (255,255,255 باشد ، عدد NumberColor رنگ سفید را مشخص می کند . اگر (Rgb (255,0,255 باشد ، عدد NumberColor رنگ صورتی را مشخص می کند . اگر (Rgb (255,255,0 باشد ، عدد NumberColor رنگ زرد را مشخص می کند . اگر (Rgb (255,0,255 باشد ، عدد NumberColor رنگ فیروزه ای را مشخص می کند . برای ایجاد سایر رنگ ها باید عدد هایی بین صفر تا 255 را در تابع قرار دهیم .
برای تعیین رنگ راه راحت تری هم وجود دارد .
1 – ابتدا دستور مربوط به انتخاب رنگ مثلا INK را تایپ می کنیم . 2 – بعد از قرار داد یک فاصله ( فشردن دکمه ی Space ) ، کلیک سمت راست موس را فشار می دهیم . و گزینه ی ...Insert RGB Colour را از منوی ظاهر شده انتخاب می کنیم . کادری مانند شکل زیر باز خواهد شد .
می توانیم رنگ مورد دلخواهمان را انتخاب کنیم . با فشردن دکمه ی Ok تابع ()RGB بطور خودکار مقدار دهی می شود . به همین سادگی می توانیم رنگ مورد نظر مان را تنظیم کنیم .
دستور CLS این دستور کل صفحه نمایش را با رنگ دلخواه ما پاک می کند . مانند دستورالعمل زیر :
CLS NumberColor
طبق این دستورالعمل به جای NumberColor کد رنگ مورد نظرمان را قرار می دهیم . می توانیم از تابع ()RGB برای ایجاد کد رنگ استفاده کنیم . مثلا می خواهیم کل صفحه نمایش را با رنگ سبز پاک کنیم .
(CLS Rgb(255,0,0 Wait Key
دستور INK با این دستور می توانیم رنگ قلم و رنگ زمینه را برای چاپ متون و ترسیمات دو بعدی انتخاب کنیم . مانند دستورالعمل زیر :
INK ForegroundColor,BackgroundColor
طبق این دستورالعمل به جای ForegroundColor رنگ قلم و به جای BackgroundColor رنگ پشت زمینه را قرار می دهیم . مانند مثال زیر :
(Ink Rgb(0,0,255),Rgb(0,255,0 "Print "ForeGround Color Is Blue And BackGround Color Is Green Wait Key
دستور DOT با این دستور می توانیم بر روی صفحه نمایشگر نقطه رسم کنیم . مانند دستورالعمل زیر :
DOT X,Y
طبق این دستورالعمل به جای X فاصله ی نقطه از سمت چپ صفحه ی نمایشگر و به جای Y فاصله ی نقطه از بالای صفحه ی نمایشگر را قرار می دهیم . مانند مثال زیر :
(Ink Rgb(255,255,255),Rgb(0,0,0 Dot 100,100 Wait Key
بصورت زیر هم می توان نمای زیبایی ایجاد کرد .
For I = 0 To 255 For J = 0 To 255 INK RGB(I,J,0),0 Dot I*2 , J*2 Next J Next I Wait Key
دستور LINE از این دستور برای رسم خط استفاده می کنیم . مانند دستورالعمل زیر :
LINE X1,Y1,X2,Y2
طبق این دستورالعمل برای رسم یک خط مختصات دو نقطه 1 و 2 را وارد می کنیم . یعنی به جای X1 فاصله ی نقطه ی اول از چپ صفحه و به جای Y1 فاصله ی نقطه ی اول از بالای صفحه و به جای X2 فاصله ی نقطه ی دوم از چپ صفحه و به جای Y2 فاصله ی نقطه ی دوم از بالای صفحه را قرار می دهیم و دستور LINE یک خط از نقطه ی اول به نقطه ی دوم رسم می کند . مانند مثال زیر :
Ink Rgb (255,0,255) , 0 Line 100,100,200,200 Wait Key
با اجرای این مثال خطی با رنگ صورتی از نقطه ی 100 و 100 به نقطه ی 200 و 200 رسم می شود .
در هر یک از توابع و دستوراتی که از اول تا الان گفته شد ، می توانیم به جای اعداد از متغیز هم استفاده کنیم . مانند مثال زیر :
Do Ink Rgb(Rnd(255),Rnd(255),Rnd(255)) , 0 (intAng = Rnd(360 (Line 320,240,320+Sin(intAng)*Rnd(400),240+Cos(intAng)* Rnd(400 Loop Wait Key
دستور BOX از این دستور برای رسم مستطیل استفاده می کنیم . مانند دستورالعمل زیر :
BOX Left,Top,Right,Bottom
طبق این دستورالعمل به جای Left فاصله ی ظلع چپ مستطیل تا ظلع چپ صفحه نمایش و به جای Top فاصله ی ظلع بالای مستطیل تا ظلع بالای صفحه نمایش و به جای Right فاصله ی ظلع راست مستطیل تا ظلع چپ صفحه نمایش و به جای Bottom فاصله ی ظلع پائین مسطیل تا ظلع بالای صفحه نمایش را قرار می دهیم . یعنی برای رسم یک مستطیل که طول آن 50 و ارتفاع آن 50 و فاصله ی آن تا بالای صفحه 50 و فاصله ی آن تا چپ صفحه 50 باشد ، باید مانند مثال زیر عمل کنید :
(Ink Rgb(0,255,0 Box 50,50,100,100 WAIT KEY
دستور Box را می توان بشکل دیگری هم استفاده کرد . مانند زیر :
BOX Left,Top,Right,Bottom,Color1,Color2,Color3,Color4
در این دستورالعمل به جای Color1 و Color2 و Color3 و Color4 کد چها رنگ مختلف را قرار می دهیم تا هر گوشه از مستطیل به هر کدام از این رنگ ها گرایش پیدا کند . مانند مثال زیر :
(BOX 50,50,250,250,RGB(255,0,0),RGB(0,255,0),RGB(0,0,255),RGB(0,255,255 WAIT KEY
دستور CIRCLE با این دستور دایره رسم می کنیم . مانند دستورالعمل زیر :
CIRCLE X,Y,Radius
طبق این دستورالعمل به جای X فاصله ی مرکز دایره از چپ صفحه نمایش و به جای Y فاصله ی مرکز دایره تا بالای صفحه نمایش و به جای Radius شعاع دایره را قرار می دهیم . مانند مثال زیر :
CIRCLE 320,240,100 WAIT KEY
در این مثال دایره ای با شعاع 100 در مختصات 320 و 240 رسم می شود .
دستور ELLIPSE با این دستور بیضی رسم می کنیم . مانند دستورالعمل زیر :
ELLIPSE X,Y,XRadius,YRadius
طبق این دستورالعمل به جای X فاصله ی مرکز بیضی از چپ صفحه نمایش و به جای Y فاصله ی مرکز بیضی تا بالای صفحه نمایش و به جای XRadius اندازه ی شعاع افقی (موازی محور X ها ) و به جای YRadius اندازه ی شعای عمودی (موازی محور Y ها ) بیضی را قرار می دهیم . مانند مثال زیر :
ELLIPSE 320,240,100,50 WAIT KEY
تابع POINT با این تابع ، شماره کد رنگ نقطه ای را در مختصات خاصی از صفحه نمایش ، بدست می آوریم . مانند دستورالعمل زیر :
(ColorNumber = POINT(X,Y
طبق این دستورالعمل به جای X فاصله ی نقطه از چپ صفحه ( محور افقی ) و به جای Y فاصله ی نقطه از بالای صفحه ( محور عمودی ) را قرار می دهیم . مانند مثال زیر .
(CLS RGB(128,64,0 (PRINT POINT(320,240 WAIT KEY
تابع RGBR این تابع شدت رنگ قرمز را از کد کلی رنگ بدست می آورد . مانند دستورالعمل زیر :
(CLS RGB(128,64,255 ((PRINT "AMOUNT OF RED = " ; RGBR(POINT(320,240 WAIT KEY
تابع RGBG این تابع شدت رنگ سبز را از کد کلی رنگ بدست می آورد . مانند دستورالعمل زیر :
(CLS RGB(128,164,255 (ColorNumber = POINT(320,240 (PRINT "AMOUNT OF GREEN = " ; RGBG(ColorNumber WAIT KEY
تابع RGBB این تابع شدت رنگ آبی را از کد کلی رنگ بدست می آورد . مانند دستورالعمل زیر :
(CLS RGB(128,64,5 ((PRINT "AMOUNT OF BLUE = " ; RGBB(POINT(320,240 WAIT KEY شنبه 24 فروردین 1392 :: 00:04 :: نويسنده : darkbasic
این فصل شامل دستوراتی برای کنترل صفحه نمایشگر ( رزولوشن : مختصات طولی و عرضی ) و همچنین حالت پنجره ای که بازی در آن اجرا می شود ، می باشد .
دستور PERFORM CHECKLIST FOR GRAPHICS CARDS با این سلسله از دستورات می توانیم تعداد و نام کارت های گرافیکی شناخته شده توسط کامپیوتر ( که به کامپیوتر وصل شده اند ) را بدست آوریم . مانند مثال زیر :
Perform Checklist For Graphics Cards "Print "Graphics Cards ()For T = 1 To CheckList Quantity (Print T;":"+CheckList String$(T Next T Wait Key
دستور PERFORM CHECKLIST FOR DISPLAY MODES با این سلسله از دستورات می توانیم تعداد حالت های پشتیبانی شونده از مختصات طولی و عرضی ( رزولوشن صفحه نمایش ) را بدست آوریم . مثلا کامپیوتر ما ممکن است از چندین رزولوشن مانند 480*640 و 1280*1024 و 600*800 و 768*1024 و ... برای مشخص کردن تعداد نقطه های طولی و عرضی برای صفحه ی نمایش پشتیبانی کند . ولی کامپیوتر دیگر که از نوع لپ تاپ است فقط از رزولوشن 1280*1024 ( یعنی تعداد 1024 نقطه در عرض و 1280 نقطه در طول ) پشتیبانی می کند . این سلسله از دستورات بطور خودکار در هر کامپیوتر تعداد حالت ها را بدست می آورند . مانند مثال زیر :
Perform Checklist For Display Modes "Print "Display Modes ()For T = 1 To CheckList Quantity (Print "Mode ";T;" : "+CheckList String$(T Next T Wait Key
با اجرای این مثال برای هر حالت موجود ، طول و عرض و عمق رنگ ( 16 بیت و 32 بیت ) مربوط به آن ، چاپ خواهد شد .
دستور SET DISPLAY MODE قبلا برای تنظیم مختصات طولی وعرضی ( رزولوشن ) صفحه ی نمایشگر از پنجره ی Project Maneger استفاده می کردیم . با این دستور ، می توانیم حین اجرای برنامه ، رزولوشن صفحه ی نمایشگر ( Monitor ) را تغییر دهیم . مانند دستورالعمل زیر :
SET DISPLAY MODE Width,Height,Depth
طبق این دستورالعمل به جای Width مختصات طولی صفحه نمایشگر ( تعداد نقات از چپ به راست صفحه ) و به جای Height مختصات عرضی صفحه نمایشگر (تعداد نقات از بالا به پایین صفحه ) و به جای Depth عمق رنگ صفحه نمایشگر ( 16 بیت یعنی تعداد رنگ های کم و 32 بیت یعنی تعداد رنگ های زیاد که حدود 16 میلیون رنگ می باشد ) را مشخص می کنیم . مانند مثال زیر :
Set Display Mode 800,600,32 Wait Key
در این مثال ، تعداد نقات طولی 800 و تعداد نقات عرضی 600 با بالاترین تعداد رنگ ها ( 32 بیت معادل 16777216 رنگ ) مشخص شدند .
نکته : همیشه از سایز های استاندارد برای این دستور استفاده کنید . مانند 768*1024 و 1280*1024 و 600*800 و 480*640 و از این قبیل .
تابع CHECK DISPLAY MODE برای آنکه بفهمیم آیا نمایشگر توانایی قرار گرفتن در رزولوشن پیشنهادی ما را دارد یا نه از تابعCHECK DISPLAY MODE استفاده می کنیم . طول و عرض مختصات پیشنهادی و همچنین عمق رنگ ( 16 و یا 32 بیت ) را وارد تابع می کنیم . اگر تابع عدد یک را برگرداند ، معلوم می شود که قابلت قرار گرفتین در این مختصات و رنگ را دارد و اگر مقدار صفر برگردانده شود ، یعنی توانایی قرار گرفتن در چنین مختصاتی را ندارد . مانند مثال زیر :
"Print "Please Wait To Change Resolotion To 1024*768,32 Wait 5000 If Check Display Mode(1024,768,32) = 1 Set Display Mode 1024,768,32 "Print "Change Successfully Else "Print "Not Change EndIf Wait Key
دستور SET WINDOW ON این دستور صفحه ی اجرای بازی را به حالت پنجره تبدیل می کند . که می توان آن را حرکت داد و یا بزرگ و کوچک کرد . مانند مثال زیر .
Set Window On "Print "Window Mode Is On Wait key
دستور SET WINDOW OFF اگر با استفاده از دستور قبلی (SET WINDOW ON ) ، صفحه ی اجرای بازی را به حالت پنجره درآورده باشیم ، با این دستور می توانیم صفحه را به حالت عادی درآوریم . مانند مثال زیر :
Set Window On "... Print "Window Mode Is On . Please Wait Wait 2000 Set Window Off "Cls : Print "Window Mode Is Off Wait key
دستور SET WINDOW TITLE با این دستور می توانیم برای پنجره ی بازی یک تیتر ( عنوان در بالای پنجره ) قرار دهیم . مانند مثال زیر :
Set Window On "Set Window Title "MY WINDOW TEXT Wait 2000
با اجرای این مثال عبارت MY WINDOW TEXT در بالاترین قسمت پنجره یعنی نوار عنوان قرار خواهد گرفت .
دستور SET WINDOW SIZE با این دستور می توانیم طوع و ارتفاع پنجره ای که بازی در آن اجرا می شود را ، مشخص کنیم . مانند دستورالعمل زیر :
SET WINDOW SIZE Width,Height
طبق این دستورالعمل به جای Width اندازه ی طول پنجره و به جای Height اندازه ی ارتفاع پنجره را قرار می دهیم . مانند مثال زیر :
Set Window On Print "Please Wait To Sizable Window ." : Wait 2000 : Cls Set Window Size 500,400 Wait Key
دستور MINIMIZE WINDOW این دستور اندازه ی صفحه ی اجرای بازی را به حداقل اندازه ممکن می رساند . یعنی تنها عنوان آن در نوار وظیفه ی ویندوز قابل مشاهده خواهد بود . مانند مثال زیر :
Minimize Window Wait key
دستور MAXIMIZE WINDOW این دستور اندازه ی صفحه ی اجرای بازی را به بیشترین اندازه ممکن می رساند . یعنی به اندازه ی کل صفحه ی نمایشگر . مانند مثال زیر :
Minimize Window Wait 2000 Maximize Window Wait key
دستور RESTORE WINDOW این دستور پنجره ی اجرای بازی را از حالت حداکثر و یا حداقل به حالت معمولی تبدیل می کند . مانند مثال زیر :
Set Window On Maximize Window Wait 2000 Restore Window Wait Key
دستور HIDE WINDOW و دستور SHOW WINDOW با دستور HIDE WINDOW می توانیم صفحه ی اجرای بازی را مخفی و با دستور SHOW WINDOW می توانیم آن را دوباره آشکار کنیم . مانند مثال زیر :
Set Window On Wait 2000 Hide Window Wait 2000 Show Window Wait Key
دستور SET WINDOW POSITION اگر صفحه ی اجرای بازی توسط دستور Set Window On بصورت پنجره درآمده باشد ، با این دستور می توانیم فاصله ی پنجره ی بازی را از بالا و از سمت چپ صفحه ی نمایش ، تنظیم کنیم . مانند دستورالعمل زیر :
SET WINDOW POSITION X,Y
طبق این دستورالعمل به جای X فاصله ی پنجره ی بازی تا قسمت چپ صفحه ی نمایشگر و به جای Y فاصله ی پنجره ی بازی تا قسمت بالای صفحه ی نمایشگر را قرار می دهیم . مانند مثال زیر :
Set Window On SET WINDOW POSITION 100,100 Wait Key
تابع SCREEN WIDTH و تابع SCREEN HEIGHT و تابع SCREEN DEPTH تابع ()Screen Width تعداد نقات تشکیل دهنده ی طول صفحه ی اجرای بازی و تابع ()Screen Height تعداد نقاط تشکیل دهنده ی ارتفاع صفحه ی اجرای بازی و تابع ()Screen Depth مقدار رنگ های تشکیل دهنده ی صفحه ی اجرای بازی ( 16 بیت و یا 32 بیت ، که 32 بیت همان 16777216 رنگ می باشد ) را برمی گرداند . مانند مثال زیر :
Set Display Mode 800,600,32 (()Print "Screen Width = " + Str$(Screen Width (()Print "Screen Height = " + Str$(Screen Height (()Print "Screen Depth = " + Str$(Screen Depth Wait Key
تابع SCREEN FPS این تابع تعداد فریم های اجرای بازی را در هر ثانیه را برمی گرداند . مانند مثال زیر :
Sync On Sync Rate 45 Do Sync (()Print "Screen Fps = " + Str$(Screen fps Loop
درباره وبلاگ به وبلاگ من خوش آمدید موضوعات آخرین مطالب آرشيو وبلاگ پيوندها نويسندگان |
|||
|
|