zoukankan      html  css  js  c++  java
  • HTML5画布游戏基础框架代码解析:屌丝追女神

    本课程介绍基础的HTML5游戏的基础框架代码及其游戏实现演示:屌丝追女神

    最终开发完成的游戏:屌丝追女神

    请使用a,w,s,d键控制灰色游戏元素移动并且靠近红色元素

    相关演示

    生成基础游戏人物图形和游戏背景

    本节轻视频中将介绍如何使用基础的HTML5画布方法,生成游戏背景及其游戏人物,如果你对于HTML5画布不太了解,请参考如下教程:

    HTML5画布Canvas基础入门

    相关演示

    键盘控制屌丝移动和碰撞

     本节将介绍如何控制屌丝移动

    首先将添加如下的键盘事件处理:

    1. //键盘事件处理
    2. addEventListener("keydown",function(e){
    3. keysDown[e.keyCode]=true;
    4. },false);
    5. addEventListener("keyup",function(e){
    6. delete keysDown[e.keyCode];
    7. },false);
     

    以上我们使用keysDown对象来存储用户按键,这样可以组合按键的效果,接下来是具体按键的控制:

    1. //键盘控制效果
    2. var update = function () {
    3. if (87 in keysDown) { // up
    4. ds.y -= ds.speed;
    5. }
    6. if (83 in keysDown) { // down
    7. ds.y += ds.speed;
    8. }
    9. if (65 in keysDown) { // left
    10. ds.x -= ds.speed;
    11. }
    12. if (68 in keysDown) { // right
    13. ds.x += ds.speed;
    14. }
    15. // 判断是否追上女生,即判断是否两个方框重叠
    16. if (
    17. ds.x <= (ns.x + 30)
    18. && ns.x <= (ds.x + 30)
    19. && ds.y <= (ns.y + 30)
    20. && ns.y <= (ds.y + 30)
    21. ) {
    22. reset();
    23. }
    24. };
     

    以上代码中,使用两个绘制正方向的坐标来判断是否重叠,重叠则调用reset方法来重置生成新的“女神”坐标,reset方法如下:

    1. //重新设置女神位置
    2. var reset =function(){
    3. ns.x =20+(Math.random()*(canvas.width -40));
    4. ns.y =20+(Math.random()*(canvas.height -40));
    5. };
     

    最后是游戏主程序,使用javascript的requestAnimation来生成动画,如下:

    1. //游戏主程序,使用requestAnimationFrame生成动画效果
    2. var main =function(){
    3. update();
    4. render();
    5. requestAnimationFrame(main);
    6. };
     

    如果你对requestAnimationFrame使用不是很了解,请参考如下课程:

    使用requestAnimationFrame来实现浏览器的基础动画效果

    相关演示

    添加记分牌和游戏倒计时

    为了统计指定时间内追到的女神,并且添加倒计时,这里我们创建如下方法:

    1. function gameover(){
    2. setTimeout(function(){endflag=true;},10000);
    3. }
    4. //添加倒计时
    5. function countdown(){
    6. var countinterval = setInterval(function(){count--;},1000);
    7. if(count===0){
    8. clearInterval(countinterval);
    9. }
    10. }
     

    以上方法控制10秒内游戏结束,并且控制计分牌的显示

    render方法中,添加如下代码生成记分牌:

    1. var render =function(){
    2. if(bgReady){
    3. ctx.drawImage(bgImage,0,0);
    4. }
    5. drawCharactor(ns.x, ns.y,'eb281d','ffffff');
    6. drawCharactor(ds.x, ds.y,'AAAAAA','ffffff');
    7. //这里添加相关的游戏积分和倒计时
    8. ctx.fillStyle ="rgb(250, 250, 250)";
    9. ctx.font ="18px microsoft yahei";
    10. ctx.fillStyle ='#efb73e';
    11. ctx.textAlign ="left";
    12. ctx.textBaseline ="top";
    13. if(endflag){
    14. ctx.fillText("游戏结束:追上 "+ nsCaught +" 位女神",20,20);
    15. }else{
    16. ctx.fillText("倒计时("+ count +"):已追 "+ nsCaught +" 位女神",20,20);
    17. }
    18. };
     

    这样可以看到倒计时效果,并且10秒倒计时后,游戏结束

    完整的学习课程,请点击如下地址:

    HTML5画布游戏基础框架代码解析:屌丝追女神

  • 相关阅读:
    Hibernate4
    Hibernate3 多对多关系
    Hibernate 二(一级缓存,多表设计之一对多)
    Hibernate 配置文件
    Hibernate 基础解析(Configuration,SessionFactory,Session,Transaction,Query,Criteria)
    struts2 防止表单的重复提交
    struts2 UI标签 和 主题
    struts2 OGNL配和通用标签和其它标签的使用
    struts2 对EL的改变
    struts2 contextMap
  • 原文地址:https://www.cnblogs.com/gbtagscom/p/4991698.html
Copyright © 2011-2022 走看看