Papan kekunci mengawal pergerakan bola
Seperti yang kita semua tahu, animasi yang kita lihat sebenarnya adalah satu siri penukaran pantas imej statik, yang memberikan mata kasar kesan visual "imej bergerak" disebabkan imej selepas visual. Selepas memahami perkara ini, melukis kesan animasi pada kanvas menjadi agak mudah. Kita hanya perlu mengosongkan grafik statik tertentu dahulu, dan kemudian lukis semula di lokasi lain Ulangi ini untuk membuat grafik statik bergerak mengikut trajektori tertentu untuk menghasilkan kesan animasi.
Seterusnya, kami melukis bola padu pada kanvas, dan kemudian menggunakan kekunci anak panah pada papan kekunci untuk mengawal pergerakan bola untuk menghasilkan kesan dinamik. Kod sampel adalah seperti berikut:
Kod JavaScriptSalin kandungan ke papan keratan
-
-
-
"UTF-8"- >
html5 contoh kemasukan bola boleh alih lukisan kanvas
"moveBall(acara)"- >
-
"myCanvas"- lebar=
"400px"- tinggi=
"300px"- style="sempadan: 1px merah pepejal;">
Pelayar anda tidak menyokong teg kanvas.
-
-
"teks/javascript">
//Dapatkan objek Kanvas (kanvas) -
var-
kanvas = document.getElementById("myCanvas");
- //Mewakili kelas sfera
-
fungsi
Bola(x, y ,jejari, kelajuan){ -
ini
.x = x || 10; 🎜> -
ini
-
ini.jejari = radius || 10; >
ini
.kelajuan = kelajuan || 5; 🎜> -
//Naik
-
inifungsi
(){ -
-
iniini
.kelajuan -
jika(ini
.y < .radius){ -
//Cegah melebihi sempadan atas
-
};
//Bergerak ke kanan
-
ini
.moveRight = - fungsi(){
ini
.x = - ini
.kelajuan;
-
var- maxX = canvas.width -
ini- .jejari
jika- (ini.x > maxX){
//Cegah melebihi sempadan yang betul
-
ini.x = maxX;
-
}
-
};
-
-
-
ini.moveLeft = fungsi(){
-
ini.x -= ini.kelajuan
-
jika(ini.x < .radius){
//Cegah melebihi sempadan kiri -
ini- .x = ini.jejari;
}; -
-
- //Bergerak ke bawah
-
ini
.moveDown = - fungsi(){
ini
.y = - ini.laju
var
maxY = canvas.height - - ini.jejari
jika
(- ini.y > maxY){
//Cegah melebihi sempadan bawah
-
ini
.y = maxY; -
};
-
}
-
//Lukis bola -
-
drawBola(bola){
-
jika(
jenis-
ctx != "tidak ditentukan"){
ctx.beginPath();
ctx.arc(ball.x, ball.y, ball.radius, 0, Math.PI * 2,
false-
-
ctx.fill();
}
-
}
-
-
-
fungsi clearCanvas(){
-
jika(jenis ctx != "tidak ditentukan"){
- ctx.clearRect(0, 0, 400, 300);
} -
} -
-
-
var bola = baharu Bola();
//Cukup mengesan sama ada penyemak imbas semasa menyokong objek Canvas untuk mengelakkan ralat sintaks dalam sesetengah penyemak imbas yang tidak menyokong html5 -
jika-
(canvas.getContext){
//Dapatkan objek CanvasRenderingContext2D (berus) yang sepadan -
var-
ctx = canvas.getContext("2d");
drawBola(bola);
}
-
-
-
-
fungsi moveBall(acara){
-
tukar(event.keyCode){
-
kes 37:
-
bola.moveLeft();
-
rehat;
-
kes 38: //Kekunci arah atas
ball.moveUp(); -
-
rehat;
kes-
39: //Kekunci anak panah kanan bola.moveRight();
-
rehat-
;
kes
40: -
//Kekunci anak panah ke bawah
- rehat
;
-
lalai:
//Operasi utama lain tidak bertindak balas -
;
-
}
- clearCanvas();
//Kosongkan kanvas dahulu -
-
drawBall(bola);
-
}
-