En son web geliştirme öğreticiler
 

HTML Oyun Engeller


kırmızı kare taşımak için Butonlar:







Bazı engeller ekle

Şimdi bizim oyuna som engelleri eklemek istiyorum.

oyun alanına yeni bir bileşenini ekleyin. o, 10px geniş, yeşil 200px yüksek olun ve aşağı bunu sağa 300px ve 120px yerleştirin.

Ayrıca her karede engel bileşenini güncelleyin:

Örnek

var myGamePiece;
var myObstacle;

function startGame() {
    myGamePiece = new component(30, 30, "red" , 10, 120);
    myObstacle = new component(10, 200, "green" , 300, 120);
    myGameArea.start();
}

function updateGameArea() {
    myGameArea.clear();
    myObstacle.update();
   
myGamePiece.newPos();
    myGamePiece.update();
}
Kendin dene "

Bir Engeli Hit = Oyun Bitti

Eğer engel vurduğunda Yukarıdaki örnekte, hiçbir şey olmaz. Bir oyunda, o çok tatmin edici değil.

Bizim kırmızı kare engel vurduğunu nasıl biliyoruz?

Bileşen yapıcısı yeni bir yöntem oluşturun olduğunu chekcs başka bileşenle bileşen çöker. Bu yöntem her seferinde çerçeveleri güncellemeleri, saniyede 50 kez çağrılmalıdır.

Ayrıca ekleme stop() yöntemi myGameArea 20 milisaniye aralık temizler nesne.

Örnek

var myGameArea = {
    canvas : document.createElement("canvas"),
    start : function() {
        this.canvas.width = 480;
        this.canvas.height = 270;
        this.context = this.canvas.getContext("2d");
        document.body.insertBefore(this.canvas, document.body.childNodes[0]);
        this.interval = setInterval(updateGameArea, 20);
    },
    clear : function() {
        this.context.clearRect(0, 0, this.canvas.width, this.canvas.height);
    } ,
    stop : function() {
        clearInterval(this.interval);
    }
}

function component(width, height, color, x, y) {
    this.width = width;
    this.height = height;
    this.speedX = 0;
    this.speedY = 0;
    this.x = x;
    this.y = y;
    this.update = function() {
        ctx = myGameArea.context;
        ctx.fillStyle = color;
        ctx.fillRect(this.x, this.y, this.width, this.height);
    }
    this.newPos = function() {
        this.x += this.speedX;
        this.y += this.speedY;
    }
    this.crashWith = function(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;
    }
}

function updateGameArea() {
    if (myGamePiece.crashWith(myObstacle)) {
        myGameArea.stop();
    } else {
        myGameArea.clear();
        myObstacle.update();
        myGamePiece.newPos();
        myGamePiece.update();
    }
}
Kendin dene "

hareketli Engel

statikse zaman engel hiçbir tehlike olduğunu, bu yüzden bunun taşımak istiyorum.

Mülkiyet değerini değiştirin myObstacle.x her güncelleme esnasında:

Örnek

function updateGameArea() {
    if (myGamePiece.crashWith(myObstacle)) {
        myGameArea.stop();
    } else {
        myGameArea.clear();
        myObstacle.x += -1;
        myObstacle.update();
        myGamePiece.newPos();
        myGamePiece.update();
    }
}
Kendin dene "

Birden Engeller

Nasıl birden engelleri eklemeye ne dersiniz?

Bunun için sayma çerçeveler için bir özellik ve belirli bir kare hızında şey yürütmek için bir yöntem gerekir.

Örnek

var myGameArea = {
    canvas : document.createElement("canvas"),
    start : function() {
        this.canvas.width = 480;
        this.canvas.height = 270;
        this.context = this.canvas.getContext("2d");
        document.body.insertBefore(this.canvas, document.body.childNodes[0]);
        this.frameNo = 0;        
        this.interval = setInterval(updateGameArea, 20);
    },
    clear : function() {
        this.context.clearRect(0, 0, this.canvas.width, this.canvas.height);
    },
    stop : function() {
        clearInterval(this.interval);
    }
}

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

mevcut framenumber verilen aralık ile aynı olup olmadığını everyinterval işlevi doğru döndürür.

Birden engeller tanımlamak için, ilk olarak bir dizi olarak engel değişkeni bildirin.

İkincisi, biz updateGameArea fonksiyonunda bazı değişiklikler yapmanız gerekir.

Örnek

var myGamePiece;
var myObstacles = [];

function updateGameArea() {
    var x, y;
    for (i = 0; i < myObstacles.length; i += 1) {
        if (myGamePiece.crashWith(myObstacles[i])) {
            myGameArea.stop();
            return;
        }
    }
    myGameArea.clear();
    myGameArea.frameNo += 1;
    if (myGameArea.frameNo == 1 || everyinterval(150)) {
        x = myGameArea.canvas.width;
        y = myGameArea.canvas.height - 200
        myObstacles.push(new component(10, 200, "green" , x, y));
    }
    for (i = 0; i < myObstacles.length; i += 1) {
        myObstacles[i].x += -1;
        myObstacles[i].update();
    }
    myGamePiece.newPos();
    myGamePiece.update();
}
Kendin dene "

Gelen updateGameArea bir çarpışma varsa işlevin her engele döngü görmek gerekir. Bir kilitlenme varsa, updateGameArea fonksiyonu durdurur ve artık çizim yapılır.

updateGameArea fonksiyon çerçeveleri sayar ve her 150 çerçeve için bir engel ekler.


Rastgele Boyutu Engeller

kırmızı kare yukarı ve aşağı hareket etmek çökme gerektiğini bu yüzden, rastgele boyutlarda engeller içinde göndereceğiz, oyun biraz daha zor ve eğlenceli yapmak için.

Örnek

function updateGameArea() {
    var x, height, gap, minHeight, maxHeight, minGap, maxGap;
    for (i = 0; i < myObstacles.length; i += 1) {
        if (myGamePiece.crashWith(myObstacles[i])) {
            myGameArea.stop();
            return;
        }
    }
    myGameArea.clear();
    myGameArea.frameNo += 1;
    if (myGameArea.frameNo == 1 || everyinterval(150)) {
        x = myGameArea.canvas.width;
        minHeight = 20;
        maxHeight = 200;
        height = Math.floor(Math.random()*(maxHeight-minHeight+1)+minHeight);
        minGap = 50;
        maxGap = 200;
        gap = Math.floor(Math.random()*(maxGap-minGap+1)+minGap);
        myObstacles.push(new component(10, height, "green" , x, 0));
        myObstacles.push(new component(10, x - height - gap, "green" , x, height + gap));
    }
    for (i = 0; i < myObstacles.length; i += 1) {
        myObstacles[i].x += -1;
        myObstacles[i].update();
    }
    myGamePiece.newPos();
    myGamePiece.update();
}
Kendin dene "