Skip to content

Posts from the ‘Guides’ Category

21
Jun

Game Development : 06වන පාඩම

“Techකතා Game Development” පාඩම් මාලාවේ 06වන පාඩම මෙය වනඅතර මෙම පාඩම ඔබවෙත ගෙන එන්නේ වීඩියෝ වැඩසහටහනක් ලෙසටය.

 

 

(මෙවර වැඩසටහන මෙතනින් ගන්න)

 

6
Jun

යු.පි.එස් ගැන සරල විස්රරයක් වගේම බැටරිය මාරුකිරීම. [How to Replace a UPS Battery]

යු.පි.එස් එකක බැටරිය මාරු කිරීම වගේම යු.පි.එස් ගැන සරල විස්රරයක්.

27
May

Game Development : 05වන පාඩම

“Techකතා Game Development” පාඩම මාලාවේ 05වන පාඩම මෙය වනඅතර මෙම පාඩම ඔබවෙත ගෙන එන්නේ වීඩියෝ වැඩසහටහනක් ලෙසටය.

 

 

(මෙවර වැඩසටහන මෙතනින් ගන්න)

25
May

Game Development : 04වන පාඩම

“Techකතා Game Development” පාඩම මාලාවේ 04වන පාඩම ඔබවෙත ගෙන එන්නේ වීඩියෝ වැඩසහටහනක් ලෙසටය. (මෙය මාගේ පළමු වීඩියෝව නිසා අඩුපාඩු ඇත්නම් සමාවන්න.)

 

(මෙවර වැඩසටහන මෙතනින් ගන්න)

– Prasad Jayashanka -

5
Mar

Game Development : 03වන පාඩම

අද ලිපිය කොටස් 02 කට වෙන් කොට ලියන්න අදහස් කලා. අන්තර්ගතය මෙසේයි.

  • රුප චලනය
  • රුප වල ඇනිමේෂන් සැදීම

 

01) රුප චලනය

ගිය ලිපියේ සදහන් කල පරිදි අපි ඇන්ද රුපය එකතැනකට වෙලා ඉන්න එකක්. අද බලමු එක තිරය මත විවිධ පැති වලට යවන්නේ කොහොමද කියල.

spriteBatch.Begin();

spriteBatch.Draw(<texure_variable_name>,  Vector2.Zero,   Color.White);

spriteBatch.End();

 

ගිය ලිපියේ අපි අදින්න පාවිච්චි කල කෝඩ් එක මේ වගේ එකක්. මේකේ Vector2.Zero  ලෙස තියෙන්නේ 0, 0 දෛය්ශික බවත්  new Vector2(x, y) ලෙස අදාළ අගයන් ලබා දීල තිරයේ අවශ්‍ය තැනක අදින්න පුළුවන් කියලත් කිව්වා. මේකේ x වලින් කියන්නේ හරස් අතට යන දුරයි. y කියන්නේ උඩ සිට පහලට තියන දුරයි.

මම පළමු ලිපියේ කිව්වා game loop වැඩකරන්නේ කොහොමද කියල. ඒ අනුව අපිට පුලුවන්න් නම් x හි අගය අනුක්‍රමිකව වැඩි කරන්න,  අදාල රුපය ඉදිරියට යනවා. x හි අගය අනුක්‍රමිකව අඩු කලොත් රුපය පසුපසට යනවා. y හි අගය අනුක්‍රමිකව වැඩි කලොත් රුපය පහලට යනවා. y හි අගය අනුක්‍රමිකව අඩු කලොත් රුපය ඉහලට යනවා. ඒවගේම මේ දෙකම එක්වර කලොත් රුපය පැත්තට යවන්න පුළුවනි. දැන් ඔබට අදහසක් ඇති මේක වෙන්නේ කොහොමද කියල :)

මේක කරන විදිහ මෙහෙමයි.

එදා වගේම Texture2D  වෙරියබල් එකක් හදාගෙන එකට කැමති ඉමේජ් එකක් ලෝඩ් කරගන්න. ( උදාහරණය සදහා මම යොදාගන්නේ techKatha කියන වෙරියබල් එක )

ඊට පස්සේ Texture2D වෙරියබල් එක ලගින් ම මේ විදිහට තව Vector2 වේරියබ්ල් එකක් හදාගන්න.

Vector2  <variable_name>   = Vector2.Zero();      (මෙතැනදී මම කරන්නේ පටන් ගන්න තැන 0, 0 ලක්ෂ්‍ය දෙන එකයි. කැමති නම් new Vector(x, y)  දීල ඔබට කැමති තැනකින් පටන් ගන්නත් පුලුබනි. උද :- vector2 techKathPosition = new Vector2(50, 10);  )

float speed = 2.0f; (මෙය තමා අපේ වේගය සදහන් වෙන වෙරියබල් එක. මෙයට කැමති අගයක් යොදාගන්න පුළුවනි. )

උදාහරණය සදහා මම යොදාගන්නේ techKathaPosition කියන වේරියබ්ල් එක.

දැන් draw මෙතඩ් එක ලියමු,

spriteBatch.Draw(techKatha, techKathaPosition, Color.White);   ( මෙය ලිවිය යුත්තේ Begin සහ  End වාක්‍ය දෙක අතරයි.  පසුගිය ලිපිය බලන්න.)

 

ගියවර අපි කලේ අවශ්‍ය x,y අගයන් මේ පේලියේම දෙන එකයි. මේ පාර අපි කරන්නේ එක තව vector2  වෙරියබල් එකකින් දෙන එකයි. එතකොට අපිට හිතේ හැටියෙන් මේකේ x සහ y අගයන් වෙනස් කරන්න පුළුවනි.

දැන් ප්‍රොජෙක්ට් එක build කරලා බාලුවොත් චලනය නොවෙන රුපයක් පෙනේවි. දැන් තම චලනය කරන කෝඩ් එක ලියන්නේ. යන්න Update function එකට.

එකේ මෙන්න මෙහෙම ලියන්න.

 

techKathaPosition.X += 2;

techkathaPosition.Y += 2;

 

දැන් ප්‍රොජෙක්ට් එක build කරලා බාලුවොත් චලනය  රුපයක් පෙනේවි. මේකෙදි වෙන්නේ මෙහෙමයි. අප්ඩේට් ලුප් එකේදී  අපි හදාගත්තු Vector2 එකේ ස්ථානය වෙනස් කරන එකයි. ඔය දීල speed අගයන් වෙනස් කර වේගයන් අඩුවැඩි කරන්නත්  ඍන ලකුණ දීමෙන් විරුද්ද පත්තට යවන්නත් පුළුවන්. ටෙස්ට් කිරීම ඔබට බාරයි. අව්ලක් අවොත් techkatha වෙතට යොමු කරන්න :)

 

දැන්  හරි… ඔබ දන්නවා කොහොමද රුපය චලනය කරන්නේ කොහොමද කියල. දැන් ඔබට ප්‍රශ්නයක් ඇති ඇයි මේ රුපය Viewport එකෙන් එලියට යන්නේ ඇයි කියල. එක නවත්වන්නේ මෙහෙමයි.

 

techKathaPosition.X += speed;

if(techKathaPosition.X > Window.ClientBounds.Width – techKatha.Width || techKathaPosition.X < 0 )

speed *= -1;

techKathaPosition.Y += speed;

if(techKathaPosition.Y > Window.ClientBounds.Height -techKatha.Height || techKathaPosition.Y < 0)

speed *= -1;

Window.ClientBounds.Width  = අපේ ස්ක්‍රීන් එකේ දිග

Window.ClientBounds.Height  = ස්ක්‍රීන් එකේ උස

techKatha.Width  =  යොදා ගන්න රුපයේ දිග

techKath.Height = යොදාගන්න රුපයේ උස

මේකෙදි කෙරෙන්නේ x හෝ y වල අගය ස්ක්‍රීන් එකත් සමග අදාල රුපය සම්පත වන අගය එළබි වෙලාවේ speed  එක ඍන බවට පත් කිරීමයි. එවිට වෙන්නේ අදාල වේගයෙන් අනිත් පැත්තට යන එකයි..

 

02)  රුප වල ඇනිමේෂන් සැදීම.

Super mario වගේ ගේම්ස් ගහනකොට දැකල ඇති ඒකෙ චරිතය එහාට මෙහාට යනකොට කකුල් සෙල වෙනවා ඇත පය සෙලවනවා. අන්න ඒ දේ කරන්න තමයි අපි මේ කොටසින් බලන්නේ.

මේවගේ දෙයක් කරන්න නම් අර කාටුන් වල කෙරෙන දේ තමයි කරන්න ඕනි. එකියන්නේ ඇනිමේෂන් එක වෙන හැටි මොහොතින් මොහොත ඇක්ෂන් වෙනස් කරමින් රුප කිහිපයක් ඇදගන්න ඕනි. එතකොට ඒවා එකදිගට මාරුවෙන් මාරුවට viewport  එකේ වෙගයෙන් ඩිස්ප්ලේ කරනකොට එක ඇනිමේට් වෙනවා වගේ පේනවා.

කරන හැටි මෙහෙමයි…

ඉස්සෙල්ලම ඔයාට ඕනි ඒවගේ රුප සෙට් එකක් හදාගන්න. ඊට පස්සේ පිළිවෙලට ඒ රුප ඔක්කොම එක ලොකු ෂිට් එකකට ඇතුලත් කරගන්න.

උද : – අපි හිතමු අපිට ඕනි අනුමේෂන් එකේ රුප ඇදල තියෙන්නේ 100×250 pixel කොටු 4ක කියල. එහෙනම් ෆොටෝෂොප් හෝ ගිම්ප් වගේ සොෆ්ට්වෙයා එකකින් 200×500 pixel ලොකු ෂිට් එකක් හදාගෙන එකට අර පින්තුර ටික ගන්න. පින්තුර වල බැක්ග්‍රවුන්ඩ් පේන්න ඕනි නැත්නම් transparent sheets එකකට අරගෙන PNG විදිහට සේව් කරගන්න. JPG වල transparency වැඩ කරන්නේ නැ.

උදාහරණය සදහා මම යොදාගන්නේ සාමාන්‍ය පාට 4කින් යුතු ශීට් එකක්. ඔබට කැමති රුප සහිත ශීට් එකක් යොදාගන්න පුළුවනි.

ඊළගට එම රුපය ඔබ කැමති වෙරියබල් එකකට ලෝඩ් කරගනන. ඉන්පසු මෙම ලයින්  class ලෙවෙල් එකේ ඇතුලත් කරන්න.

Point animateframeSize = new Point(100, 250);

Point animatecurrentFrame = new Point(0, 0);

Point animatesheetSize = new Point(2, 2);

මෙම point structs, 2D තලය මත රුපයක ගුණාංග විස්තර කරන්න යොදාගන්න පුළුවනි. මේකේ පළමු පේලියෙන් කියන්නේ  frameSize එක. එකියන්නේ අපේ ෂිට් එකේ රුප ගොඩක් තියෙන නිසා එම එක රුපයක පික්සෙල් ගණන. දෙවැනි එකෙන් කියන්නේ currentFrame එක. මේකෙදි දීල තියෙන්නේ 0, 0 මොකද අපිට අදින්න පටන් ගන්න ඕනි තැන අපේ ෂිට් එකේ වම් කෙලවරේ උඩම කොනේ ඉදන් නිසා, තුන්වන පේලියෙන් කියන්නේ ෂිට් එක පින්තුර ගණන. මම පාවිච්චි කරන්නේ 2 , 2 එකක්. එකියන්නේ  ෂිට් එක හරි  4 ට බෙදල ඇති බවයි. අපි හිතමු ඔයාගේ එක තියෙන්නේ රුප 6ක් එක පේළියකට 3ක් වන ලෙසට කියල. එහෙම උනාම සදහන් කරන්න ඕනි 2, 3 කියන විදිහට.

 

දැන් පොඩ්ඩකට අපගේ පාඩම් මාලාවේ 02වන පාඩම ඇති ලිපිය බලන්න. ඒකෙ overloaded method එක තමා අපි මෙතැනදී පාවිච්චි කරන්න යන්නේ.

එකේ තියෙනවා source rectangle overload එක. එම ලිපියේ මම එක ගැන විස්තර නොකර ආවේ ඒක ඕනි වෙන්නේ මෙතනට නිසා. දැන් අපි දන්නවා අපේ ෂිට් එකේ පින්තුර ගොඩක් තියෙනවා කියල.  එකෙන් එක පින්තුරයක් විතරක් පෙන්නන්න එක වරකට අපිට මෙම rectangle පාවිච්චි කරන්න පුළුවනි.

spriteBatch.Draw(animate, new Vector2(300, 300),

new Rectangle(animatecurrentFrame.X * animateframeSize.X, animatecurrentFrame.Y * animateframeSize.Y, animateframeSize.X, animateframeSize.Y),

Color.White, 0, Vector2.Zero, 1, SpriteEffects.None, 1);

ඒ මෙන්න මේ විදිහට. අපි අර ඉස්සෙල්ල හදාගත්තු Point struct ටික rectangle function overload විදිහට පාස් කරනවා. එතකොට  ෂිට් එකේ frame එකෙන් frame එකට මාරු වෙනවා.

ඉන්පසු මෙම කෝඩ් එක update එකේ යොදා ගන්න.

 

++animatecurrentFrame.X;

if (animatecurrentFrame.X >= animatesheetSize.X)

{

animatecurrentFrame.X = 0;

++animatecurrentFrame.Y;

if (animatecurrentFrame.Y >= animatesheetSize.Y)

animatecurrentFrame.Y = 0;

}

 

මේ කෝඩ් එකෙන් වෙන්නේ Point struct එකේ  frame එකෙන්  frame එක අප්ඩේට් කරන එකයි. මේකේ තියෙන ලොජික් එක ටිකක් කල්පනා කරලා තේරුම් ගණන ටිකක් වෙලා යනවා.  වඩා හොද දේ තමයි කිහිප විටක් මේක කරන එක.

දැන් මේක build කරොත් පෙනේවි ඉතා වේගයෙන් ඇනිමේට් වන අයුරු. සාමාන්‍ය සම්මත වේගය තත්පරෙකට frame 60 ක්. නමුත් එම වේගය වැඩි නම් අඩු කරන්නත් පුලුවන්. එය කරන්නේ මෙහෙමයි.

මෙවිදිහට class level වෙරියබල් 2ක් එකතු කරගන්න.

int interFrameTime = 0;

int timePerFrame = 150;

interFrameTime එකෙන් කියන්නේ  දැන් තියන frame එක එන්න කලින් frame එකේ ඉදල කොච්චර වෙලා ගියද කියල. ආරම්බයේදී එක බින්දුවයි. ඊලග වෙරියබල් එකෙන් කියන්නේ එක frame එකකට තියෙන කාලයයි. එම අගය වැඩි කරලා වේගය අඩු කරන්නත්  ඒම අගය අඩු කිරීමෙන් වේගය වැඩි කරන්නත් පුළුවන්. ඇයි එහෙම වෙන්නේ?

ඔය අගයෙන් අපි ලබාදෙන්නේ millisecond ප්‍රමාණය.

FPS ( Frames Per Second ) =   1 / n

ඔය n අගය මත තම වේගය රදා පවතින්නේ.    ( n = time in milliseconds )

ඊට පස්සේ update එකේ ලියපු frame update කෝඩ් එක  පහල තියන කෝඩ් එක ඇතුලේ enclose කරන්න.

 

interFrameTime += gameTime.ElapsedGameTime.Milliseconds;

if (interFrameTime > timePerFrame)

{

interFrameTime -= timePerFrame;

// frame අප්ඩේට් කෝඩ් එක මෙතනට ඇතුලත් කරන්න

}

එහෙම කලාම මේ විදිහට තියෙන්න ඕනි..

 

interFrameTime += gameTime.ElapsedGameTime.Milliseconds;

if (interFrameTime > timePerFrame)

{

interFrameTime -= timePerFrame;

++animatecurrentFrame.X;

if (animatecurrentFrame.X >= animatesheetSize.X)

{

animatecurrentFrame.X = 0;

++animatecurrentFrame.Y;

if (animatecurrentFrame.Y >= animatesheetSize.Y)

animatecurrentFrame.Y = 0;

}

}

දැන් බලමු මෙම කෝඩ් එකෙන් කියවෙන්නේ මොකක්ද කියල. පළමු පේලියෙන් කියන්නේ අර frame එකේ ඉදලා ඊළග frame එකට යන්න  ගිහිපු කාලය. මේක ගන්නේ library වල තියෙන gameTime  මෙතඩ් එක පාවිච්ච් කරලා.  gameTime.ElapsedGameTime.Milliseconds එකෙන් අපිට ලැබෙන්නේ ගෙවුන මිලි තත්පර ගණන. අපිට ඕනේ නම් මිනිත්තු වලින් උනත් ගන්න පුළුවන්. එතකොට millisecond වෙනුවට minute යොදාගන්න ඕනි. නමුත් මෙතැනදී එහෙම කරන්න එපා.  ඊළගට කරන්නේ එහෙම ගන්න කාලය සාමාන්‍ය frame 2ක් අතර කාලයට වැඩිද කියල බලනව. එහෙමනම් එම කාලය අඩු කර ඊලග frame එක අර ෂිට් එකෙන් ලෝඩ් කරනවා.

අද ලිපියෙන් මේපමණයි. ඊලග ලිපියෙන් input දෙන හැටි බලමු. එතකොට පුළුවන් කීබෝඩ් සහ මවුස් එක පාවිච්චි කරලා අපේ රුප හසුරුවන්න. ඔබ සැමට ජය.. :)

(මෙවර වැඩසටහන මෙතනින් ගන්න)

20
Feb

Game Development : 02වන පාඩම

අද ලිපියෙන්  සාකච්ඡා කෙරෙන්නේ කොහොමද මේකට රුප එහෙම නැත්නම් Sprites ඇතුලත් කරන්නේ කියල. ප්‍රධාන වශයෙන්ම sprites වර්ග දෙකක් තියෙනවා. එනම්  2D සහ  3D යන්නයි. අපි මේ පාඩම් මාලාව තුල කරන්නේ ද්විමාන රූප නිසා අපි 2D sprites යොදා ගන්න හැටි බලමු.  අද සිට පලවන සියලු පාඩම් සමග “මුලික අංග” නිම කරන ලද project එකක් අමුණන්න තීරණය කලා. මොකද එතකොට තේරෙන්නේ නැති තැනක් අවොත් බලන්න පුළුවන් වෙන නිසා.

XNA වල අපිට රුප සදහා ගොඩක් file extensions යොදා ගන්න පුළුවනි.  jpg, bmp සහ png වගේ ඒවා. මේ අපි ප්‍රොජෙක්ට් එක තුලට ගන්න හැම ඉමේජ් එකක්ම XNA වලින් එයාලගෙම ෆෝමැට් එකකට පරිවර්තනය කරලා තම පාවිච්චි කරන්නේ. මෙය සරලව content pipeline කියාත් හදුන්වනවා. ඉමේජ් පමණක් නොවේ අපි අපේ ප්‍රොජෙක්ට් එකට ගන්න ශබ්ද මාධ්‍ය ගොනු පවා ඔවුන්ගේම ෆෝමැට් එකකට යොමු කරලා පෙළ ගස්වනවා.

මම මේ සදහා පාවිච්චි කරන්නේ  100 x 100 පික්සෙල් ප්‍රමාණයේ jpg ඉමේජ එකක්. ඔබට කැමති ප්‍රමාණයේ එකක් යොදාගන්න පුළුවනි.

පලමුව අලුත් project එකක් හදාගන්න. දැන් solution explorer එකේ  <project_name>Content(Content) කියන එක රයිට් ක්ලික් කරන්න. අලුත් ෆෝල්ඩර් එකක් හදල images කියල රිනෙම් කරන්න. ඉන් පසු එම ෆෝල්ඩරය රයිට් ක්ලික් කරලා Add ->  Existing items ගිහින් ඔයාගේ ඉමේජ් එක දෙන්න. එවිට project එක තුලට එම අදාල ඉමේජ් ගොනුවෙන් කොපියක් වැටේවි.  තව මතක තියාගන්න අපි මේ project එකට දමන හැම ෆයිල් එකක්ම <project_name>Content (Content) එක යටතේ දැමිය යුතු බව..

දැන් අපි මෙම ඉමෙජ් ෆයිල් එක තිරයට ගන්න නම් එය 2D වෙරියබල් එකකට ගන්න ඕනි. මෙය ද්විමාන එකක් නිසා අපි Texture2D පාවිච්චි කරනවා. Game1.cs එකේ ක්ලාස් ලෙවෙල් එකෙන් හදාගන්න.

Texture2D   <texure_variable_name>;

දැන් අපි හදාගත්තු වෙරියබල් එකට ඉමේජ් එක ලෝඩ් කල යුතුයි. එනිසා එය LoadContent() එක තුල මෙසේ සිදු කරන්න..

<texure_variable_name> = Content.Load<Texture2D>(@”images/<your_image_name>”);

හරි දැන් ඉමේජ් එක වෙරියබ්ල් එකට ලෝඩ් වෙලා තියෙන්නේ. දැන් තියෙන්නේ මේක ඩිස්ප්ලේ එකේ අදින එකයි. එකට Draw මෙතඩ් එකට යන්න..

spriteBatch.Begin();

spriteBatch.Draw(<texure_variable_name>,  Vector2.Zero,   Color.White);

spriteBatch.End();

ඔබ හරියාකාරව අනුගමනය කලේ නම් නිල පාට තිරයේ ඔබේ රුපය වම් උඩ කොනක දිස්වෙනු ඇති.  මෙම ලයින් 3 හි පළමු ලයින් එකෙන් කියන්නේ ග්‍රැෆික් කාඩ් එකට sprite data යැවීම අරඹන බවයි. මැද ලයින් එකෙන් කියන්නේ එම යවන data ගැනයි. 3වන ලයින් එකෙන් කියන්නේ data යැවීම නවත්වන බවයි.

 

Vector2.Zero  –  දෛය්ශික වර්ග දෙකයි. 2D සහ 3D. අපි මෙහිදී කියන්නේ (0,0) ලක්ශ්‍යට අදාල vector එක පාවිච්චි කරන්න කියල.  ඔබට තිරයේ වෙනත් තැනක අදින්න උවමනා නම්  එවෙනුවට new Vector(y, x)  ලෙස දුන්නනම් හරි.

Color – ඉමෙජ් එකට Tint color එක.. මෙය වැදගත් වෙන්නේ එහා මෙහා පෙන ඉමේජ් වලටයි.

Overloaded method Draw – මෙය සාමාන්‍ය spriteBatch.Draw මෙතඩ් එකට තවත් ක්‍රියාකාරකම් වැඩිකොට එක කරන ලද මෙතඩ් එකක්. මෙයින් ඉම්ජ් වල එහා මෙහා පෙන ගති වැඩි කරන්න. ඉමේජ් flip කරන්න, crop කරන්න සහ layer depth හදාගන්න පුළුවනි.

spriteBatch.Draw(<texure_variable_name,  <Vector_Position>, <Rectangle_Crop>,  <Tint_color>,  <rotataion>,  <origin_of_rotation>,  <image_scale>, <spriteEffects>,  <Layer_Depth> );

Rectangle Crop – මේක අවශ්‍ය වෙන්නේ Sprite Animations වලදී. එනිසා දැනට මෙය null ලෙස සදහන් කරන්න.

rotation – ඉමේජ් එක කරකැවීමට යොදාගනී. float වලින් සදහන් කල යුතයි.

Scale – ඉමේජ් එකේ scale එක වෙනස් කරයි. float වලින් අගය සදහන් කල යුතුයි.

spriteEffects –  spriteEffects.FlipHorizontally  සහ spriteEffects.FlipVertically යන argument යොදා ඉමේජ් flip කිරීම කල හැකියි.

Layer Depth – මෙයින් කෙරෙන්නේ ඉමේජ් කීපයක් එක උඩ එක සමපාත කිරීමේදී උඩිනම පෙනෙන්න ඕනි මොකක්ද කියන එක සදහන් කරන එකයි. අපි හිතමු මෙහෙම.. දැන් අපි ගව තියෙනවා ගහක ඉමේජ් එකක් සහ මුවෙක්ගේ ඉමේජ් එකක්. අපිට ඕනි මුවා ගහ යට ඉන්නවා පෙන්න්න්න නේ. එතකොට අපිට කරන්න පුළුවන් උඩට එන්න ඕනි මොකක්ද යටට එන්න ඕනි මොකක්ද කියල float අගයක් දීල එක විස්තර කරන්න. අගය හැමවිටම 0 සහ 1 අතර තිබිය යුතුයි. 0 කියන්නේ most front position එක . 1 කියන්නේ  most back position එක. මෙම layer depth බාවිතා කිරීම සදහා spriteBatch.Begin() එකත් overload කිරීම අවශ්‍ය වෙනවා.

spriteBatch.Begin(SpriteSortMode.<your_selection>,  BlendState.<your_selection>);

SpriteSortModes – මෙයින් සදහන් වෙන්නේ රෙන්ඩර් කරන ලද sprites  ඇදීම සදහා පිළියෙළ කරන අයුරුයි.

  1. Deffered – end මෙතඩ් එක කෝල් කරන කන් sprite ටික stack කර තබාගෙන කෝල් කිරීමෙන් පසු එම sprite සාදන අනුපිලිවෙලින් යැවීම
  2. Immediate – Begin මෙතඩ් එක කෝල් කල වහ sprite යැවීම අරබිම..
  3. Texure –  Deffered ක්‍රමයට සමානයි නමුත් sequence එක ඇදීමට පෙරම තීරණය කරයි.
  4. BackToFront – layer Depth parameter පාවිච්චි කර sprites පිටුපස සිට ඉදිරිපසට පිළිවෙල කරයි.
  5. FrontToBack – Layer Depth parameter පාවිච්චි කර  sprites ඉදිරිපස සිට පසුපසට පිළිවෙල කරයි..

 

BlendState –   sprite වල වර්ණයන් බැක්ග්‍රවුන්ඩ් වර්ණ සමග සංයෝජනය වන අයුරු විස්තර කරයි. දැනට එහි ක්‍රම 4 විස්තර කිරීම ප්‍රයෝගික නොවන නිසා දැනට  AlphaBlend යන්න යොදා ගන්න. පසුව උදාහරණ යෙදෙන තැන්වලදී එය ගැන කීම වඩාත් සුදුසුයි.. දැනට AlphaBlend ලෙස එතනට යොදන්න.

example :

protected override void Draw(GameTime gameTime)

{

GraphicsDevice.Clear(Color.CornflowerBlue);

// TODO: Add your drawing code here

spriteBatch.Begin(SpriteSortMode.FrontToBack, BlendState.AlphaBlend);

spriteBatch.Draw(texture, Vector2.Zero, null, Color.White, 0, Vector2.Zero , 1,  SpriteEffects.None,  0);

spriteBatch.Draw(texture, new Vector2(150, 150), null, Color.Black, 0, Vector2.Zero, 1.5f, SpriteEffects.FlipHorizontally,1);

spriteBatch.End();

base.Draw(gameTime);

}

 

මේ සම්බන්දව ගැටලුවක් ඇත්නම් ඇත්නම් කොමෙන්ටුවක් දැමීම හෝ  TechKatha වෙත ලියන්න. ඒවගේම ලියන ආකාරය වෙනස් විය යුතු යයි සිතෙනවා නම් එයත් අපට දන්වන්න. ඊලග ලිපියෙන් animation කරන හැටි කියන්න බලාපොරොත්තු වෙනවා.  ඔබ සැමට සුභ සතියක් :)

මෙවර වැඩසටහන මෙතනින් ගන්න.

 

– Prasad Jayashanka -

22
Jan

Game Development : 01වන පාඩම

අදින් ඇරඹෙනුයේ  Microsoft සමාගම මගින් ලබාදෙන  XNA Game Studio 4.0 භාවිතා කර ක්‍රීඩා නිර්මාණය පිළිබඳ ලිපි පෙළයි.  මතක තබාගන්න ලෙහෙසියෙන් පටන් ගන්න දෙහි ප්‍රතිපලයට වඩා අමාරුවෙන් පටන් ගෙන කරන දෙහි ප්‍රතිපල වැඩියි. මෙය යම් තරමකට අමාරු උනත් හොද පටන් ගැනීමක්. ඔබට අවශ්‍ය වීඩියෝ ක්‍රීඩා කේත කරුවකු වන්න නම් අමාරු දේ කරන්න. අවශ්‍ය නිකන් ක්‍රීඩා විනෝදයට හදන්න නම් මේ ලිපි පෙළ කියවන්න කාලය මිඩංගු නොකර කෙලින්ම ගේම එන්ජින් එකක් වෙත යොමු වන්න. අප මේ ලිපිය ලියන්නේ එවන් අමාරු මාර්ගය තෝරාගෙන ඉදිරියට යාමට සිතන අයටයි. ටෙක්කතා කරන හැමෝගෙම පැතුම එවන් අයට  තාක්ෂණයට ඇති භාෂා භාධකය ඉවත් කරන්නයි.

එහෙනම් පටන් ගනිමු :)

පළමුව කල යුත්තේ අවශ්‍ය පරිසරය නිර්මාණය කර ගනිමයි. මේ සදහා පහත මෘදුකාංග බාගැනීම අත්යවශ්‍යයි..

  1. Microsoft Visual Studio 2010 (බාගත කිරීමට මෙම ලින්කුව භාවිතා කරන්න)
  2. Microsoft XNA Game Studio 4.0 (බාගත කිරීමට මෙම ලින්කුව භාවිතා කරන්න)

පළමුව Visual Studio ඉන්ස්ටෝල් කරන්න. ඕනෑම 2010 සංස්කරණයක් භාවිතා කරන්න පුළුවනි. ලින්ක් එකේ ලබා දී ඇත්තේ Microsoft සමාගම විසින් නොමිලේ ලබා දෙන Express සංස්කරණයයි. ඔබට කැමති visual studio 2010 සංස්කරණයක් ස්ථාපනය කිරීමෙන් පසුව XNA game studio එක ස්ථාපනය කරන්න.

දැන් ඔබේ පරිගණකය හි සැකසුම් සදා නිමයි :)

ඊළගට visual studio විවෘත කරන්න. එහි File => New => New Project තෝරා ගන්න. ඉන් පසු එන වින්ඩෝ එකේ වම් පස තීරුවේ Visual C# යන්න දිග හැර එහි XNA Game Studio 4 යන්න තෝරන්න. ඉන් පසු දකුණු පස ඇති ලිස්ට් එකෙන් Windows Game (4.0 ) තෝරාගන්න. ඔබ කැමති නමක් ලබාදී OK ඔබන්න.. දැන් ඔබට නව project එකක් නිර්මාණය වනවා ඇති. ඔබට මෙම කේතම සුළු වෙනසක් කොට Windows phone සහ Xbox වලට යොදාගන්න පුළුවන්. එම වෙනස්කම් ඉදිරියේදී සදහන් වෙයි.

Read moreRead more

7
Jan

Game Development : හැදින්වීම

පරිගණක සහ විවිධ ක්‍රීඩා උපාංග භාවිතා කරන හැමෝගෙම ලොකු ආසාවක් තමා දෘශ්‍ය ක්‍රීඩා සෙල්ලම් කිරීම. කවුද අකමැති දෘශ්යව ක්‍රීඩා සෙල්ලම් කරන්න.  නමුත් ඔබට කවදාවත් සිතුනේ නැද්ද දෘශ්‍ය ක්‍රීඩා නිර්මාණය කරන්න? ඔව් ඔබටත් පුළුවනි. මේ එසේ දෘශ්‍ය ක්‍රීඩා නිර්මාණය ගැන කියන ලිපි පෙළක පළමු වන්නැයි.  මෙය ලියන මමත් තවම ඉගෙන ගන්න කෙනෙක්. එනිසා යම් වරදක් දැක්කොත් පහදා දෙන මෙන් ඉල්ලා සිටිනවා පටන් ගැනීමට පෙරම.  දෘශ්‍ය ක්‍රීඩා නිර්මාණය කිරීමට ඔබත් කැමතිද? පිළිතුර ඔව් නම් ඔබ සතුව තිබිය යුතු යම් කිසි දෑ කීපයක් තියෙනවා..
1. බලවත් කැමැත්ත සහ කැපවීම – දෘශ්‍ය ක්‍රීඩා නිර්මාණය පුළුල් විෂයක් මෙන්ම ඉගෙනගන්න දේ බොහොමයි. ඒවගේම කැමැත්ත නැත්නම් බොහොම වෙහෙසකාරී දෙයක්. ගොඩක් අය දෘශ්‍ය ක්‍රීඩා නිර්මාණය පටන් ගත්තත් සති දෙකෙන් තුනෙන් නවතා දමනවා මොකද ක්රීදඩා සෙල්ලම් කිරීම තරම් ප්‍රියජනක දෙයක් නොවන නිසා. නමුත් ඔබ මෙයට ඉතාම කැමැත්තක් දක්වනවා නම් එය වෙහෙසකාරී වීම කෙසේ වෙතත් විනෝදකාරි දෙයක් වේවී.
27
Aug

Samsung WB150F Smart Camera Review

Youtube වල බලන්න. 

  • ප්‍රමාණය : 2.4 x 4.2 x 0.9 අගල්
  • Megapixels: 14 MP
  • Sensor Type: CMOS
  • Sensor ප්‍රමාණය : 6.2 by 4.6 (1/2.3″) mm
  • Storage : Secure Digital, Secure Digital High Capacity, Secure Digital Extended Capacity
  • බැටරි වර්ගය: Lithium Ion
  • උපරිම ISO ප්‍රමාණය: 3200
  • Optical Zoom: 18 x
  • Image Stabilization: Optical
  • Touch Screen:  නැත
  • LCD ප්‍රමාණය : 3 අගල්
  • Video Resolution: 720p (HD)
  • Interface  : micro USB
  • GPS: නැත.
  • On වෙන්න යන කාලය : තප්පර 3.8
  • චායාරුප දෙකක් ගන්න යන කාලය : තප්පර 1.5

Read moreRead more

22
Jul

ලැප්ටොප් එකදිගටම විදුලිය හා සම්බන්ධ කර භාවිතය සුදුසුද?

ගොඩක් අය විවිධ මතයන් ඉදිරිපත් කරන මාතෘකාවක් තමයි බැටරිය විදුලිය හා සම්බන්ධ කරගෙන වැඩ කිරීම. සමහරෙක්ට අනුව එසේ කිරීම සුදුසුයි, තවකෙක්ට අනුව එසේ කිරීම සුදුසු නැහැ. මෙම සටහනින් කතා කිරීමට බලාපොරොත්තු වන්නේ ඒ ගැනයි.

ප්‍රධාන වශයෙන් අද වෙනකොට භාවිතා වෙන බැටරි වර්ගය තමයි ලිතියම්-අයන් (Li-ion). ලැප්ටොප්, ජංගම දුරකථන, කැමරා, ටැබ් ආදී අයිතම ගණනාවක් තුල භාවිතා වෙන්නෙ මෙම බැටර් වර්ගයයි. මීට පෙර භාවිතා වුනේ නිකල් බැටරි (Ni-MH) නිකල් බැටරි භාවිතා කලයුතු වුනේ බොහොම පරිස්සමින් (තවමත් ඇතැම් කැමරා වර්ග සඳහා තවමත් භාවිතා කරන්නෙ නිකල් බැටරි). මොකද මෙම බැටරි නැවත් ආරෝපණය (Charge) කරන්න, දැනට තියෙන ආරෝපනය සම්පූර්ණයෙන්ම අවසන් වන තුරු සිටිය යුතුයි. නැතුව අතරමැදින් චාජ් කලොත් වෙන්නෙ බැටරිය බොහොම ඉක්මනින් සවුත්තු වෙලා යන එක.
නමුත් ලිතියම් බැටරි වල තත්වය මීට වඩා ගොඩක් වෙනස්. මෙම බැටරි තුල වෙනමම පරිපථයක් අඩංගු වෙනවා බැටරියේ දැනට ආරෝපනය වී ඇති ප්‍රමාණය දැනගැනීමට. එම නිසා පරිපථය දන්නවා මේ වන විට බැටරියේ ආරෝපනය වී ඇති ප්‍රමාණය. එම නිසා නැවතත් විදුලිය හා සම්බන්න කල විට පරිපථය විසින් බැටරියේ හිඟ ආරෝපණ ප්‍රමාණය පමණක් ලබාගෙන චාජ් කිරීම නවතා දමනවා. එතැන් සිට කෙලින්ම ප්‍රධාන විදුලියෙන් තමයි උපාංගය බල ගැන්වෙන්නෙ.
ඇතැම් විට අලුතින් මිලදී ගත් ලැප්ටොප් වල පවා බැටරිය හානි වී ඇති බව මෙහෙයුම් පද්ධතිය මගින් දන්වනවා. නමුත් සාමාන්‍ය පරිදි නියමිත කාලයම උපාංගය ධාවනය වෙනවා ඔබ දැක ඇති. එසේ වන්නෙ කලින් සඳහන් කල පරිපථයට පමණත් හානි වී ඇති විටයි.

ලැප්ටොප් එකදිගටම විදුලිය හා සම්බන්ධ කර භාවිතය සුදුසුද?
පිළිතුර : ඔවු. ගැටළුවක් නැහැ

සමහරුන් මතයක් දරනවා බැටරිය චාජ් වී අවසන් වූ පසුව විදුලියෙන් විසන්ධි කර භාවිතා කල යුතු බවට. ජංගම දුරකථන, කැමරා, ටැබ් ආදියට නම් විදුලියෙන් විසන්ධි නොකර භාවිතා කිරීම ප්‍රායෝගිකව අපහසුයි. නමුත් ලැප්ටොප් එසේ අපහසු නැහැ. කෙසේ වුවත් මෙසේ විදු​ලියෙන් විසන්ධි කර භාවිතා කිරීමෙන් වෙන්නෙ බැටරියේ ආයු කාලය ඉක්මනින් අවසන් වෙන එක.
බැටරියක් නිෂ්පාදනය කිරීමේදී එහි ආයුකාලය charge cycle වලින් දල ගණනයක් සිදු කරනවා. බැටරියෙන් බැටරියට මෙම cycles ගණන වෙනස්. මෙහිදී එක cycle එකක් කියන්නෙ පැයක් දෙකක් භාවිතා කර නැවත චාජ් කිරීම නොවෙයි.
බැටරියේ එක charge cycle එකක ආයු කාලය පැය 4ක් කියා සලකන්න (charge cycle එකක ආයුකාලය යනු සම්පූර්ණයෙන්ම චාජ් කර, නැවත චාජ් කිරීමකින් තොරව සම්පූර්ණයෙන්ම බැස යන තෙක් සම්පූර්ණ කාලයයි). මෙම බැටරිය පැය දෙකක් භාවිතා කර නැවත වරක් චාජ් කලහොත් බැටරියේ එක life cycle එකක් සම්පූර්ණ වන්නේ නැහැ. එවිට අවසන් වනේ charge cycle බාගයක් පමණයි. නැවතත් පැය දෙකක් භාවිතා කර තවත් වරක් චාජ් කලහොත්, එවිට charge cycle “එකක්” සම්පූර්ණයි. (කලින් පැය 2 + දැන් පැය 2 = පැය 4)


Image Source : apple.com/batteries

සිතන්න ඔබ සැමවිටම ලැප්ටොප් යන්ත්‍රය විදුලියෙන් විසන්ධි කර පාවිච්චි කරනවා කියා, ඔබ සිදුකරගන්නේ බැටරියේ charge cyclesගණන වැඩි කරගැනීමයි.

බැටරි ගැන කතා කල Techකතා (Epi 132 : July 20, 2012) වීඩියෝව පහතින් නරඹන්න
TechKatha Episode 132

-->