zoukankan      html  css  js  c++  java
  • 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)路径和文本的更多信息。 之后不久,您将开始移动物体,使物体变得生动。

  • 相关阅读:
    在路上——7月英语
    Today is a special day for English Topic
    三级网络-不单单是学知识
    停下是为了更好的出发
    量变引发质变--【2015年计算机年终总结】
    这个月,小美很忙
    一个人牛逼不如一群人一起牛逼——致我最亲爱的程序员
    掀起你的盖头来--【2015年英语年终总结】
    平凡之路之小美
    小美的猴年年中总结,挪不开眼~
  • 原文地址:https://www.cnblogs.com/xingguozhiming/p/13887880.html
Copyright © 2011-2022 走看看