آموزش ساخت بازی با کانواس و جاوا اسکریپت

saalek110

Well-Known Member
صفحه ۵:

تابع راندم:
JavaScript:
Math.random();

تابع راندوم ، یک عدد اعشاری زیر یک می دهد.


اگر عدد می خواهید این طوری بنویسید:
JavaScript:
Math.floor(Math.random() * 10);


عدد بین صفر تا ۹ می دهد.
اگر یک تا ۱۰ می خواهید بعلاوه یک کنید.

کاربردش که خیلی زیاده... مثلا برای پخش علف و درخت در صحنه. چون اگر طبق نظم خیلی دقیق باشه جالب نمیشه.
 
آخرین ویرایش:

saalek110

Well-Known Member
JavaScript:
Math.floor(Math.random() * 100);

کد بالا بین صفر تا ۹۹ می دهد.

JavaScript:
Math.floor(Math.random() * 100) + 1;

کد بالا میشه یک تا صد.
 

saalek110

Well-Known Member

saalek110

Well-Known Member

دستورات جاوا اسکریپت که باید بدانید – ۵۰ دستور کلیدی​



سالک: لازم نیست همه دستورات سایت بالا را یاد بگیرید.. ولی با نگاه به مطالب سایت بالا یک مروری بر چیزهایی که بلدید بکنید.
 

saalek110

Well-Known Member
کدهای آماده جاوا اسکریپت که به آن ها نیاز دارید – فهرست کاربردی


سالک:مرور سایت بالا ، کمک می کند ، دانسته های خود را مرور کنید یا بعضی چیزهای جدید یاد بگیرید. ولی لازم نیست خیلی قسمتهای اون را یاد بگیرید. برای کار ما لازم نیست.
 

saalek110

Well-Known Member

قواعد دستوری در JavaScript​



سالک: سایت بالا در معرفی چگونه نوشتن کدهای جاوا اسکریپت کمک می کند.

یک کد از این سایت نقل می کنم:
JavaScript:
<html>
   <body>
      <script>
            document.write("Hello World!")
      </script>
   </body>
</html>
نتیجه:
کد:
Hello World!
 

saalek110

Well-Known Member

قواعد زبان جاوا اسکریپت​


سالک: سایت بالا ، یک سری قوائد نوشتن را میگه. یک مروری بکنید بد نیست.
 

saalek110

Well-Known Member
برای نمایش فایلهای gif



یک فایل در صفحه بالا هست به نام GIFGroover.jsکه کارش خوندن فایلهای gif است.

اگر پروژه را نمی خواهید یا نمی تونید دانلود کنید بروید این لینک:


کد را می بینید...دکمه دانلود را بزنید بالای کدها.

در شکل زیر دکمه دانلود را نشان دادم:

Screenshot_۲۰۲۴-۰۲-۲۹_۱۱۱۲۵۴.jpg
 

saalek110

Well-Known Member
نمایش فایل gif:

طرز استفاده از اون فایل GIFGroover.js. .. اول باید فایل را نام ببرید. در کد زیر هست این کار
بعدش متغیری ساختیم و مکان فایل gif را بهش گفتیم. فایل من اسمش a24.gif است و در پوشه images است.

JavaScript:
</script>
<script src="GIFGroover.js"></script>
<script>
const myGif = GIFGroover();
      myGif.src = "images/a24.gif";

برای نمایش عکس در نقطه صفر و صفر داریم:
JavaScript:
ctx.drawImage(  myGif.image,0,0);

البته سایز عکس هم می توانیم بدهیم. این طوری:
JavaScript:
 ctx.drawImage(  myGif.image,0,0,70,70);

سالک: من دنبال یک gif خوان تک فایل بودم که از پکیجی استفاده نکرده باشه. که این را پیدا کردم.
 
آخرین ویرایش:

saalek110

Well-Known Member
امکاناتی داره این برنامه ،که در دموی زیر می توانید ببینید:


در فایل js دموی بالا می بینید چطور از امکانات استفاده کرده.

امکاناتش را اینجا

نام برده:

Use GIFGroover to load a GIF as a sequence of images (frames).
Use GIFGroover to play gifs on canvas.
Use GIFGroover to control gif play speed, including backwards.
Use GIFGroover to pause and un-pause a gif.
Use GIFGroover to add/modify individual frames.
Use GIFGroover to change the frame sequence.
Use GIFGroover to access the comment/s field (if available).
Use GIFGroover to infinitely loop, limited loop gifs.

 

saalek110

Well-Known Member
در اون نرم افزارهای پیکسل ساز ، من یک gif ساختم که دو فریم دارد ، در فریم اول یک ۶ ضلعی و در فریم دوم ۴ دایره دارد. با نمایش دهنده gif فوق توانستم اون فایل gif را در بازی خودم نمایش دهم:

Screenshot_۲۰۲۴-۰۲-۲۹_۱۱۳۰۰۰.jpg Screenshot_۲۰۲۴-۰۲-۲۹_۱۱۲۹۴۹.jpg

چون ابزار فیلم گرفتن نداشتم ، دو عکس از نمایش فایل gif گرفتم. در اصل این دو شکل مرتب پشت سرهم نمایش داده می شوند در بازی من.
اون شش ضلعی بزرگ یا اون ۴ دایره جلوی دماغه هواپیما منظورم است.

فایلهای gif می تواند بازی شما را جذاب کند.
 

saalek110

Well-Known Member
اول تابع update این کد را بزارید:

JavaScript:
const currentDate = new Date();
const milliseconds = currentDate.getMilliseconds();

و آخر تابع update این کد را:
JavaScript:
const currentDate2 = new Date();
const milliseconds2 = currentDate2.getMilliseconds();

و برای چاپ:
JavaScript:
text="mil2-mil1: " + (milliseconds2-milliseconds);
ctx.font = "20px" + " "+"Consolas" ;
            ctx.fillStyle = "black";
           ctx.fillText(text, 3, 15);

من این کارو کردم. در بازی زیر:


مقدار ۳ را نشان می داد، ولی وقتی فریم نامبر به ۱۰ هزار رسید این عدد به ۱۰ رسید.
فکر کنم بخاطر اینه که تعداد آبجکت های خلق شده زیاد میشه..

وقتی فریم نامبر به ۲۰ هزار رسید ، عدد به ۱۳ رسید.
وقتی فریم نامبر به ۳۰ هزار رسید هنوز این عدد به ۲۰ نرسیده است.
وقتی فریم نامبر به ۴۰ هزار رسید ، عدد ۲۱ یا ۲۲ است.
وقتی فریم نامبر به ۵۰ رسید ، عدد به ۲۷ رسید.

فکر کنم آبجکت هایی که مختصاتشون بیرون صفحه کانواس است رسم نمیشه. با نگاه به این اعداد میگم.
ولی باید مقدار ram اشغال شده را هم بررسی کرد. چون کاهش ram خودش به سیستم فشار میاره. ولی شاید متغیرهایی که ایجاد میشه ، در مجموع حافظه زیادی نشه.
 
آخرین ویرایش:

saalek110

Well-Known Member
ساخت کلاس نمایش عکس gif

من فعلا به این نتیجه رسیدم برای هر عکس باید یک groove ایجاد کرد،
چون وقتی بهش یک عکس می دهیم دیگه نمیشه عکسش را عوض کرد.
اگر هم برای هر شی که می خواهیم ساخته بشه یک groove بسازیم ، بازی دچار سنگینی میشه. یعنی آبجکت های هم عکس باید یک groove داشته باشند.
پس در متغیرهای عمومی نوشتم:
JavaScript:
const myGif1 = GIFGroover();
myGif1.src="../images/gif/a1.gif";
const myGif2 = GIFGroover();
myGif2.src="../images/gif/a24.gif";

کد زیر آبجکت ساز است:

JavaScript:
 x = canvas.width;
    myObstacles_gif_1.push(new component_gif(17,17,myGif1 , x, 252));
      
    myObstacles_gif_2.push(new component_gif(25,25,myGif2, x, 146));
کد بالا را مثلا هر ۵۰ تا ۳۰۰ فریم نامبر یک بار اجرا می کنم. تا عکسها به فواصل بیاید.
کد بالا دو سری عکس gif را با y هایی برابر ۲۵۲ و ۱۴۶ تولید می کند.
دو تا آرایه را دو خط کد بالا استفاده می کند. ولی در یک ارایه هم میشد.ولی چون فاصله از دوربین ممکن است فرق داشته باشه و بخواهیم اعضای یک آرایه را آهسته تر تکان دهیم دو آرایه مناسب است.

Screenshot_۲۰۲۴-۰۳-۰۳_۱۳۴۸۱۶.jpg

در عکس بالا ، دو سری gif را می بینید ، پایین و بالای جاده ، زیر جاده gif به شکل مستطیل های بنفش است و بالای جاده به شکل شش ضلعی های قرمز.


کلاس نمایش gif این شکلی است:
JavaScript:
function component_gif(width, height ,groove, x, y) {
    this.groove=groove;
    this.width = width;
    this.height = height;
    this.x = x;
    this.y = y;
    this.update = function() {
   
ctx.drawImage( this.groove.image,this.x,this.y,this.width,this.height);
      
    }
}



 
آخرین ویرایش:

saalek110

Well-Known Member
پست قبلی را ادیت کردم...
من آمده بودم برای هر شی که انتهای صفحه خلق میشد یک groove ساختم ، که برنامه دچار اختلال شد
پس به این نتیجه رسیدم برای هر عکس یک groove ایجاد بشه ، نه برای هر شی.

پس در ابتدای برنامه تعدادی groove ایجاد می کنم..برای هر عکس ، و در آبجکت ساز از آن groove ها استفاده می کنم.

برنامه حاصل را خودتان ببینید:

 
آخرین ویرایش:

جدیدترین ارسال ها

بالا