前端答题⼩游戏_canvas写个简单的⼩游戏
之前在HTML5 Canvas属性和⽅法汇总⼀⽂中,介绍过Canvas的各种属性以及⽅法的说明,并列举了⾃⼰写的⼀些Canvas demo,接下来开始写⼀个简单的⼩游戏吧,有多简单,这么说吧,代码不到100⾏,先上效果图:
左侧为我们控制的控制板,右侧为假想的电脑控制的控制板
初始化
⾸先在html页⾯中添加中添加⼀个canvas元素,并给出⼀个id⽤于在js代码中获取该元素并对其进⾏操作
然后就是对各种参数,注释中都有给出,我就不多说了,直接看
//获取canvas元素以及2d绘图环境c,以及设置canvas宽⾼为800x600
var canvas = ElementById("canvas"),
c = Context("2d"),
canvas动画W = canvas.width = 800,
H = canvas.height = 600;
var ballX = W / 2, ballY = H / 2, ballR = 10, ballVx = 10, ballVy = 2, //球的位置、半径以及在X轴及Y轴的速度
panelW = 10, panelH = 100, panel1Y = (H - panelH) / 2, panel2Y = (H - panelH) / 2, //控制板的宽⾼以及初始位置
player1Score = 0, player2Score = 0, winnerScore = 3, //记录玩家的分数以及得了多少分算赢
isEnd = 0; //判断是否⽐赛结束的变量,0为未结束,1为已结束
封装⼯具⽅法
//绘制长⽅形(也就是控制板)
function fillRect(x, y, w, h, style) {
c.fillStyle = style;
c.fillRect(x, y, w, h);
}
//绘制圆(也就是游戏中的球)
function fillCircle(x, y, r, style) {
c.fillStyle = style;
c.beginPath();
c.arc(x, y, r, 0, Math.PI * 2);
c.fill();
}
//绘制⽂字(得分和显⽰输赢)
function fillText(txt, x, y, font, style) {
c.fillStyle = style || "white";
c.font = font || "40px DejaVu Sans Mono";
c.fillText(txt, x, y);
}
添加事件
我们需要在canvas元素上添加监听事件,⼀是当结束的也就是isEnd为1的时候,当⿏标点击在canvas上的时候再来⼀把游戏,重置玩家分数以及重启动画绘制,⼆是我们需要控制左侧控制板的运动,不过只需要在Y轴运动即可
canvas.addEventListener("click", function () {
if (isEnd) {
player1Score = 0;
player2Score = 0;
isEnd = 0;
animate(); //主要的绘制⽅法
}
});
//获取⿏标在canvas上实际Y轴位置减去控制板的⾼度也就是控制板实际绘制的初始位置
canvas.addEventListener("mousemove", function (e) {
panel1Y = e.clientY - BoundingClientRect().top - panelH / 2;
});
边界判断
//球边界判断
if (ballX - ballR - panelW < 0) {
if (ballY > panel1Y && ballY < panel1Y + panelH) {
ballVx = -ballVx;
ballVy = (ballY - (panel1Y + panelH / 2)) * .3;
} else {
player2Score++;
ballReset();
}
}
if (ballX + ballR + panelW > W) {
if (ballY > panel2Y && ballY < panel2Y + panelH) {
ballVx = -ballVx;
ballVy = (ballY - (panel2Y + panelH / 2)) * .3;
} else {
player1Score++;
ballReset();
}
}
if (ballY + ballR < 0 || ballY - ballR > H) {
ballVy = -ballVy;
}
//⽤于控制右侧控制板的运动
if (panel2Y + panelH / 2 < ballY - 40) {
panel2Y = panel2Y + 5;
} else if (panel2Y + panelH / 2 > ballY + 40) {
panel2Y = panel2Y - 5;
}
执⾏动画
我这⾥直接在animate⽅法⾥使⽤requestAnimationFrame(animate),更兼容的⽅法应该是以下这样,为了偷个懒就没写兼容写法
var RAF = (function () {
questAnimationFrame || window.webkitRequestAnimationFrame || RequestAnimationFrame || window.msRequestAnimationFrame || window.oRequestAnimationFrame || function (callback) {
window.setTimeout(callback, 1000 / 60);
}
})();
RAF(animate);
到此,该⼩游戏的介绍到此结束,简单吧
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论