飞机大战-1

本文详细介绍了使用HTML5 Canvas元素实现飞机大战游戏的过程,从数据初始化、准备阶段到加载阶段,涉及Canvas绘图、图片加载、游戏状态管理等多个关键步骤。游戏包括生命值、分数显示,背景滚动和logo展示等功能,通过JavaScript进行动态绘制和交互处理。
摘要由CSDN通过智能技术生成

H5实践之飞机大战

1.什么是 Canvas?

HTML5 的 canvas 元素使用 JavaScript 在网页上绘制图像。
画布是一个矩形区域,可以控制其每一像素。
canvas 拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法。

2.如何创建 Canvas 元素

向 HTML5 页面添加 canvas 元素。
规定元素的 id、宽度和高度:

<canvas id="myCanvas" width="200" height="100"></canvas>
3.通过 JavaScript 来绘制
<script type="text/javascript">
var c=document.getElementById("myCanvas");
var cxt=c.getContext("2d");
cxt.fillStyle="#FF0000";
cxt.fillRect(0,0,150,75);
</script>
分析:

1.整个游戏分为:准备阶段,加载阶段,开始阶段,暂停阶段,结束阶段
2.游戏会显示我放飞机生命值以及击败敌方飞机的分数

①数据初始化
// 0. 数据初始化
      var canvas = document.getElementsByTagName("canvas")[0];
      var ctx = canvas.getContext("2d");
      var ready = 0;
      var loading = 1;
      var running = 2;
      var pause = 3;
      var over = 4;
      // 当前游戏阶段的判定
      var state = ready;
      // 游戏生命值
      var life = 3;
      // 游戏分数
      var score = 0;

      // 画布宽高
      var width = 480;
      var height = 852;

②准备阶段
// 1. 准备阶段 ready
      // 1. 绘制运动的背景图片
      // 1.1 创建背景图片对象
      var bg = new Image();
      bg.src = "img/background.png";
      // 1.2 确定当前背景图片的绘制位置、绘制大小的信息
      var bgParam = {
        bg: bg,
        x: 0,
        y: 0,
        width: 480,
        height: 852,
      };

      // 1.3创建一个构造函数  用来实例化背景图片对象
      function Bg(param) {
        this.bg = param.bg;
        this.x = param.x;
        this.y = param.y;
        this.width = param.width;
        this.height = param.height;

        // 交替图片的坐标位置
        this.y1 = -this.height;

        // 1. 绘制
        this.paint = function () {
          ctx.drawImage(this.bg, this.x, this.y, this.width, this.height);
          ctx.drawImage(this.bg, this.x, this.y1, this.width, this.height);
        };
        // 2. 运动
        this.sport = function () {
          this.y += 5;
          this.y1 += 5;

          // 交换图片
          if (this.y >= this.height) {
            this.y = -this.height;
          }
          if (this.y1 >= this.height) {
            this.y1 = -this.height;
          }
        };
      }
      var bgObj = new Bg(bgParam);

 // 2. 绘制logo
      // 2.1 创建logo图片
      var logo = new Image();
      logo.src = "img/start.png";
      // 2.2 定义logo初始化信息
      var logoParam = {
        logo: logo,
        x: 0,
        y: 0,
        width: 400,
        height: 654,
      };
      // 2.3 创建构造函数
      function Logo(param) {
        this.logo = param.logo;
        this.x = param.x;
        this.y = param.y;
        this.width = param.width;
        this.height = param.height;

        // 绘制
        this.paint = function () {
          ctx.drawImage(this.logo, this.x, this.y, this.width, this.height);
        };
      }
      var logoObj = new Logo(logoParam);

      //  点击画布进入到下一个阶段 loading
      canvas.onclick = function () {
        if (state === ready) {
          state = loading;
        }
      };
③加载阶段
// 2. 游戏加载阶段 loading
      // 2.1. 进场图片
      var imgArr = [
        "img/game_loading1.png",
        "img/game_loading2.png",
        "img/game_loading3.png",
        "img/game_loading4.png",
      ];
      var imgLoading = [];
      for (var i = 0; i < imgArr.length; i++) {
        imgLoading[i] = new Image();
        imgLoading[i].src = imgArr[i];
      }
      console.log(imgLoading); //
      // 绘制完进场图片马上进入下一阶段 running

      // 2.3 定义图片信息
      var loadingParam = {
        imgLoading: imgLoading,
        width: 186,
        height: 38,
      };
      function Loading(param) {
        this.imgLoading = param.imgLoading;
        this.width = param.width;
        this.height = param.height;
        this.x = 0;
        this.y = height - param.height;

        // 定义绘制图片的下标
        this.index = 0;

        // 定义一个属性 用来判断定时器的执行次数
        this.time = 0;

        this.paint = function () {
          ctx.drawImage(
            this.imgLoading[this.index],
            this.x,
            this.y,
            this.width,
            this.height
          );
        };
        this.sport = function () {
          this.time++;
          if (this.time % 5 == 0) {
            this.index++;
            if (this.index === this.imgLoading.length) {
              // 绘制图片超过整体数量时 进入到下一个阶段
              state = running;
            }
          }
        };
      }
      var loadingObj = new Loading(loadingParam);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
飞机大战游戏中,我们需要控制我方飞机的移动和攻击敌机,以下是 Python 实现飞机逻辑控制的基本步骤: 1. 导入所需模块:我们需要导入 pygame 模块和 sys 模块,其中 pygame 模块是用于游戏开发的常用模块,sys 模块是用于退出游戏的。 2. 初始化 Pygame:我们需要初始化 Pygame,包括设置窗口大小、标题等。 3. 创建我方飞机:我们需要创建我方飞机,包括设置飞机图片、初始位置等属性。可以使用 Pygame 中的 Surface 对象加载飞机图片。 4. 移动我方飞机:我们需要监听键盘事件,根据按键来控制我方飞机的移动。可以使用 Pygame 中的 Rect 对象来更新飞机位置。 5. 创建敌方飞机:我们需要创建敌方飞机,包括设置敌机图片、初始位置等属性。可以使用 Pygame 中的 Surface 对象加载敌机图片。 6. 移动敌方飞机:我们需要控制敌方飞机的移动,可以使用 Pygame 中的 Rect 对象来更新敌机位置。 7. 实现子弹功能:我们需要创建子弹对象,并控制子弹的移动和碰撞检测。可以使用 Pygame 中的 Rect 对象来更新子弹位置。 8. 实现爆炸效果:当子弹击中敌机或者我方飞机被敌机击中时,需要实现爆炸效果。可以使用 Pygame 中的 Surface 对象加载爆炸效果图片。 9. 实现分数统计和游戏结束:当敌机被击中时,需要增加分数。当我方飞机被击中时,游戏结束。可以使用 Pygame 的 font 模块来显示分数和游戏结束信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值