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);
-
}
-
-
Sila gunakan penyemak imbas yang menyokong HTML5 untuk membuka halaman web berikut untuk melihat kesan sebenar (gunakan kekunci anak panah untuk bergerak):
Gunakan kanvas untuk melukis bola boleh alih- .
- Clown SmileyAnda hanya perlu memahami beberapa API dan kemudian menggunakan parameter animasi yang diperlukan untuk mencipta animasi web yang menarik ini yang boleh bertindak balas kepada pergerakan anda.
Langkah pertama ialah melukis ciri muka
Badut ini tidak mempunyai telinga dan kening, jadi hanya tinggal tiga organ, tetapi kita perlu menarik dua matanya secara berasingan, jadi ada empat bahagian semuanya. Mari kita lihat kodnya dahulu.
Kod untuk melukis mata kiri
Kod JavaScript
Salin kandungan ke papan keratan
-
var leftEye = baharu Kinetic.Line({
-
x: 150,
-
mata: [0, 200, 50, 190, 100, 200, 50, 210],
-
ketegangan: 0.5,
-
ditutup: benar,
-
strok: 'putih',
-
lejangLebar: 10
-
});
Kod untuk melukis mata kanan
Kod JavaScriptSalin kandungan ke papan keratan
-
var rightEye = baharu Kinetic.Line({
-
x: sw - 250,
-
mata: [0, 200, 50, 190, 100, 200, 50, 210],
-
ketegangan: 0.5,
-
ditutup: benar,
-
strok: 'putih',
-
lejangLebar: 10
-
});
Kod untuk melukis hidung
Kod JavaScriptSalin kandungan ke papan keratan
-
var hidung = baharu Kinetic.Line({
-
mata: [240, 280, sw/2, 300, sw-240,280],
-
ketegangan: 0.5,
-
ditutup: benar,
-
strok: 'putih',
-
lejangLebar: 10
-
});
Kod untuk melukis mulut
Kod JavaScriptSalin kandungan ke papan keratan
-
var mulut = baharu Kinetic.Line({
-
mata: [150, 340, sw/2, 380, sw - 150, 340, sw/2, sh],
-
ketegangan: 0.5,
-
ditutup: benar,
-
strok: 'merah',
-
lejangLebar: 10
-
});
Adakah anda berasa kecewa? Ternyata ia hanya beberapa baris kod. Ya, semudah itu saya percaya anda mula yakin bahawa anda boleh menjadi pengaturcara animasi permainan web
Terangkan secara ringkas kod di atas. Kinetik ialah kit alat js yang kami gunakan. Di kepala halaman, kita perlu merujuknya seperti ini:
Kod JavaScriptSalin kandungan ke papan keratan
-
var mulut = baharu Kinetic.Line({
-
mata: [150, 340, sw/2, 380, sw - 150, 340, sw/2, sh],
-
ketegangan: 0.5,
-
ditutup: benar,
-
strok: 'merah',
-
lejangLebar: 10
-
});
Yang lain ialah beberapa perkara utama, keanjalan garisan, warna, lebar, dsb. Ini mudah difahami.
Langkah kedua ialah membuat gambar bergerak
Sebab animasi ini menarik ialah ia boleh bertindak balas kepada pergerakan tetikus anda dan berinteraksi dengan pengguna Ini adalah aspek paling kritikal bagi animasi yang berjaya. Jika diperhatikan dengan teliti, perubahan pada raut wajah badut itu hanyalah perubahan bentuk Mata menjadi lebih besar, mulut menjadi lebih besar, dan hidung menjadi lebih besar satu peralihan. Terdapat beberapa algoritma di dalamnya. Ini adalah bahagian yang paling membimbangkan. Mujurlah, teknologi algoritma ini sangat matang dan tidak memerlukan kita memikirkannya Perpustakaan enjin animasi ini telah merangkum teknologi ini ke dalam antara muka yang sangat mudah dan mudah. Mari kita lihat cara untuk menggerakkan sesuatu.
Animasi mata kiri
Kod JavaScriptSalin kandungan ke papan keratan
-
var leftEyeTween = baharu Kinetik.Tween({
-
nod: leftEye,
-
tempoh: 1,
-
pelonggaran: Kinetic.Easings.ElasticEaseOut,
-
y: -100,
-
mata: [0, 200, 50, 150, 100, 200, 50, 200]
-
});
Animasi mata kanan
Kod JavaScriptSalin kandungan ke papan keratan
-
var rightEyeTween = baharu Kinetic.Tween({
-
nod: rightEye,
-
tempoh: 1,
-
pelonggaran: Kinetic.Easings.ElasticEaseOut,
-
y: -100,
-
mata: [0, 200, 50, 150, 100, 200, 50, 200]
-
});
Animasi hidung
Kod JavaScriptSalin kandungan ke papan keratan
-
var noseTween = baharu Kinetik.Tween({
-
nod: hidung,
-
tempoh: 1,
-
pelonggaran: Kinetic.Easings.ElasticEaseOut,
-
y: -100,
-
mata: [220, 280, sw/2, 200, sw-220,280]
-
});
Animasi mulut
Kod JavaScriptSalin kandungan ke papan keratan
-
var mouthTween = baharu Kinetic.Tween({
-
nod: mulut,
-
tempoh: 1,
-
pelonggaran: Kinetic.Easings.ElasticEaseOut,
-
mata: [100, 250, sw/2, 250, sw - 100, 250, sw/2, sh-20]
-
});
Kod ini sangat mudah dan nama pembolehubah adalah jelas. Ia sepatutnya tidak sukar bagi pengaturcara yang mempunyai sedikit pengalaman untuk memahami kod ini. Pada asasnya setiap kod membolehkan anda memberikan beberapa titik untuk menentukan mod pereputan dan tempoh tindakan animasi.
Kod animasi lengkap
Kod JavaScriptSalin kandungan ke papan keratan
-
-
-
-
-
-
-
"container">
-
"/js/lib/kinetic-v5.0.1.min.js">
-
"tunda">
-
var sw = 578;
-
var sh = 400;
-
var peringkat = baharu Kinetik.Peringkat({
-
bekas: 'bekas',
-
lebar: 578,
-
tinggi: 400
-
});
-
var lapisan = baharu Kinetik.Lapisan({
-
y: -30
-
});
-
-
var leftEye = baharu Kinetic.Line({
-
x: 150,
-
mata: [0, 200, 50, 190, 100, 200, 50, 210],
-
ketegangan: 0.5,
-
ditutup: benar,
-
strok: 'putih',
-
lebar lejang: 10
-
});
-
-
var rightEye = baharu Kinetic.Line({
-
x: sw - 250,
-
mata: [0, 200, 50, 190, 100, 200, 50, 210],
-
ketegangan: 0.5,
-
ditutup: benar,
-
strok: 'putih',
-
lebar lejang: 10
-
});
-
-
var nose = baharu Kinetic.Line({
-
mata: [240, 280, sw/2, 300, sw-240,280],
-
ketegangan: 0.5,
-
ditutup: benar,
-
strok: 'putih',
-
lebar lejang: 10
-
});
-
-
var mulut = baharu Kinetic.Line({
-
mata: [150, 340, sw/2, 380, sw - 150, 340, sw/2, sh],
-
ketegangan: 0.5,
-
ditutup: benar,
-
strok: 'merah',
-
lebar lejang: 10
-
});
-
-
layer.add(leftEye)
-
.tambah(mata kanan)
-
.tambah(hidung)
-
.tambah(mulut);
-
-
peringkat.tambah(lapisan);
-
-
-
-
var leftEyeTween = baharu Kinetic.Tween({ >
- nod: mata kiri,
- tempoh: 1,
- pelonggaran: Kinetik.Pelonggaran.ElastikKeluar,
- y: -100,
- mata: [0, 200, 50, 150, 100, 200, 50, 200]
- });
-
-
var rightEyeTween = baharu Kinetic.Tween({ >
- nod: mata kanan,
- tempoh: 1,
- pelonggaran: Kinetik.Pelonggaran.ElastikKeluar,
- y: -100,
- mata: [0, 200, 50, 150, 100, 200, 50, 200]
- });
-
- var noseTween = baharu Kinetic.Tween({ >
nod: hidung, -
tempoh: 1, -
pelonggaran: Kinetik.Pelonggaran.ElastikKeluar, -
y: -100, -
mata: [220, 280, sw/2, 200, sw-220,280] -
}); -
-
-
var mouthTween = baharu Kinetic.Tween({
nod: mulut, -
tempoh: 1, -
pelonggaran: Kinetik.Pelonggaran.ElastikKeluar, -
mata: [100, 250, sw/2, 250, sw - 100, 250, sw/2, sh-20] -
}); -
-
stage.getContainer().addEventListener(-
'mouseover', fungsi() { 🎜>
leftEyeTween.play();
-
rightEyeTween.play();
-
noseTween.play();
-
mouthTween.play();
-
});
-
-
stage.getContainer().addEventListener(
- 'mouseout', fungsi() { 🎜>
leftEyeTween.reverse();
-
rightEyeTween.reverse();
-
noseTween.reverse();
-
mouthTween.reverse();
-
});
-
-
-
-
-
Sehen Sie sich die Demo an