بازی ساز phaser

saalek110

Well-Known Member
JavaScript:
this.screenWidth = this.scale.width;
    this.screenHeight = this.scale.height;
    this.screenCenterX = this.screenWidth / 2;
    this.controlsAreaHeight = this.screenHeight * 0.2;
    this.gameAreaHeight = this.screenHeight - this.controlsAreaHeight;

کدهای بالا را من تست نکردم. فعلا پست زدم تا بعدا بررسی کنم.
از سایت :

شرحش اینه که صفحه را به دو قسمت تقسیم کنیم. منطقه پنجره بازی و منطقه کنترل.
ولی شاید بشه داخل پنجره بازی ، کنترل ها را هم قرار داد.
 

پیوست ها

  • Screenshot_۲۰۲۴-۰۳-۰۸_۱۲۵۹۱۹.jpg
    Screenshot_۲۰۲۴-۰۳-۰۸_۱۲۵۹۱۹.jpg
    41.2 کیلوبایت · بازدیدها: 0
آخرین ویرایش:

saalek110

Well-Known Member
آخرین ویرایش:

saalek110

Well-Known Member
یک فیلم در مورد phaser 3
شاید براتون جالب باشه.
انگلیسی ، ۱۰ دقیقه.

 

saalek110

Well-Known Member
من قبلا در تاپیک ساخت بازی با کانواس و جاوا اسکریپت داشتم بدون بازی ساز ، بازی می ساختم....

یک تاپیک جدید امروز زدم:



در تاپیک فوق ، با استفاده از کلاس ، اشیایی برای بازی خلق شده.
و سپس اون اشیا در بازی حرکت داده می شود و به قهرمان بازی برخورد می کند.
کلاسی هم قهرمان دارد و برخورد با اشیا در یکی از توابع کلاس قهرمان بررسی می شود.

اگر با phaser کار می کنید. به جای اینکه hero را در تابع استارت اون برنامه خلق کنید در تابع create خود خلق کنید.
دو کلاس را میشه کنار توابع preload و create و update قرار داد.
هر چی در تابع update اون برنامه هست ، بریزید داخل تابع update خودتان.

اونجا که با تابع setinterval تابع update را اجرا-دائم می کنه را شما نیاز ندارید.
متغیرها مثل اونجا ، بیرون توابع باشه...بالای تابع preload قرار دهید. متغیرهای بیرون توابع متغیرهای عمومی است و در همه توابع قابل دسترسی است، ولی متغیرهای داخل تابع ها ، فقط داخل همون تابع شناخته شده و قابل استفاده است.
ساخت کانواس هم نیاز نیست ، حدف کنید کدهایش را.
در قسمت html اون برنامه یک فایل عکس هواپیما هست... شما طبق روال کار خودتون در تابع preload عکسها را به اسپریت ها نسبت دهید.


اون تاپیک ، بدون بازی ساز است.
و من در شرح بالا گفتم که چطوری بر روی برنامه های phaser منطبق کنید.
 
آخرین ویرایش:

saalek110

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


برنامه زیر ، کلاس اشیائش کار می کند
ولی هنوز کلاس قهرمان اش نیار به اصلاح داره.
با دکمه ها میشه هواپیما را بالا و پایین کرد ولی خوب کنترل نمیشه.
برخورد هم داریم و جون کم میشه. نمایش جون را هم داخل پنجره بازی داریم و هم در قسمت html.

JavaScript:
<!DOCTYPE html>
<html>
<head>
    <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/phaser-arcade-physics.min.js"></script>
</head>
<body>
<img id="img" src="../assets/sprites/my_plane.png" alt="plane" width="30" height="10">
    <script>
    var config = {
        type: Phaser.AUTO,
        width: 800,
        height: 600,
        physics: {
            default: 'arcade',
            arcade: {
                gravity: { y: 200 }
            }
        },
        scene: {
            preload: preload,
            create: create,
            update : update
        }
    };

    var game = new Phaser.Game(config);
 
 var hero;
var myObstacles = [];
let heart=1000;
 var frameNo=0;
 var graphics;
 var s;
    function preload ()
    {

 this.load.image('plane', '../assets/sprites/plane.png');
    }

    function create ()
    {
        s=100;
text = this.add.text(10, 10, '', { font: '16px Courier', fill: '#00ff00' });
text2 = this.add.text(200, 10, '', { font: '16px Courier', fill: '#00ff00' });

graphics = this.add.graphics({ lineStyle: { width: 2, color: 0x00ff00 }, fillStyle: { color: 0xff0000 }});

     //const image1=this.add.image(200, 300, 'plane');
//    hero = this.physics.add.existing(new hero(this, 100, 100));
      //   hero = new hero(73, 25 ,"img1", 10,200);
//this.children.add(new hero(this, 164, 250));

hero = new player(this, 100, 200, 'plane' );
    }
//======================================
class player extends Phaser.GameObjects.Sprite{
constructor(scene, x, y , name){

            super(scene, x, y, name);

      this.scene.add.existing(this);
     scene.physics.world.enableBody(this);
    this.body.setGravityY(0);               
          this.body.setCollideWorldBounds(true);

  }
                                                  

                                 update(){
 //this.body.setVelocityX(s); 
     this.body.setVelocityY(-100+10*s);
 //this.body.setGravityY(s) ;             
                          //  this.body.setVelocityX(20);
          }  // update




crashWith (otherobj) {
        var myleft = this.x;
        var myright = this.x + (this.width);
        var mytop = this.y;
        var mybottom = this.y + (this.height);
        var otherleft = otherobj.x;
        var otherright = otherobj.x + (otherobj.width);
        var othertop = otherobj.y;
        var otherbottom = otherobj.y + (otherobj.height);
        var crash = true;
        if ((mybottom < othertop) || (mytop > otherbottom) || (myright < otherleft) || (myleft > otherright)) {
            crash = false;
        }
        return crash;
    }





}    // class
// ========================================
//  ------- update function --------------
function update()
{

    graphics.clear();




    for (i = 0; i < myObstacles.length; i += 1) {
 
        if (hero.crashWith(myObstacles[i])) {
heart--;
if (heart<0)
            return;
        }// if
    } // for
 

    frameNo += 1;
 
 
    if (frameNo == 1 || everyinterval(150)) {
text.setText([
'ccc'
]);




      //  x = canvas.width;
 myObstacles.push(new component(40, 40, "red", 600, 80));
}   // if frameno 150


for (i = 0; i < myObstacles.length; i += 1) {
        myObstacles[i].x += -1;
        myObstacles[i].update();
    }// for loop for move objects


//hero.newPos();
hero.update();

document.getElementById("the_heart").innerHTML="heart= " + JSON.stringify(heart);

text.setText([
             'frameNo: ' + frameNo
                                ]);

text2.setText([
         'heart: ' + heart

]);
}// uodate function




function component(width, height, color, x, y) {
    this.width = width;
    this.height = height;
    this.x = x;
    this.y = y;
    this.update = function() {

             //   graphics.clear();

         graphics.fillStyle(0xff0000);
     graphics.fillRect(this.x, this.y, this.width, this.height);


          //  ctx.fillStyle = color;
           // ctx.fillRect(this.x, this.y, this.width, this.height);
 
    }
}  // component


function everyinterval(n) {
    if ((frameNo / n) % 1 == 0) {return true;}
    return false;
}

function accelerate(n) {
  //  hero.elevation = n;
  s=n*10;
}    //accelerat
    </script>

<center>



<table><tr><td>

<button type="button" id="up_down1" style=" font-size:20px;  " onclick="accelerate(-1)">up</button>

<button type="button" id="middle"  style=" font-size:12px;   " onclick="accelerate(0)">stop</button>

<button type="button" id="up_down2" style=" font-size:20px;  " onclick="accelerate(1)">down</button>

</td></tr><tr><td>

</td></tr>

</table>

</center>



<script>

   document.getElementById('up_down1').style.width =  window.innerWidth/ 3;

     document.getElementById('up_down1').style.height =  window.innerHeight/ 8;

        document.getElementById('up_down2').style.width =  window.innerWidth/ 3;

           document.getElementById('up_down2').style.height =  window.innerHeight/ 8;

              document.getElementById('middle').style.width =  window.innerWidth/ 5;

                 document.getElementById('middle').style.height =  window.innerHeight/ 10;

                 </script>

                 <p id="the_heart"></p>

                 <p>Use the up and down button to stay in the air</p>

                 <p>Good luck!</p>
</body>
</html>
 
آخرین ویرایش:

saalek110

Well-Known Member
در بازی دو پست قبل خواستم تاثیر کلاس در بازی را بگم...
حالا با کلاس هرو کار ندارم،...شاید بدون کلاس هم بشه هرو یا player را ایجاد کرد...
ولی کلاس component نقش مهمی در بازی دارد...

نقش کلاس component:

کلاس component مثل یک کارخانه تولید اشیا است.
یک آرایه می سازید و هر عضو آرایه چیزهایی در کلاس ثبت می کند ، مثل طول و عرض و محل شامل x و y...
در برنامه مذکور من ساده ترین شی را ایجاد کردم که قابل فهم باشه یعنی یک مربع قرمز، امه و ساده ترین حرکت که حرکت را انتخاب کردم یعنی فقط حرکت به سمت چپ.
در تاپیک ساخت بازی با کانواس و جاوا اسکریپت ، من درختان و ساختمان ها را از آخر جاده در افق درشت کردم تا بیاید از کنار ماشین بازیکن رد شود. یعنی اشیا اولا عکس است نه مربع ، و دوما سایزشان هم بزرگ می شود همراه با حرکاتشان...
در همون تاپیک در بازی تانک ، صفت سلامت برای دیوارها تعریف کردم که وقتی تانک بهشون می خورد صفت سلامت کاهش پیدا می کرد و دیوارها قهوه ای میشد.
یعنی صفات زیادی میشه به اشیای تولیدی از کلاس component افزود ، و محیط هایی خلق کرد.

در کلاس قهرمان ، هواپیما عکس است نه مربع.
می توانید از روی اون کلاس component را هم عکسی کنید.
و اشیا را بسازید و حرکت دهید.

همچنین در سورس های phaser انیمیشن داریم. که من هنوز خودم کار نکردم.
سورس ها را مطالعه کنید. من خودم سورس ها را مطالعه می کنم و گاهی هم کلماتی را در گوگل سرچ می کنم تا ببینم کسانی که با phaser بازی ساختن ، چی ساختند و دچار چه مشکلاتی شدند و چه راه حلی به اونها پیشنهاد شده. کلاس قهرمان در پست قبل را همین جوری سرهم کردم.
 

saalek110

Well-Known Member
برنامه چند پست قبل را تغییر دادم.
دکمه های html اون را حذف کردم و با تاچ داخل پنجره بازی می شود هواپیما را کنترل کرد. با کد زیر:
JavaScript:
this.input.on('pointerdown', function (pointer) {

if (pointer.x>400) s+=3;
if (pointer.x<400) s-=3;

            }, this);

با تست بازی ، می بینم که انگار برخورد هواپیما با مربع ها دقیق نیست. ولی فعلا شاید خوب باشه.



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

JavaScript:
<!DOCTYPE html>
<html>
<head>
    <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/phaser-arcade-physics.min.js"></script>
</head>
<body>
<img id="img" src="../assets/sprites/my_plane.png" alt="plane" width="30" height="10">
    <script>
    var config = {
        type: Phaser.AUTO,
        width: 800,
        height: 600,
        physics: {
            default: 'arcade',
            arcade: {
                gravity: { y: 200 }
            }
        },
        scene: {
            preload: preload,
            create: create,
            update : update
        }
    };

    var game = new Phaser.Game(config);
 
 var hero;
var myObstacles = [];
let heart=1000;
 var frameNo=0;
 var graphics;
 var s;
    function preload ()
    {

 this.load.image('plane', '../assets/sprites/plane.png');
    }

    function create ()
    {
        s=0;
text = this.add.text(10, 10, '', { font: '16px Courier', fill: '#00ff00' });
text2 = this.add.text(200, 10, '', { font: '30px Courier', fill: '#00ff00' });
text3 = this.add.text(400, 10, '', { font: '30px Courier', fill: '#00ff00' });

graphics = this.add.graphics({ lineStyle: { width: 2, color: 0x00ff00 }, fillStyle: { color: 0xff0000 }});

     //const image1=this.add.image(200, 300, 'plane');
//    hero = this.physics.add.existing(new hero(this, 100, 100));
      //   hero = new hero(73, 25 ,"img1", 10,200);
//this.children.add(new hero(this, 164, 250));
//this.add.text(50, 50, 'test');
hero = new player(this, 100, 200, 'plane' );


this.input.on('pointerdown', function (pointer) {

if (pointer.x>400) s+=3;
if (pointer.x<400) s-=3;

            }, this);
 
    }  // create function
//======================================
class player extends Phaser.GameObjects.Sprite{
constructor(scene, x, y , name){

            super(scene, x, y, name);

      this.scene.add.existing(this);
     scene.physics.world.enableBody(this);
    this.body.setGravityY(0);          
          this.body.setCollideWorldBounds(true);
  }
                                             
    update(){
 //this.body.setVelocityX(s);
     this.body.setVelocityY(s);
 //this.body.setGravityY(s) ;        
          }  // update

crashWith (otherobj) {
        var myleft = this.x;
        var myright = this.x + (this.width);
        var mytop = this.y;
        var mybottom = this.y + (this.height);
        var otherleft = otherobj.x;
        var otherright = otherobj.x + (otherobj.width);
        var othertop = otherobj.y;
        var otherbottom = otherobj.y + (otherobj.height);
        var crash = true;
        if ((mybottom < othertop) || (mytop > otherbottom) || (myright < otherleft) || (myleft > otherright)) {
            crash = false;
        }
        return crash;
    }
}    // class
// ========================================
//  ------- update function --------------
function update()
{

    graphics.clear();

    for (i = 0; i < myObstacles.length; i += 1) {
 
        if (hero.crashWith(myObstacles[i])) {
heart--;
if (heart<0)
            return;
        }// if
    } // for
 
    frameNo += 1;
 
    if (frameNo == 1 || everyinterval(150)) {
text.setText([
'ccc'
]);

      //  x = canvas.width;
 myObstacles.push(new component (100, 100, 0xffff00, 600, 80));
}   // if frameno 150


for (i = 0; i < myObstacles.length; i += 1) {
        myObstacles[i].x += -1;
        myObstacles[i].update();
    }// for loop for move objects


//hero.newPos();
hero.update();

text.setText([
             'frameNo: ' + frameNo
                                ]);

text2.setText([
         'h: ' + heart

]);
text3.setText([
         's: ' + s

])
}// uodate function


function component(width, height, color, x, y) {
    this.width = width;
    this.height = height;
    this.color=color;
    this.x = x;
    this.y = y;
    this.update = function() {

         graphics.fillStyle(this.color);

  graphics.fillRect(this.x, this.y, this.width, this.height);
 
    }
}  // component


function everyinterval(n) {
    if ((frameNo / n) % 1 == 0) {return true;}
    return false;
}

    </script>
</body>
</html>
 
آخرین ویرایش:

saalek110

Well-Known Member
تقسیم کدهای برنامه قبلی به فایلهای مختلف:



پسود فایل را به php تغییر دادم..
هدفم این بود که برنانه را چند تکه کنم تا کار بر آن راحت تر باشد و پسوند php را به کار بردم تا کچ نشه.
راه طبیعی اون استفاده از فایلهای با پسوند js است.
در فایل update , تابعی به نام up1 را صدا زدم. در انتهای کدها ، فایل update.php اینکلود شده که شامل تابع up1 است. include از دستورات زبان php است ، پس پسوند فایلها را php کردم.

قبل از اینکه برنامه به این شکل دربیاد وسط فایل که فایلی را اضافه می کردم ، برنامه کار نمی کردم ، پس آخر کدها ، فایل را include کردم.

شما نیازی نیست چنین ساختاری ایجاد کنید. شما با روش خود کار کنید. من برای راحتی خودم این کار را کردم. مبنای ما کدهاست ، حالا در هر فایل و با هر پسوندی باشد. بحث ما بر سر کدهاست، پس می توانید خود را درگیر این نوع فایل سازی نکنید.

محتوای دو فایل مادر و فایل فرزند را گذاشتم. کدها همان کدهای برنانه قبلی است ، فقط کدها در دو فایل تقسیم شده.کدهای دو فایل:

فایل اصلی:
JavaScript:
<!DOCTYPE html>
<html>
<head>
    <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/phaser-arcade-physics.min.js"></script>
</head>
<body>
    <script>
    var config = {
        type: Phaser.AUTO,
        width: 800,
        height: 600,
        physics: {
            default: 'arcade',
            arcade: {
                gravity: { y: 200 }
            }
        },
        scene: {
            preload: preload,
            create: create,
            update : update
        }
    };

    var game = new Phaser.Game(config);
 
 var hero;
var myObstacles = [];
let heart=1000;
 var frameNo=0;
 var graphics;
 var s;
    function preload ()
    {

 this.load.image('plane', '../../assets/sprites/plane.png');
    }

    function create ()
    {
        s=0;
text = this.add.text(10, 10, '', { font: '16px Courier', fill: '#00ff00' });
text2 = this.add.text(200, 10, '', { font: '30px Courier', fill: '#00ff00' });
text3 = this.add.text(400, 10, '', { font: '30px Courier', fill: '#00ff00' });

graphics = this.add.graphics({ lineStyle: { width: 2, color: 0x00ff00 }, fillStyle: { color: 0xff0000 }});

     //const image1=this.add.image(200, 300, 'plane');
//    hero = this.physics.add.existing(new hero(this, 100, 100));
//this.children.add(new hero(this, 164, 250));
hero = new player(this, 100, 200, 'plane' );

//this.add.text(50, 50, 'test');

this.input.on('pointerdown', function (pointer) {

if (pointer.x>400) s+=3;
if (pointer.x<400) s-=3;

            }, this);
 
    }  // create function
//======================================
class player extends Phaser.GameObjects.Sprite{
constructor(scene, x, y , name){

            super(scene, x, y, name);

      this.scene.add.existing(this);
     scene.physics.world.enableBody(this);
    this.body.setGravityY(0);            
          this.body.setCollideWorldBounds(true);
  }
                                               
    update(){
 //this.body.setVelocityX(s);
     this.body.setVelocityY(s);
 //this.body.setGravityY(s) ;          
          }  // update

crashWith (otherobj) {
        var myleft = this.x;
        var myright = this.x + (this.width);
        var mytop = this.y;
        var mybottom = this.y + (this.height);
        var otherleft = otherobj.x;
        var otherright = otherobj.x + (otherobj.width);
        var othertop = otherobj.y;
        var otherbottom = otherobj.y + (otherobj.height);
        var crash = true;
        if ((mybottom < othertop) || (mytop > otherbottom) || (myright < otherleft) || (myleft > otherright)) {
            crash = false;
        }
        return crash;
    }
}    // class
// ========================================

//  ------- update function --------------
function update()
{
up1();
}// uodate function

function component(width, height, color, x, y) {
    this.width = width;
    this.height = height;
    this.color=color;
    this.x = x;
    this.y = y;
    this.update = function() {

         graphics.fillStyle(this.color);

  graphics.fillRect(this.x, this.y, this.width, this.height);
 
    }
}  // component


function everyinterval(n) {
    if ((frameNo / n) % 1 == 0) {return true;}
    return false;
}


</script>
<?php
include"update.php";
?>
</body>
</html>

فایل update.php:


JavaScript:
<?php
?>

<script>


function up1()
{


graphics.clear();

    for (i = 0; i < myObstacles.length; i += 1) {
 
        if (hero.crashWith(myObstacles[i])) {
heart--;
if (heart<0)
            return;
        }// if
    } // for
 
    frameNo += 1;
 
    if (frameNo == 1 || everyinterval(150)) {
text.setText([
'ccc'
]);

      //  x = canvas.width;
 myObstacles.push(new component (100, 100, 0xffff00, 600, 80));
}   // if frameno 150


for (i = 0; i < myObstacles.length; i += 1) {
        myObstacles[i].x += -1;
        myObstacles[i].update();
    }// for loop for move objects


//hero.newPos();
hero.update();

//document.getElementById("the_heart").innerHTML="heart= " + JSON.stringify(heart);

text.setText([
             'frameNo: ' + frameNo
                                ]);

text2.setText([
         'h: ' + heart

]);
text3.setText([
         's: ' + s

]);



}    // loo function
</script>


<?php
?>

در کدهای فایل update.php می بینید که اول و آخر کدها ، تگهای php را باز و بسته کردم. چون پسوند فایل php است این کار را کردم. همچنین اول و آخر فایل تگ script داره.
اینکلود در php این جوریه که انگار کدها میشینن جای کلمه include...پس تگهای script گذاشتم دورش که انگار یک تکه کد جاوا اسکریپت اونجا نشسته ، در انتهای فایل اصلی... و شامل تابع up1 است که تابع update تابع up1 را صدا می زنه.
بعدا میشه فایلها و توابع دیگر اضافه کرد و راه برای توسعه برنامه باز است ، و بزرگی فایل اصلی ، باعث سردرگمی نمیشه.
 
آخرین ویرایش:

saalek110

Well-Known Member

بازی هواپیما و مربع ها.....
ورژن باران اول.
فعلا تنها ورژنی که در این تاپیک شبیه بازی هست همین است.پوشه a3 در پوشه a1


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

JavaScript:
 var r1 = Phaser.Math.Between(1, 10000);
  var r2 = Phaser.Math.Between(1, 500);

if (r1<4)  {
 myObstacles_prize.push(new component (30, 30, 0xffffff, 1200, r2));
}    // if r1<

مربع های جایزه را ساختم که ظهورشان و مکانشان با دو بار راندوم گیری حاصل می شود.

کد حرکت دادن اعضای دو آرایه:
JavaScript:
for (i = 0; i < myObstacles.length; i += 1) {
        myObstacles[i].x += -1;
        myObstacles[i].update();
    }// for loop for move objects

for (i = 0; i < myObstacles_prize.length; i += 1) {
            myObstacles_prize[i].x += -1;
          myObstacles_prize[i].update();
}

کد بررسی برخورد اعضای دو آرایه با هواپیما و افزودن یا کم کردن جون:

JavaScript:
   for (i = 0; i < myObstacles.length; i += 1) {
 
        if (hero.crashWith(myObstacles[i])) {
heart--;
if (heart<0)
            return;
        }// if
    } // for
 //------------
     for (i = 0; i < myObstacles_prize.length; i += 1) {
        if (hero.crashWith(myObstacles_prize[i])) {
            heart+=3;
        }
     }

کد کوچک کردن مربع های سفید:

JavaScript:
    for (i = 0; i < myObstacles_prize.length; i += 1) {
        if (hero.crashWith(myObstacles_prize[i])) {
 if (myObstacles_prize[i].width >1) myObstacles_prize[i].width-=1;
 if (myObstacles_prize[i].height >1) myObstacles_prize[i].height-=1;
            heart+=3; 
        }
     }
 
آخرین ویرایش:

saalek110

Well-Known Member
ورژن رنگ،
و ورژن خنثی یعنی افزایش و کاهش جون نداریم.

افزایش و کاهش جون نداریم.کلا متغیر جون از بازی حذف شد. و نمایش جون هم مسلما ندارد. پس سوختن نداریم.

این ورژن ، ورژن رنگی هم هست، یک بک گراند با رنگ راندوم در پشت صفحه دارد.
ولی حواستون باشه اون عدد رنگ که بالای صفحه نوشته میشه مال رنگ بعدی است، چون صفحات در سمت راست و با فاصله از پنجره ساخته می شوند و تا بیایند داخل مدتی طول می کشد. این جوریه که.... وقتی یک صفحه رنگی بیش از دو سوم صفحه را پر کند ، عدد رنگ عوض میشه و رنگ صفحه بعدی را نشان می دهد.

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


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

saalek110

Well-Known Member
ساخت رنگ راندوم :

در phaser رنگ را این طوری می نویسند 0xffffff یعنی صفر و ایکس و بعدش ۶ تا عدد

در آدرس زیر:


این طوری نوشته:
JavaScript:
const randomColor = "#" + Math.floor(Math.random() * 16777215).toString(16);

برای phaser من این طوریش کردم:
JavaScript:
     col = "0x" + Math.floor(Math.random() * 16777215).toString(16);

عبارت toString(16) گویا به عددی در مبنای ۱۶ تبدیل می کند. اون عدد بزرگ هم احتمالا حداکثر عدد رنگ است .
 
آخرین ویرایش:

saalek110

Well-Known Member
در حالت ۶ رقمی بودن رنگ یعنی این طوری 0x33aaff
Rgb می گن یعنی قرمز ، سبز ، آبی ، red-green-blue
در عدد بالا ۳۳ قرمز اون است و aa سبز اون و ff آبی اون.

اگر سبز و آبی پر باشه فیروزه ای میشه
اگر قرمز و سبز پر باشه زرد میشه.

عبارت rgb hex colors را سرچ کنید و با این رنگها آشنا بشید.

مثلا این سایت:

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

saalek110

Well-Known Member

صفحه بالا ، سایت بازیها خواهد شد...

فعلا لیست بازیها را دارد.
بازیهای ساخته شده با phaser را می خوام جدا بزارم. و الان بازی هواپیما ورژن باران ۱ ، که چند پست قبل ساختیم لینکش هست.

قسمت ثبت نامش فکر کنم فعلا خرابه...
اگر بشه ، می خوام برای ثبت امتیاز بازیها ، سازوکاری بسازم.
 

saalek110

Well-Known Member

این ورژن باران دوم ، بازی هواپیماست.
فرقش اینه که اول بازی با رفرش کردن رنگ پس زمینه را می توانید انتخاب کنید.

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

طرز ساخت:
JavaScript:
var sky ;
var col;
متغیر sky را طبق کد بالا بیرون توابع اول برنامه می افزاییم ، کنار بقیه متغیرها.
متغیر col هم برای نگه داری رنگ است. من فبلا عمومی انتخاب کردم نوعش را تا بتونم عددش را چاپ کنم در برنامه رنگ که قبلا پست زدم. الان هم بهتره عمومی باشه تا بعدا اگر در تابع update خواستیم عددش را چاپ کنیم مانعی نباشد. میدانید که متغیر عمومی ، در همه توابع قابل دسترس است.

JavaScript:
     col = "0x" + Math.floor(Math.random() * 16777215).toString(16);
      sky=new component (900, 900,col, 0,40);

دو خط بالا ، در تابع create افزوده شود. متغیر col را اول برنامه افزوده بودیم.

و کد زیر را به تابع update بیافزایید:
JavaScript:
sky.update();
 
آخرین ویرایش:

saalek110

Well-Known Member
ارتباط دادن php و جاوا اسکریپت با کوکی:


کد ایجاد کوکی توسط php :
JavaScript:
setcookie("heart", $value, time()+10);  /* expire in 10 seconds

کوکی بالا ۱۰ ثانیه دوام میاره، با تغییر اون ۱۰ دوامش بیشتر میشه.

من کدهای جواب به فرم html را قبل تگ html گذاشتم. چون کوکی سازی باید قبل تگ html باشد. تگ زیر:
HTML:
<html>

این هم تابع خوندن کوکی در جاوا اسکریپت:
JavaScript:
              function getCookie(cookieName) {
            let cookies = document.cookie;
           let cookieArray = cookies.split("; ");

      for (let i = 0; i < cookieArray.length; i++) {
                                                  let cookie = cookieArray[i];
                                           let [name, value] = cookie.split("=");

                        if (name === cookieName) {
                                 return decodeURIComponent(value);
                                   }
                              }  return null;
                      }
     let u = getCookie("heart");

طرز کار برنامه:
یک فرم داریم ، که با زدن دکمه اون ، کدهای php برای ذخیره امتیاز بازیکن وارد کار می شوند،
ولی من می خواستم بعد ثبت امتیاز بازیکن به بازی خود ادامه دهد ، پس در قسمت php امتیاز ثبت میشه در کوکی و بعدش که کار قسمت php تمام میشه ، کدهای جاوا اسکریپت از کوکی امتیاز را می خوانند و در متغیر heart می ریزند. ولی ممکن است اول بازی باشد و کوکی خالی باشد...پس من با شرط null نبودن متغیر heart را پر کردم. بنویسید اگر u برابر null نیست . u را بریز در heart.
 
آخرین ویرایش:

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

بالا