一、小游戏里面的帧循环
1、帧循环简单实现:
import './js/libs/weapp-adapter'
const ctx = canvas.getContext('2d');
let aniId = 0;
let img = new Image();
img.src = 'images/bg.jpg';
function loop(){
ctx.drawImage(
img,
0, 0,
canvas.width, canvas.height
);
window.cancelAnimationFrame(this.aniId)
aniId = window.requestAnimationFrame(loop, canvas);
}
function main(){
aniId = window.requestAnimationFrame(loop, canvas);
}
main();
2、对drawImage()函数的单独小结:
ctx.drawImage(
img,
img_x, img_y, img_width, img_height,
pos_x, pos_y, draw_width, draw_height
);
ctx.drawImage(
img,
pos_x, pos_y, draw_width, draw_height
);
3、程序运行截图:
二、小游戏里的事件触发
1、事件触发的简单实现:
import './js/libs/weapp-adapter'
const ctx = canvas.getContext('2d');
let aniId = 0;
let img = new Image();
img.src = 'images/bg.jpg';
let btnText = '点我显示';
let isTouch = false;
let btnArea = {
startX: 127,
startY: 60,
endX: 247,
endY: 100
}
function drawText(ctx, text = '', x = 0, y = 0, textWidth = 0, font = '华文楷体', color = '#ffffff'){
ctx.fillStyle = color;
let size = parseInt(textWidth / text.length);
font = size + 'px ' + font;
ctx.font = font;
ctx.fillText(text, x, y + size);
}
function drawRect(ctx, x=0, y=0, width=0, height=0, color = '#ffffff'){
ctx.fillStyle = color;
ctx.fillRect(x, y, width, height);
}
function touchEventHandler(e) {
e.preventDefault()
const x = e.touches[0].clientX
const y = e.touches[0].clientY
if (x >= btnArea.startX && x <= btnArea.endX
&& y >= btnArea.startY && y <= btnArea.endY){
if(isTouch == false){
isTouch = true;
btnText = '点我隐藏';
}
else{
isTouch = false;
btnText = '点我显示';
}
}
}
function loop(){
ctx.drawImage(
img,
0, 0,
canvas.width, canvas.height
);
if(isTouch == true){
drawRect(ctx, 40, 200, 300, 200, '#f05b72');
}
drawRect(ctx, 127, 60, 120, 40, '#f47920');
drawText(ctx, btnText, 147, 65, 80, '华文楷体');
aniId = window.requestAnimationFrame(loop, canvas);
}
function main(){
aniId = window.requestAnimationFrame(loop, canvas);
canvas.addEventListener('touchstart', touchEventHandler);
}
main();
2、对addEventListener函数的理解:
canvas.addEventListener('touchstart', touchEventHandler);
canvas.addEventListener('touchstart', touchEventHandler);
canvas.addEventListener('touchstart', touchEventHandler);
3、程序运行截图