实现html5.0 Canvas中的坦克游戏实战指南

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:HTML5.0的Canvas元素支持在网页上绘制动态图形,本项目将演示如何利用Canvas和JavaScript构建一个简单的坦克游戏。游戏中的坦克移动和子弹发射通过监听键盘事件实现,并使用Canvas API绘制坦克与子弹的图形。开发者将了解如何管理游戏对象的状态,并实时更新画布上的表现,从而掌握创建基本2D游戏的基础。 html5.0 Canvas 下的简单坦克移动发射子弹

1. HTML5 Canvas绘图基础

Canvas绘图简介

HTML5 Canvas是Web页面中实现图形绘制的核心元素,它允许开发者使用JavaScript进行绘图操作,从而在网页上创建复杂的动态效果。Canvas提供了一块像素化的绘图区域,通过JavaScript可以绘制文本、图片、图形等元素。

<canvas id="myCanvas" width="200" height="200"></canvas>

Canvas绘图API入门

在开始绘制前,首先需要获取Canvas元素以及绘图上下文(context),通常使用 getContext('2d') 方法获取2D绘图上下文。然后,可以使用一系列的方法来绘制基本图形,如矩形、圆形、路径等。

const canvas = document.getElementById('myCanvas');
const ctx = canvas.getContext('2d');

ctx.fillStyle = "#FF0000"; // 设置填充颜色
ctx.fillRect(10, 10, 100, 100); // 绘制红色矩形

绘制路径和使用样式

要绘制更复杂的图形,可以使用路径API,如 beginPath() , moveTo() , lineTo() , closePath() 等,以及设置图形样式如 fillStyle strokeStyle fill() stroke() 方法用于填充和描边路径。

ctx.beginPath();
ctx.moveTo(50, 50);
ctx.lineTo(150, 50);
ctx.lineTo(100, 150);
ctx.closePath();
ctx.strokeStyle = '#0000FF'; // 设置描边颜色
ctx.stroke(); // 描边路径

通过这种方式,您已经可以使用HTML5 Canvas进行基本的图形绘制。在后续章节中,我们将深入探讨如何实现更复杂的交互和游戏逻辑。

2. JavaScript事件监听与处理

2.1 事件监听机制概述

2.1.1 事件捕获与事件冒泡

在深入探讨事件监听之前,理解事件捕获和事件冒泡是必要的。这两种机制决定了事件在文档树中的传播顺序。

事件捕获: 它描述的是从最顶层的文档对象开始,到事件实际发生的元素上这个过程。在此阶段,事件从Window对象开始,逐步向内层元素传播,直到达到目标元素。这允许开发者在目标元素接收到事件之前拦截事件。

事件冒泡: 与事件捕获相反,事件冒泡是从目标元素开始,逐步向外层元素传播,直到到达Window对象。这意味着,一个位于元素内部的子元素触发的事件,会先在该子元素上处理,然后传递到父元素。这种机制常用于给多个元素绑定相同的事件监听器。

2.1.2 绑定事件监听器的方法

在JavaScript中,有几种方法可以为元素绑定事件监听器,其中最常见的包括使用 addEventListener 方法,以及早期的 attachEvent 方法。

使用 addEventListener 方法,可以以更灵活的方式为元素添加事件监听,它支持绑定多个监听器到同一个元素和事件类型上,且可以分别指定在捕获阶段还是冒泡阶段进行处理。

element.addEventListener('click', handlerFunction, useCapture);

在不支持 addEventListener 的旧版IE浏览器中,通常使用 attachEvent 方法:

element.attachEvent('onclick', handlerFunction);

然而, attachEvent 方法不能指定事件处理是在捕获阶段还是冒泡阶段,并且它也不支持为同一个元素和事件类型添加多个监听器。

2.2 事件处理策略

2.2.1 事件对象的属性和方法

在事件处理函数中,会自动传递一个事件对象 event ,它包含了大量关于事件的详细信息,以及影响事件处理的属性和方法。

  • event.target :指向触发事件的元素。
  • event.currentTarget :指向绑定事件监听器的元素。
  • event.preventDefault() :阻止事件的默认行为。
  • event.stopPropagation() :阻止事件进一步传播。
2.2.2 阻止事件默认行为和冒泡

在某些情况下,你可能希望阻止事件的默认行为或阻止事件冒泡到父元素。

element.addEventListener('click', function(event) {
    event.preventDefault(); // 阻止默认行为
    event.stopPropagation(); // 阻止事件冒泡
});
2.2.3 鼠标和触屏事件

针对鼠标和触屏,有相应的事件类型如 click , dblclick , mousedown , mouseup , mousemove , touchstart , touchmove , touchend 等。这些事件提供了交互的具体细节,例如鼠标的坐标位置,以及触摸事件是否是多点触摸。

element.addEventListener('mousedown', function(event) {
    console.log('Mouse button pressed at position: ', event.clientX, event.clientY);
});

以上代码块展示了如何监听一个元素的 mousedown 事件,并记录下鼠标点击的位置。

在实际的开发过程中,合理使用事件监听与处理机制,可以极大地增强用户交互体验,同时保证了程序对各种事件的灵活应对。对于事件监听与处理机制的更深入了解和实践,将有助于开发者构建更为高效和响应迅速的Web应用。

3. 坦克游戏交互实现

游戏交互是任何游戏能否吸引玩家的关键因素之一。它不仅包括玩家如何操作游戏,也涉及到游戏如何响应玩家的操作。在本章节中,我们将深入探讨如何构建坦克游戏的交互框架,并详细说明如何处理用户输入,以此来实现一个流畅且富有乐趣的游戏体验。

3.1 游戏交互框架构建

构建一个游戏交互框架是确保游戏逻辑正常运行的基础。我们不仅需要初始化游戏并控制游戏状态,还需要创建一个循环来持续更新游戏画面。

3.1.1 游戏初始化流程

初始化是游戏运行的第一步。在这个阶段,我们需要设置Canvas画布,加载游戏资源,并初始化游戏状态。以下是一个基本的初始化流程示例:

// 获取Canvas元素并设置上下文
const canvas = document.getElementById('gameCanvas');
const ctx = canvas.getContext('2d');

// 设置游戏画布尺寸
canvas.width = 800;
canvas.height = 600;

// 加载游戏资源(例如,坦克和子弹的图片)
const tankImage = new Image();
tankImage.src = 'tank.png';

const bulletImage = new Image();
bulletImage.src = 'bullet.png';

// 初始化游戏状态
const gameState = {
  tanks: [],
  bullets: [],
  enemies: [],
  // ...其他游戏状态
};

// 游戏初始化函数
function initGame() {
  // 创建坦克对象并添加到gameState.tanks数组中
  const playerTank = createTank(100, 100);
  gameState.tanks.push(playerTank);
  // 初始化其他游戏元素
  // ...
  // 开始游戏循环
  gameLoop();
}

// 创建坦克的函数
function createTank(x, y) {
  return {
    x,
    y,
    image: tankImage,
    // ...其他坦克属性和方法
  };
}

// 启动游戏
initGame();

3.1.2 游戏循环和状态控制

游戏循环是游戏交互框架的核心。它负责定期更新游戏状态并重绘游戏画面。一个简单的游戏循环可能如下:

function gameLoop() {
  updateGame();
  renderGame();
  requestAnimationFrame(gameLoop);
}

function updateGame() {
  // 更新所有游戏对象的状态
  // 例如:移动坦克,检测碰撞,发射子弹等
  // 更新游戏状态
  // ...
}

function renderGame() {
  // 清除Canvas画布
  ctx.clearRect(0, 0, canvas.width, canvas.height);
  // 绘制所有游戏对象
  // ...
}

// 开始游戏循环
gameLoop();

在上面的代码中, updateGame 函数负责根据时间间隔更新游戏状态,而 renderGame 函数则负责在每次循环时绘制游戏对象到Canvas画布上。

3.2 用户输入处理

用户输入是游戏交互的另一个重要组成部分。为了响应玩家的操作,我们需要监听用户的键盘事件,并解析这些事件以执行相应的游戏逻辑。

3.2.1 键盘事件监听

监听键盘事件能够让我们获取到玩家的具体操作。以下是如何为坦克添加基本的方向控制的示例:

document.addEventListener('keydown', function(event) {
  const playerTank = gameState.tanks[0]; // 假设玩家坦克是数组中的第一个元素
  switch(event.keyCode) {
    case 37: // 左箭头
      // 向左移动坦克
      playerTank.x -= 10;
      break;
    case 38: // 上箭头
      // 向前移动坦克
      playerTank.y -= 10;
      break;
    case 39: // 右箭头
      // 向右移动坦克
      playerTank.x += 10;
      break;
    case 40: // 下箭头
      // 向后移动坦克
      playerTank.y += 10;
      break;
    // ...其他按键操作
  }
});

3.2.2 控制指令的解析和执行

为了提供更丰富的游戏体验,我们可能还需要处理更复杂的指令。下面是一个示例代码,展示如何解析玩家的指令来控制坦克的炮塔旋转,并执行发射子弹的动作:

function processControls() {
  const playerTank = gameState.tanks[0]; // 获取玩家坦克对象
  // 解析指令并更新炮塔方向
  if (/* 条件判断,比如某个按键被按下 */) {
    // 旋转炮塔
    playerTank.turretAngle += 5;
  }
  // 判断是否需要发射子弹
  if (/* 条件判断,比如按下空格键 */) {
    // 创建子弹对象并发射
    const bullet = createBullet(playerTank.x, playerTank.y, playerTank.turretAngle);
    gameState.bullets.push(bullet);
  }
}

function createBullet(x, y, angle) {
  // 根据坦克的位置和炮塔的角度计算子弹的初始位置
  // ...
  return {
    x,
    y,
    angle,
    speed: 10,
    image: bulletImage,
    // ...其他子弹属性和方法
  };
}

// 将此函数调用放入游戏循环中
// updateGame();

在上述代码段中,我们定义了 processControls 函数来监听特定的玩家指令。根据输入的不同按键,我们更新坦克炮塔的方向或创建一个子弹对象并将其加入到子弹数组中,从而实现坦克的控制和射击。

以上内容是本章节的核心部分,分别介绍了如何构建坦克游戏的交互框架,以及如何处理用户输入以实现游戏的动态交互。通过以上示例代码和说明,读者应该对坦克游戏的交互实现有了一个直观和实践的理解。在下一节中,我们将进一步探索如何使用Canvas API来绘制游戏中的图形,包括坦克和子弹。

4. 图形绘制技术实现坦克与子弹

4.1 Canvas绘图基础技术

在HTML5 Canvas上实现复杂的图形绘制,首先需要了解基础的绘图方法。 beginPath() , moveTo() , lineTo() , fill() , stroke() 是实现图形绘制的核心API。

beginPath()

该方法用于开始一个新的绘图路径,或重置当前的路径。调用 beginPath() 后,可以定义新的绘制形状,如线条、矩形、圆弧等。

moveTo()

moveTo() 方法将画布上的路径移动到指定的坐标点,它不会在画布上留下线条,而是作为路径的起点或者当前点移动到指定位置。

lineTo()

使用 lineTo() 方法,可以从当前位置向指定坐标画直线。它与 moveTo() 结合使用,可以绘制封闭图形。

fill()

fill() 方法用于填充当前绘图路径内的图形。当调用 fill() 时,Canvas将自动关闭路径并填充图形。

stroke()

fill() 相对的是 stroke() 方法,它用来绘制图形的轮廓。同样地,它将自动关闭路径并在完成后绘制轮廓。

图形的填充和描边效果

在实际开发中,除了上述基础方法外,我们常常还需要对图形进行填充( fillStyle )和描边( strokeStyle )设置,以及调整线宽( lineWidth )和线帽样式( lineCap )等,来达到预期的视觉效果。

4.2 坦克对象的实现

4.2.1 坦克的属性和方法定义

在坦克游戏开发中,每个坦克对象包含一系列属性和方法,它们定义了坦克的外观、位置、行为和交互。

坦克的属性可能包括: - 位置(x, y坐标) - 方向(角度) - 速度(移动速率) - 坦克模型(图像或形状)

坦克的方法可能包括: - 移动( move ) - 转向( rotate ) - 开火( fire ) - 更新状态( update )

4.2.2 坦克的方向控制与移动逻辑

坦克的方向控制通常通过改变其内部的角度属性来实现。例如,顺时针旋转坦克可以减少角度值,逆时针旋转则相反。

// 坦克旋转方法
function rotate(direction) {
    // direction为正时顺时针旋转,为负时逆时针旋转
    this.angle += direction * 10; // 每次旋转10度
    // 角度归一化到0-360度
    this.angle = (this.angle + 360) % 360;
}

坦克的移动逻辑则涉及到改变其位置坐标。在Canvas中,通常需要使用 translate() 方法来移动绘图原点。

// 坦克移动方法
function move() {
    // 移动绘图原点
    context.translate(this.x, this.y);
    // 根据坦克角度旋转绘图原点
    context.rotate(this.angle * Math.PI / 180);
    // 按照坦克方向移动一定距离
    this.x += Math.cos(this.angle * Math.PI / 180) * speed;
    this.y += Math.sin(this.angle * Math.PI / 180) * speed;
    // 恢复原点位置
    context.translate(-this.x, -this.y);
}

4.3 子弹对象的实现

4.3.1 子弹的属性和方法定义

子弹对象同样有自己的属性和方法,用于定义其状态和行为:

子弹的属性可能包括: - 位置(x, y坐标) - 方向(与坦克同步) - 速度(子弹速率)

子弹的方法可能包括: - 移动( move ) - 碰撞检测( checkCollision ) - 更新状态( update )

4.3.2 子弹的发射逻辑与轨迹模拟

子弹的发射逻辑通常在坦克的 fire() 方法中实现。子弹需要按照坦克当前的方向和速度发射出去。

// 发射子弹方法
function fire() {
    // 创建子弹实例
    const bullet = new Bullet(this.x, this.y, this.angle, speed);
    // 将子弹添加到游戏对象池中,管理其生命周期
    game.bullets.push(bullet);
}

在Canvas中,子弹的移动逻辑会使用与坦克类似的方式,但会有自己的速度和路径。

// 子弹移动方法
function move() {
    // 更新子弹位置
    this.x += Math.cos(this.angle * Math.PI / 180) * this.speed;
    this.y += Math.sin(this.angle * Math.PI / 180) * this.speed;
}

通过结合 requestAnimationFrame 和游戏循环控制,可以实现子弹的连续发射和动态轨迹模拟。

// 游戏循环中的子弹更新逻辑
function gameLoop() {
    // 更新所有子弹状态
    game.bullets.forEach(bullet => bullet.update());
    // 清除画布
    context.clearRect(0, 0, canvas.width, canvas.height);
    // 绘制游戏对象
    drawGameObjects();
    // 循环调用
    requestAnimationFrame(gameLoop);
}

以上便是第四章节:图形绘制技术实现坦克与子弹的详细内容。此章节深入介绍了Canvas绘图技术和游戏对象的实现,为接下来的游戏动态更新和对象管理打下了基础。

5. Canvas上动态更新图形与游戏对象定义

动态图形更新技术是游戏开发中不可或缺的一部分,它涉及到游戏的流畅度和性能优化。接下来,我们将探讨如何在Canvas上动态更新图形,并且介绍在 meObject.js 中对游戏对象进行封装的方法。

5.1 动态图形更新技术

5.1.1 清除画布与重绘

在动画中,每个新的一帧都需要重新绘制所有的对象。为了实现这一点,我们必须在画布上清除旧的图形,然后重绘新的图形。在Canvas中, .clearRect() 函数用于清除指定矩形区域内的内容,重新绘制前应先调用此函数。

function clearCanvas() {
    let canvas = document.getElementById('gameCanvas');
    let ctx = canvas.getContext('2d');
    // 清除整个画布
    ctx.clearRect(0, 0, canvas.width, canvas.height);
}

在每一帧的动画循环中,我们先清除画布,然后重新绘制所有游戏对象。

5.1.2 动画帧率和更新频率控制

控制动画的帧率对于创建一个平滑且性能良好的游戏至关重要。帧率可以使用 requestAnimationFrame() 函数来控制,它提供了一种在浏览器中实现平滑动画的方法。

function updateGameLoop() {
    clearCanvas();
    updateObjects(); // 更新游戏对象状态
    drawObjects();   // 绘制游戏对象

    // 循环调用下一帧
    requestAnimationFrame(updateGameLoop);
}

// 启动游戏循环
updateGameLoop();

此函数会在浏览器准备更新屏幕的时候调用,并且会尽量接近设备的垂直刷新率,从而达到优化性能的效果。

5.2 meObject.js 中的游戏对象封装

meObject.js 是游戏中用于封装和管理游戏对象的核心文件。在这个文件中,我们会实现游戏对象的继承与扩展,以及对象池的设计和管理。

5.2.1 游戏对象的继承与扩展

在JavaScript中,通过使用原型链和类的概念可以实现对象的继承。这里我们使用类的方式来演示如何定义一个基本的游戏对象。

class GameObject {
    constructor(x, y, settings) {
        this.x = x;
        this.y = y;
        this.settings = settings;
    }

    update() {
        // 更新对象状态的逻辑
    }

    draw() {
        // 绘制对象的逻辑
    }
}

class Tank extends GameObject {
    constructor(x, y, settings) {
        super(x, y, settings);
        // 定义坦克特有的属性和方法
    }

    // 重写update和draw方法
    update() {
        super.update();
        // 坦克特有的更新逻辑
    }

    draw() {
        super.draw();
        // 坦克特有的绘制逻辑
    }
}

5.2.2 对象池的实现与优化

对象池是一种优化技术,用于管理大量同类型的对象。它预先创建一定数量的对象实例,并在游戏运行时重复使用这些实例,从而减少垃圾回收和对象创建的开销。

const objectPool = {
    pool: [],
    create: function (ctor, ...args) {
        return this.pool.pop() || new ctor(...args);
    },
    release: function (obj) {
        this.pool.push(obj);
    }
};

5.2.3 实例化对象与管理

在游戏逻辑中,我们会根据需要从对象池中获取坦克和子弹对象,更新它们的状态,并在完成绘制后将它们归还到对象池中。

function spawnTank(x, y) {
    let tank = objectPool.create(Tank, x, y);
    // 初始化坦克的其他属性和方法
    return tank;
}

function spawnBullet(tank) {
    let bullet = objectPool.create(Bullet);
    // 初始化子弹的属性,如方向,速度等
    return bullet;
}

在游戏循环中,对象池中的坦克和子弹通过调用 update() draw() 方法来更新和渲染。一旦子弹完成飞行,或者坦克被销毁,则它们将被返回到对象池中,以便重复使用。

通过上面的章节,我们介绍了如何在HTML5 Canvas上进行动态图形更新以及如何通过 meObject.js 文件对游戏对象进行封装和管理。这些技术是开发一个高效,响应灵敏的游戏所必需的。在后续的文章中,我们将继续深入探讨游戏的优化与性能管理,确保游戏运行流畅且稳定。

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:HTML5.0的Canvas元素支持在网页上绘制动态图形,本项目将演示如何利用Canvas和JavaScript构建一个简单的坦克游戏。游戏中的坦克移动和子弹发射通过监听键盘事件实现,并使用Canvas API绘制坦克与子弹的图形。开发者将了解如何管理游戏对象的状态,并实时更新画布上的表现,从而掌握创建基本2D游戏的基础。

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

第一部分 准备工作篇 第1章 准备工作 / 2 1.1 html5介绍 / 2 1.1.1 什么是html5 / 2 1.1.2 html5的新特性 / 2 1.2 canvas简介 / 5 1.2.1 canvas标签的历史 / 5 1.2.2 canvas的定义和用法 / 6 1.2.3 如何使用canvas来绘图 / 6 1.2.4 canvas的限制 / 7 1.3 开发与运行环境的准备 / 7 1.3.1 浏览器的支持 / 7 1.3.2 准备一个本地的服务器 / 8 1.4 开发工具的选择 / 8 1.5 测试与上传代码 / 12 1.6 javascript中的面向对象 / 13 1.6.1 类 / 13 1.6.2 静态类 / 16 .1.6.3 继承 / 16 1.7 小结 / 17 第二部分 基础知识篇 第2章 canvas基本功能 / 20 2.1 绘制基本图形 / 20 2.1.1 画线 / 20 2.1.2 画矩形 / 22 2.1.3 画圆 / 24 2.1.4 画圆角矩形 / 26 2.1.5 擦除canvas画板 / 27 2.2 绘制复杂图形 / 28 2.2.1 画曲线 / 28 2.2.2 利用clip在指定区域绘 图 / 30 2.2.3 绘制自定义图形 / 31 2.3 绘制文本 / 32 2.3.1 绘制文字 / 32 2.3.2 文字设置 / 33 2.3.3 文字的对齐方式 / 38 2.4 图片操作 / 41 2.4.1 利用drawimage绘制图片 / 41 2.4.2 利用getimagedata和putimagedata绘制图片 / 45 2.4.3 利用createimagedata新建像素 / 47 2.5 小结 / 49 第3章 canvas高级功能 / 50 3.1 变形 / 50 3.1.1 放大与缩小 / 50 3.1.2 平移 / 53 3.1.3 旋转 / 54 3.1.4 利用transform矩阵实现多样化的变形 / 56 3.2 图形的渲染 / 65 3.2.1 绘制颜色渐变效果的图形 / 65 3.2.2 颜色合成之globalcompositeoperation属性 / 67 3.2.3 颜色反转 / 69 3.2.4 灰度控制 / 70 3.2.5 阴影效果 / 71 3.3 自定义画板 / 72 3.3.1 画板的建立 / 72 3.3.2 canvas画布的导出功能 / 79 3.4 小结 / 81 第4章 lufylegend开源库件 / 82 4.1 lufylegend库件简介 / 82 4.1.1 工作原理 / 82 4.1.2 库件使用流程 / 83 4.2 图片的加载与显示 / 84 4.2.1 图片显示举例 / 84 4.2.2 lbitmapdata对象 / 86 4.2.3 lbitmap对象 / 87 4.3 层的概念 / 88 4.4 使用lgraphics对象绘图 / 90 4.4.1 绘制矩形 / 90 4.4.2 绘制圆 / 91 4.4.3 绘制任意多边形 / 92 4.4.4 使用canvas的原始绘图函数进行绘图 / 93 4.4.5 使用lsprite对象进行绘图 / 94 4.4.6 使用lgraphics对象绘制图片 / 95 4.5 文本 / 101 4.5.1 文本属性 / 101 4.5.2 输入框 / 102 4.6 事件 / 103 4.6.1 鼠标事件 / 103 4.6.2 循环事件 / 104 4.6.3 键盘事件 / 105 4.7 按钮 / 106 4.8 动画 / 108 4.9 小结 / 113 第三部分 开发实战篇 第5章 从简单做起—“石头剪子布”游戏 / 116 5.1 游戏分析 / 116 5.2 必要的javascript知识 / 117 5.2.1 随机数 / 117 5.2.2 条件分支 / 117 5.3 分层实现 / 117 5.4 各个层的基本功能 / 119 5.4.1 基本画面显示 / 119 5.4.2 结果层的显示 / 126 5.4.3 控制层的显示 / 127 5.5 出拳 / 129 5.6 结果判定 / 131 5.7 小结 / 137 第6章 开发“俄罗斯方块”游戏 / 138 6.1 游戏分析 / 138 6.2 必要的javascript知识 / 138 6.3 游戏标题画面显示 / 139 6.4 向游戏里添加方块 / 141 6.5 控制方块的移动 / 152 6.5.1 键盘事件 / 152 6.5.2 触屏事件 / 155 6.6 方块的消除和得分的显示 / 157 6.7 小结 / 160 第7章 开发“是男人就下一百层”游戏 / 161 7.1 游戏分析 / 161 7.2 游戏标题画面显示 / 161 7.3 读取图片与背景显示 / 162 7.4 添加一个静止的地板 / 167 7.5 添加游戏主角 / 170 7.5.1 让游戏主角出现在画面上 / 170 7.5.2 通过键盘事件来控制游戏主角的移动 / 177 7.5.3 通过触屏事件来控制游戏主角的移动 / 178 7.6 添加多种多样的地板 / 179 7.6.1 会消失的地板 / 179 7.6.2 带刺的地板 / 181 7.6.3 带有弹性的地板 / 182 7.6.4 向左和向右移动的地板 / 184 7.7 游戏数据的显示 / 187 7.8 游戏结束与重开 / 190 7.9 小结 / 192 第8章 开发射击类游戏 / 193 8.1 游戏分析 / 193 8.2 添加一架可控飞机 / 194 8.2.1 添加一个飞机类 / 194 8.2.2 可控飞机类 / 197 8.3 为飞机添加多样化的子弹 / 203 8.3.1 建立一个子弹类 / 203 8.3.2 单发子弹 / 205 8.3.3 多发子弹 / 207 8.3.4 环形子弹 / 208 8.3.5 反向子弹 / 209 8.4 添加敌机 / 209 8.4.1 建立一个敌机类 / 210 8.4.2 建立一个敌机boss类 / 214 8.5 碰撞检测 / 217 8.5.1 飞机与子弹的碰撞 / 217 8.5.2 我机与敌机的碰撞 / 220 8.6 子弹的变更 / 221 8.6.1 建立一个弹药类 / 222 8.6.2 弹药与我机的碰撞 / 223 8.7 飞机生命值的显示 / 225 8.8 游戏胜利与失败判定 / 226 8.9 小结 / 228 第9章 开发物理游戏 / 229 9.1 box2d简介 / 229 9.2 box2dweb在lufylegend库件中的使用 / 229 9.3 创建各种各样的物体 / 234 9.3.1 矩形物体 / 234 9.3.2 圆形物体 / 237 9.3.3 多边形物体 / 239 9.4 响应鼠标拖拽物体 / 242 9.5 关节(joint) / 243 9.5.1 距离关节(b2distancejointdef) / 243 9.5.2 旋转关节(b2revolutejointdef) / 245 9.5.3 滑轮关节(b2pulleyjointdef) / 247 9.5.4 移动关节(b2prismaticjoint) / 248 9.5.5 齿轮关节(b2gearjoint) / 250 9.5.6 悬挂关节(b2linejoint) / 252 9.5.7 焊接关节(b2weldjoint) / 253 9.5.8 鼠标关节(mouse joint) / 254 9.6 力 / 254 9.7 碰撞检测 / 256 9.8 镜头移动 / 260 9.9 做一个简单的物理游戏 / 263 9.10 小结 / 267 第10章 开发网络游戏 / 268 10.1 http通信 / 268 10.1.1 如何实现http通信 / 268 10.1.2 http通信的弊端 / 275 10.2 socket通信 / 275 10.2.1 区分socket通信和http通信 / 276 10.2.2 服务器端 / 276 10.2.3 客户端 / 281 10.3 利用websocket实现简单的聊天室 / 283 10.4 做一款多人在线的坦克大战 / 293 10.4.1 服务器 / 293 10.4.2 客户端 / 293 10.5 小结 / 307 第四部分 技能提高篇 第11章 提高效率的分析 / 310 11.1 绘图时使用小数的影响 / 310 11.2 drawimage和putimagedata的效率比较 / 311 11.3 区域更新和图片大小对绘图效率的影响 / 311 11.4 图片格式对绘图效率的影响 / 313 11.5 优化代码以提高整体效率 / 314 11.5.1 使用位运算 / 314 11.5.2 少用math静态类 / 316 11.5.3 优化算法 / 319 11.6 小结 / 322 · · · · · · (收起)
HTML5 Canvas游戏开发实战》主要讲解使用HTML5 Canvas来开发和设计各类常见游戏的思路和技巧,在介绍HTML5 Canvas相关特性的同时,还通过游戏开发实例深入剖析了其内在原理,让读者不仅知其然,而且知其所以然。在本书中,除了介绍了HTML5 Canvas的基础API之外,还重点阐述了如何在JavaScript中运用面向对象的编程思想来进行游戏开发。   《HTML5 Canvas游戏开发实战》在介绍每个游戏开发的过程时,都会包括游戏分析、开发过程、代码解析和小结等相关内容,以帮助读者了解每种类型游戏开发的详细步骤,让读者彻底掌握各种类型游戏的开发思想。最后,还通过数据对比分析,指导读者提升程序的性能,写出高效的代码,从而开发出运行流畅的游戏。   《HTML5 Canvas游戏实战》主要讲解使用HTML5 Canvas来发和设计各类常见游戏的思路和技巧,在介绍HTML5 Canvas相关特性的同时,还通过游戏发实例深剖析了其内在原理,让读者不仅知其然,而且知其所以然。在本书中,除了介绍了HTML5 Canvas的基础API之外,还重阐述了如何在JavaScript中运用面向对象的编程思想来行游戏发。   《HTML5 Canvas游戏实战》在介绍每个游戏发的过程时,都会包括游戏分析、发过程、代码解析和小结等相关内容,以帮助读者了解每种类型游戏发的详细步骤,让读者彻底掌握各种类型游戏的发思想。最后,还通过数据对比分析,指导读者提升程序的性能,写出高效的代码,从而发出运行流畅的游戏。 【推荐语】   系统讲解HTML 5 Canvas的基础知识和高级技巧,深剖析源库件lufylegend的原理与使用   以实例为向导,详细讲解射游戏、物理游戏、网络游戏、页面游戏等各类游戏的发思路和技巧 【作者】   张路斌,资深前端发工程师和游戏发工程师,从事Web发和游戏发多年,精通HTML5和Flash等技术。HTML5游戏引擎lufylegend.js的发者,利用HTML5和Flash等技术独立发了大型网页游戏、Flash、多平台游戏三国记系列,以及数十款手机小游戏游戏发经验十分丰富。 前言 为什么要写这本书 读者对象 如何阅读本书 勘误和支持 致谢 第一部分 准备工作篇 第1章 准备工作 第二部分 基础知识篇 第2章 Canvas基本功能 第3章 Canvas高级功能 第4章 lufylegend开源库件 第三部分 开发实战篇 第5章 从简单做起—“石头剪子布”游戏 第6章 开发“俄罗斯方块”游戏 第7章 开发“是男人就下一百层”游戏 第8章 开发射击类游戏 第9章 开发物理游戏 第10章 开发网络游戏 第四部分 技能提高篇 第11章 提高效率的分析 。。。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值