kırmızı kare taşımak için Butonlar:
Kontrol alın
Şimdi kırmızı kare kontrol etmek istiyorum.
Dört düğme, yukarı, aşağı, sola ve sağa ekleyin.
seçilen yönde hareket ettirmeye her düğme için bir fonksiyon yazın.
Iki yeni özelliklerini olun component
yapıcı ve onlara çağrı speedX
ve speedY
. Bu özellikler hız göstergesi olarak kullanılmaktadır.
Bir işlev ekle component
olarak adlandırılan yapıcı, newPos()
kullanır, speedX
ve speedY
bileşenin konumunu değiştirmek için özelliklerini.
newpos işlev bileşenini çekmeden önce updateGameArea fonksiyonu adlandırılır:
Örnek
<script>
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;
}
}
function updateGameArea() {
myGameArea. clear() ;
myGamePiece. newPos() ;
myGamePiece. update() ;
}
function moveup() {
myGamePiece.speedY -= 1;
}
function movedown() {
myGamePiece.speedY += 1;
}
function moveleft() {
myGamePiece.speedX -= 1;
}
function moveright() {
myGamePiece.speedX += 1;
}
</script>
<button
onclick=" moveup() ">UP</button>
<button
onclick=" movedown() ">DOWN</button>
<button
onclick=" moveleft() ">LEFT</button>
<button
onclick=" moveright() ">RIGHT</button>
Kendin dene " Hareket etmeyi kes
İsterseniz siz bir düğmeye bıraktığınızda, kırmızı kare durağı yapabilirsiniz.
0 olarak hız göstergelerini ayarlayacaktır bir işlev ekleyin.
Normal ekranlar ve dokunmatik ekranlar hem başa çıkmak için, her iki cihazlar için kod katacak:
Örnek
function
stopMove() {
myGamePiece.speedX = 0;
myGamePiece.speedY = 0;
}
</script>
<button
omousedown=" moveup() " onmouseup=" stopMove() "
ontouchstart=" moveup() ">UP</button>
<button
omousedown=" movedown() " onmouseup=" stopMove() "
ontouchstart=" movedown() " >DOWN</button>
<button
omousedown=" moveleft() " onmouseup=" stopMove() "
ontouchstart=" moveleft() " >LEFT</button>
<button
omousedown=" moveright() " onmouseup=" stopMove() "
ontouchstart=" moveright() " >RIGHT</button>
Kendin dene " Kontrolör olarak Klavye
Ayrıca klavyede ok tuşlarını kullanarak kırmızı kareyi kontrol edebilirsiniz.
Bir tuşa basıldığında ise denetleyen yöntem oluşturmak ve bu set key
özelliği myGameArea
anahtar koduna nesne. Anahtar serbest bırakıldığında, set key
özelliğini false
:
Ö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);
window.addEventListener('keydown', function (e) {
myGameArea.key = e.keyCode;
})
window.addEventListener('keyup', function (e) {
myGameArea.key = false;
})
},
clear : function(){
this.context.clearRect(0, 0, this.canvas.width, this.canvas.height);
}
}
ok tuşlarından birine basıldığında eğer Sonra kırmızı kare taşıyabilirsiniz:
Örnek
function updateGameArea() {
myGameArea.clear();
myGamePiece.speedX = 0;
myGamePiece.speedY =
0;
if (myGameArea.key && myGameArea.key == 37)
{myGamePiece.speedX = -1; }
if (myGameArea.key &&
myGameArea.key == 39) {myGamePiece.speedX = 1; }
if
(myGameArea.key && myGameArea.key == 38) {myGamePiece.speedY = -1; }
if (myGameArea.key && myGameArea.key == 40) {myGamePiece.speedY = 1; }
myGamePiece.newPos();
myGamePiece.update();
}
Kendin dene " Birden Tuşlar Preslenmiş
Birden fazla anahtar aynı anda basılırsa ne olur?
Yukarıdaki örnekte, bileşen sadece yatay veya dikey olarak hareket edebilir. Şimdi bileşen de çapraz taşımak istiyorum.
Bir oluşturma keys
için dizi myGameArea
nesnesi ve her basıldığında anahtar için bir eleman yerleştirin ve değer vermek true
anahtarı artık basıldığında e kadar, değer değeri olur, doğru kalır false
keyUp olay dinleyicisi işlevinde:
Ö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);
window.addEventListener('keydown', function (e) {
myGameArea.keys = (myGameArea.keys || []);
myGameArea.keys[e.keyCode] = true;
})
window.addEventListener('keyup', function (e) {
myGameArea.keys[e.keyCode] = false;
})
},
clear : function(){
this.context.clearRect(0, 0, this.canvas.width, this.canvas.height);
}
}
function updateGameArea() {
myGameArea.clear();
myGamePiece.speedX = 0;
myGamePiece.speedY =
0;
if ( myGameArea.keys && myGameArea.keys[37] )
{myGamePiece.speedX = -1; }
if ( myGameArea.keys &&
myGameArea.keys[39] ) {myGamePiece.speedX = 1; }
if
( myGameArea.keys && myGameArea.keys[38] ) {myGamePiece.speedY = -1; }
if ( myGameArea.keys && myGameArea.keys[40] ) {myGamePiece.speedY = 1; }
myGamePiece.newPos();
myGamePiece.update();
}
Kendin dene " Bir kontrolör olarak fare imleci kullanarak
Fare imleci kullanarak kırmızı kare kontrol etmek istiyorsanız, bir yöntemi eklemek myGameArea
x ve fare imleci y koordinatlarını günceller nesne :.
Örnek
var myGameArea = {
canvas :
document.createElement("canvas"),
start : function() {
this.canvas.width = 480;
this.canvas.height = 270;
this.canvas.style.cursor = "none"; //hide the original cursor
this.context = this.canvas.getContext("2d");
document.body.insertBefore(this.canvas, document.body.childNodes[0]);
this.interval = setInterval(updateGameArea, 20);
window.addEventListener('mousemove', function (e) {
myGameArea.x = e.pageX;
myGameArea.y = e.pageY;
})
},
clear :
function(){
this.context.clearRect(0, 0, this.canvas.width, this.canvas.height);
}
}
Sonra fare imlecini kullanarak kırmızı kare taşıyabilirsiniz:
Örnek
function updateGameArea() {
myGameArea.clear();
if (myGameArea.x && myGameArea.y) {
myGamePiece.x = myGameArea.x;
myGamePiece.y = myGameArea.y;
}
myGamePiece.update();
}
Kendin dene " Oyun Kontrol Dokunmatik Ekran
Ayrıca dokunmatik ekran üzerinde kırmızı kare kontrol edebilirsiniz.
Bir yöntem ekleme myGameArea
x ve ekran dokunulduğunda burada y koordinatlarını kullanarak nesnenin:
Ö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);
window.addEventListener('touchmove', function (e) {
myGameArea.x = e.touches[0].screenX;
myGameArea.y = e.touches[0].screenY;
})
},
clear : function(){
this.context.clearRect(0, 0, this.canvas.width, this.canvas.height);
}
}
Kullanıcı biz fare imleci için yaptığı gibi aynı kodu kullanarak, ekrana dokunursa Sonra kırmızı kare taşıyabilirsiniz:
Örnek
function updateGameArea() {
myGameArea.clear();
if (myGameArea.touchX && myGameArea.touchY) {
myGamePiece.x = myGameArea.x;
myGamePiece.y =
myGameArea.y;
}
myGamePiece.update();
}
Kendin dene " Tuval üzerine Kontrolörler
Biz de tuval üzerine kendi düğmeleri çizin ve denetleyicileri olarak kullanabilirsiniz:
Örnek
function startGame() {
myGamePiece = new component(30, 30, "red" , 10,
120);
myUpBtn = new component(30, 30,
"blue" , 50, 10);
myDownBtn = new
component(30, 30, "blue" , 50, 70);
myLeftBtn = new component(30, 30, "blue" , 20,
40);
myRightBtn = new component(30, 30,
"blue" , 80, 40);
myGameArea.start();
}
bu durumda, bir bileşen eğer bir düğme dışarı rakamlar yeni bir fonksiyon ekleme, tıklandığında.
Bir fare düğmesi tıklandığında olmadığını kontrol etmek olay dinleyicileri ekleyerek başlayın ( mousedown
and mouseup
) . Dokunmatik ekranlar ile ilgilenmek için, ayrıca ekran tıklandığında olmadığını kontrol etmek olay dinleyicileri eklemek ( touchstart
and touchend
) :
Ö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);
window.addEventListener('mousedown', function (e) {
myGameArea.x = e.pageX;
myGameArea.y = e.pageY;
})
window.addEventListener('mouseup', function (e) {
myGameArea.x = false;
myGameArea.y = false;
})
window.addEventListener('touchstart', function (e) {
myGameArea.x = e.pageX;
myGameArea.y = e.pageY;
})
window.addEventListener('touchend', function (e) {
myGameArea.x = false;
myGameArea.y = false;
})
},
clear : function(){
this.context.clearRect(0, 0, this.canvas.width, this.canvas.height);
}
}
Şimdi myGameArea
nesne bize x- ve tıklama y koordinatlarını söyler özellikleri vardır. Biz tıklama mavi düğmelerinden birini gerçekleştirildi olmadığını kontrol etmek Postadölesan özelliklerini kullanırlar.
Yeni yöntemi denir clicked
bunun bir yöntemdir, component
yapıcı ve bileşen tıklandığında ediliyor eğer denetler.
Gelen updateGameArea
mavi düğmelerinden birine tıklandığında fonksiyonu, biz neccessarry eylemleri:
Örnek
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.clicked = function() {
var myleft = this.x;
var
myright = this.x + (this.width);
var mytop = this.y;
var
mybottom = this.y + (this.height);
var clicked = true;
if
((mybottom < myGameArea.y) || (mytop > myGameArea.y)
|| (myright < myGameArea.x) || (myleft > myGameArea.x)) {
clicked = false;
}
return clicked;
}
}
function
updateGameArea() {
myGameArea.clear();
if (myGameArea.x && myGameArea.y) {
if (myUpBtn.clicked()) {
myGamePiece.y -= 1;
}
if (myDownBtn.clicked()) {
myGamePiece.y += 1;
}
if (myLeftBtn.clicked()) {
myGamePiece.x += -1;
}
if (myRightBtn.clicked()) {
myGamePiece.x += 1;
}
}
myUpBtn.update();
myDownBtn.update();
myLeftBtn.update();
myRightBtn.update();
myGamePiece.update();
}
Kendin dene "