HTML5 GAME TUTORIAL(二): Set-up an HTML5 canvas(译)

原文地址:Set-up an HTML5 canvas

用canvas创建HTML5文件。 了解如何缩放画布和执行绘图操作。 在本教程结束时,您可以将第一个图形绘制到屏幕上。

什么是HTML5画布?

当您想使用HTML5制作自己的图像,动画或游戏时,将需要一块画布。 <canvas>标签首先随HTML5简介一起出现。 它是图形的容器,您可以使用JavaScript在其上进行绘制。 您可以绘制形状和路径,也可以绘制文本和图像。

它基本上像<img>标签一样工作,只有您可以自己绘制图像,而不是从外部来源加载图像。 实际上,在大多数现代浏览器中,您甚至可以右键单击canvas元素并保存当前正在显示的图像。 就像是动态图像。

画布将是您游戏中所有绘制操作的核心。 它就像画板一样工作,您可以在其上画图并清除它。 但是与现实生活中的绘画不同,在画布上绘画几乎不需要任何时间。 您可以如此迅速地重复绘制和清除过程,以至于每次绘制之前只要稍微改变一下对象的位置,就可以获得[运动感知](https://psychology.wikia.org/wiki/ Motion_perception)。 这是动画和游戏的基本原理。 您清除前一帧,并连续数百次绘制所有对象更新位置的下一帧。

Draw multiple frames on a canvas

在本教程中,您将从简单开始,并学习有关在画布上绘制单个静态图像的信息。 如果您已经知道该如何做并想跳过,请查看画布动画教程。 下一步马上进行。

创建基本的HTML5文件

在绘制任何类型的图形之前,您必须创建一个基本的HTML5文件。 您必须告诉浏览器如何解释文件及其包含的内容类型。 让我们从下面的代码开始:

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">

        <title>HTML5 Game</title>
        <meta name="description" content="A basic HTML5 game">
        <meta name="author" content="[Your name]">
    </head>
    <body>

        <!--Your canvas will come here -->

        <script>
            // Your script will come here
        </script>
    </body>
</html>

让我们仔细看看:

  • 声明告诉浏览器该页面写入的HTML版本。与旧版本相比,[HTML5 doctype](https://www.w3.org/TR/html5-diff#doctype)简短而简单.
  • <meta >标签和<title>标签描述页面的内容。 Google之类的搜索引擎使用此信息来构建搜索结果。

  • <body >标记内是页面所有真实内容的存储位置。 这也是放置画布的位置。

  • 您可以在<body >标签的末尾看到两个<script>标记。 在这些标记之间是程序将要开始的位置。

您可以复制此代码并将其存储在名为index.html的文件中。 该文件可以由任何浏览器运行,并将显示您新创建的HTML5网页。 太糟糕了,它仍然是完全空白的。 让我们通过添加画布来做些事情。

添加一个canvas元素

现在,直接在<body>标记之后,添加一个<canvas>元素。 这是稍后将绘制游戏图形的地方。

<canvas id="canvas" width="750" height="400" style="border:1px solid lightgrey;">
    Your browser does not support the HTML5 canvas tag.
</canvas>

当您尝试在不支持画布的浏览器中使用画布时,将显示后备内容。

目前,这只是关于缺乏支持的简单信息,但是您可以做一些更奇特的事情。 也许您可以添加画布内容本来的静态图像? 只需将备用内容放在<canvas >标记之间。

缩放画布以适合所有屏幕尺寸

刷新页面时,应该可以看到画布的边框。 元素具有其width和height属性设置。 那就是定义画布,绘图板的大小。 每个绘图操作都将在此坐标空间中执行。

您可以通过在元素上使用标准的CSS来设置宽度和高度百分比来缩放画布的总数。 例如,对元素应用width:100%将拉伸画布以适合最大宽度。 但是所有绘制操作仍将在画布的坐标空间内完成。 绘制时,您将不必考虑画布的实际大小。

这有什么帮助? 这可以帮助你处理分辨率,例如设置为1280x720,就可在更大或更小屏幕的设备上运行该游戏。 编程时,即使当前设备的实际屏幕尺寸远小于或大于1280,x轴的位置也始终是屏幕的右边缘。 画布的缩放会自动调整它的位置。

Canvas is stretched to fit screen size

上面的示例图片中演示了此原理。 圆的位置和大小与屏幕尺寸成比例,但是在您的代码中,圆的坐标将始终设置为(800,300)。

获取画布引用

要执行绘图操作,您需要在代码中有适当的参考来引用画布。 使用以下JavaScript代码展开<script>标签:

<script>
    "use strict";
    let canvas;
    let context;

    window.onload = init;

    function init(){
        // Get a reference to the canvas
        canvas = document.getElementById('canvas');
        context = canvas.getContext('2d');

        draw();
    }
</script>

最重要的步骤在init()函数内部。 通过调用getElementById()查找到画布元素,将画布存储在其中以供以后做为参照。

画布没有可自行绘制的功能,因此需要一个上下文。 调用getContext()从画布检索上下文。 将“2d”作为参数传递以获得CanvasRenderingContext2D对象。 这就是您需要绘制2D对象的上下文。 对于3D,还有其他上下文类型,例如WebGL,但这个不是我们现在所需要的。

进行引用后,draw()函数将调用。在那里,将执行实际的绘制操作。 稍后将实现该功能。

严格模式下的JavaScript

“use strict”指的是浏览器以严格模式运行代码。 这意味着您的代码将得到更严格的验证。 不再允许使用未声明的变量。 这将迫使您编写更简洁的代码,从而防止编码错误。 它是可选的,但建议保留它。在此处了解有关use strict的更多信息。

如何确保元素已加载?

如果在页面加载之前引用画布,即尝试使用不存在的画布。 这将导致提示没有画布元素的错误

要解决此问题,您可以使用onload事件。 加载整个页面后,将触发window.onload事件。 这将确保在执行代码之前页面上的所有元素和资源均可用。 init()函数设置为事件处理程序。 一旦onload事件触发,将调用init(),并且画布将可供引用。

绘制您的第一个图形

难题的最后一部分是draw()函数。 该函数如下所示:

function draw(){

    // Get a random color, red or blue
    let randomColor = Math.random() > 0.5? '#ff8080' : '#0099b0';

    // Draw a rectangle
    context.fillStyle = randomColor;
    context.fillRect(100, 50, 200, 175);
}

在上下文上设置fillStyle,并通过调用fillRect()绘制矩形(如果您想了解有关绘制的更多信息,请查看下一个教程。它将更深入地探讨在画布上绘制图形的主题)

证明它是动态图像

当您将先前的代码添加到index.html文件中并在浏览器中运行该文件时,实际上您会看到在画布上绘制了一些东西。 这是一个大矩形!

在当前代码下,矩形是红色或蓝色。 这是因为每次加载页面时,都会通过使用Math.random()在draw()函数中选择一种新的随机颜色。 选择一种颜色作为填充样式。 您可以尝试刷新此页面几次,然后查看颜色是否已更改。

随机颜色用于证明您没有看到静态图像。 您正在动态绘制自己的图形。 您可以在函数内部修改参数以创建不同大小和颜色的矩形。

下一步是什么?

您已完成本教程,并准备使用自己的HTML5画布。 您现在可以执行自己的绘图操作。 如果您有任何疑问,请随时在评论中提问。

在本系列教程的下一步中,您将了解有关如何使用画布绘制形状,(SVG)路径和文本的更多信息。 之后不久,您将开始移动物体,使物体变得生动。

原文地址:https://www.cnblogs.com/xingguozhiming/p/13887880.html