canvas绘制“飞机大战”小游戏,真香

从零开始打造HTML5拼图游戏:一个Canvas实战项目 在开始动手之前,我想分享一下为什么选择HTML5 Canvas来开发拼图游戏。相比于传统的DOM操作,Canvas提供了更高效的图形渲染能力和更灵活的像素级控制。对于拼图这种需要处理不规则形状和复杂交互的游戏来说,Canvas无疑是最佳选择。性能优异:即使在移动设备上也能流畅运行视觉效果好:支持不规则拼图形状、平滑动画和精确的图像裁剪交互体验佳:磁性吸附、拖放操作和触摸支持让游戏体验更加友好代码结构清晰:便于理解和扩展。 阅读详情

原文:canvas绘制“飞机大战”小游戏,真香!,点击链接查看更多技术内容。

canvas是ArkUI开发框架里的画布组件,常用于自定义绘制图形。因为其轻量、灵活、高效等优点,被广泛应用于UI界面开发中。

本期,我们将为大家介绍canvas组件的使用。

目录

一、canvas介绍

二、canvas基础绘制方法

三、飞机大战小游戏绘制实践


一、canvas介绍


1.  什么是canvas?


在Web浏览器中,canvas是一个可自定义width、height的矩形画布,画布左上角为坐标原点,以像素为单位,水平向右为x轴,垂直向下为y轴,画布内所有元素的位置基于原点进行定位。

如图1所示,我们通过<canvas>标签,创建了一个width=1500px,height=900px的空白画布,我们还需要“画笔”才能绘制图形。canvas采用轻量的逐像素渲染机制,以JS为“画笔”直接控制画布像素,从而实现图形绘制。

图1 canvas画布

2.  canvas的“画笔”


canvas本身虽不具备绘制能力,但是提供了获取“画笔”的方法。开发者可通过getContext('2d')方法获取CanvasRenderingContext2D对象完成2D图像绘制,或通过getContext('webgl')方法获取WebGLRenderingContext对象完成3D图像绘制。

目前,ArkUI开发框架中的WebGL1.0及WebGL2.0标准3D图形绘制能力正在完善中,所以本文将着重介绍2D图像的绘制。如图2所示,是CanvasRenderingContext2D对象提供的部分2D图像绘制方法,丰富的绘制方法让开发者能高效的绘制出矩形、文本、图片等。

图2 图像绘制方法

另外,开发者还可以获取OffscreenCanvasRenderingContext2D对象进行离屏绘制,绘制方法同上。

当绘制的图形比较复杂时,频繁的删除与重绘会消耗很多性能。开发者可根据自身的需求灵活选取canvas的渲染方式。这时,开发者可以根据自身的需求灵活选取离屏渲染的方式,通过创建OffscreenCanvas对象作为一个缓冲区,然后将需要绘制的内容先绘制在OffscreenCanvas上,最后再将OffscreenCanvas绘制到主画布上,以提高画布性能,确保绘图的质量。

二、canvas基础绘制方法


通过上节对canvas组件的基本介绍,相信大家对canvas组件已经有了一定的认识,下面我们将为大家实际演示canvas组件在ArkUI开发框架中的使用方法。ArkUI开发框架参考Web浏览器中canvas的设计,并在“类Web开发范式”及“声明式开发范式”两种开发范式中进行提供,接下来我们将分别介绍这两种开发范式中canvas的使用。

1.  类Web开发范式中canvas的绘制方法


类Web开发范式,使用HML标签文件进行布局搭建、CSS文件进行样式描述,并通过JS语言进行逻辑处理。目前,JS语言的canvas绘图功能已经基本上完善,下面我们将通过两个示例,展示基于JS语言的canvas组件基础使用方法。

(1)矩形填充

CanvasRenderingContext2D对象提供了fillRect(x, y, width,height)方法,用于绘制一个填充的矩形。如图3所示,在画布内绘制了一个黑色的填充矩形,x与y指定了在canvas画布上所绘制的矩形的左上角(相对于原点)的坐标,width和height则设置了矩形的尺寸。

图3 填充的矩形

示例代码如下:

//创建一个width=1500px,height=900px的画布
<!-- xxx.hml -->
<div>
  <canvas ref="canvas" style="width: 1500px; height: 900px; "></canvas>
</div>

//xxx.js
export default {
  onShow() {
    const el =this.$refs.canvas;
    //获取2D绘制对象
    const ctx = el.getContext('2d');
    //设置填充为黑色
    ctx.fillStyle = '#000000';
    //设置填充矩形的坐标及尺寸
    ctx.fillRect(200, 200, 300, 300);
   }
}


(2)缩放与阴影

CanvasRenderingContext2D对象提供了scale(x,y)方法,参数x表示横轴方向上缩放倍数,y表示纵轴方向上缩放的倍数,值得注意的是缩放过程中定位也会被缩放。如图4所示,是将上个示例中的填充矩形通过 scale(2,1.5)进行缩放,并通过shadowBlur方法加上阴影后的效果。

图4 缩放与添加阴影后的效果

示例代码如下:

//xxx.js
export default {
  onShow() {
    const el =this.$refs.canvas;
    const ctx = el.getContext('2d');
   //设置绘制阴影的模糊级别
    ctx.shadowBlur = 80;
    ctx.shadowColor = 'rgb(0,0,0)';
    ctx.fillStyle = 'rgb(0,0,0)';
    // x Scale to 200%,y Scale to 150%
    ctx.scale(2, 1.5);
    ctx.fillRect(200, 200, 300, 300);
   }
}


2.  声明式开发范式中canvas的绘制方法


声明式开发范式,采用TS语言并进行声明式UI语法扩展,从组件、动效和状态管理三个维度提供了UI绘制能力。目前,eTS语言已经提供了canvas组件绘制能力,但功能仍在完善中。下面我们将通过两个示例,展示声明式开发范式中canvas组件的基础使用方法。

(1)图片叠加

如图5所示,是三张图片叠加的效果,顶层的图片覆盖了底层的图片。通过依次使用drawImage(x,y, width, height)方法设置图片坐标及尺寸,后面绘制的图片自动覆盖原来的图像,从而达到预期效果。

图5 图片叠加

扩展的TS语言采用更接近自然语义的编程方式,让开发者可以直观地描述UI界面,示例代码如下:

@Entry
@Component
struct IndexCanvas1 {
  private settings:RenderingContextSettings = new RenderingContextSettings(true);
//获取绘图对象
  private ctx: RenderingContext = new RenderingContext(this.settings);
//列出所要用到的图片
  private img:ImageBitmap = new ImageBitmap("common/bg.jpg");
  build() {
    Column() {
      //创建canvas
      Canvas(this.ctx)
        .width(1500)
        .height(900)
        .border({color:"blue",width:1,})
        .backgroundColor('#ffff00')
         //开始绘制
        .onReady(() => {
          this.ctx.drawImage( this.img,400,200,540,300);
          this.ctx.drawImage( this.img,500,300,540,300);
          this.ctx.drawImage( this.img,600,400,540,300);
        })
    }
    .width('100%')
    .height('100%')
  }
}


(2)点击创建线性渐变

如图6所示,在画布中是一个线性渐变效果。本示例基于canvas扩展了一个Button组件,通过点击“Click”按钮,触发onClick()方法,并通过调用createLinearGradient()方法,绘制出了一个线性渐变色。

图6 图片上添加文字

示例代码如下:

@Entry
@Component
struct GradientExample {
  private settings: RenderingContextSettings = new RenderingContextSettings(true);
  private context: RenderingContext = new RenderingContext(this.settings);
  private gra: CanvasGradient = new CanvasGradient();
  build() {
    Column({ space: 5 })  {
//创建一个画布
      Canvas(this.context)
        .width(1500)
        .height(900)
        .backgroundColor('#ffff00 ')
      Column() {
//设置按钮的样式
        Button('Click').width(250).height(100).backgroundColor('#000000')
          .onClick(() => {
//创建一个线性渐变色
            var grad = this.context.createLinearGradient(600, 200, 400, 750)
            grad.addColorStop(0.0, 'red');
            grad.addColorStop(0.5, 'white');
            grad.addColorStop(1.0, 'green');
            this.context.fillStyle = grad;
            this.context.fillRect(400, 200, 550, 550);
          })
       }.alignItems(HorizontalAlign.center)
     }
   }
 }


三、飞机大战小游戏绘制实践


如图7所示,是一款“飞机大战”小游戏,通过控制战机的移动摧毁敌机。如何使用ArkUI开发框架提供的canvas组件轻松实现这个经典怀旧的小游戏?实现思路及关键代码如下:

图7 飞机大战小游戏

1. 首先列出游戏所用到的图片。

private imgList:Array<string> = ["xx.png","xx.png"…];


2. 将图片渲染到canvas画布上。

let img:ImageBitmap = new ImageBitmap("图片路径(如common/images)/"+this.imgList[数组下标]);
this.ctx.drawImage( img,150/* x坐标*/,  150/* y坐标*/, 600/*宽*/, 600/*高*/)


3. 绘制背景图片和战机向下移动的效果。

this.ctx.drawImage(this.bg, 0, this.bgY);
this.ctx.drawImage(this.bg, 0, this.bgY - 480);
this.bgY++ == 480 && (this.bgY = 0);


4. 使用Math.round函数随机获取敌机图片并渲染到画布上。并且改变敌机y轴坐标,使它向下运动。

Efight = Math.round(Math.random()*7);
//前七张为敌机图片。
let img:ImageBitmap = new ImageBitmap("common/img"+this.imgList[Efight]);
this.ctx.drawImage(img, 0, this.Eheight + 50);//渲染敌机


5. 在页面每隔120s出现一排子弹,之后减小或增大(x,y)轴的坐标达到子弹射出效果。

let i= 0;
setInterval(()=>{
  this.ctx.drawImage(this.bulImg1,image.x – 10 – (i *10) , image.x + (i *10))
  this.ctx.drawImage(this.bulimg2, this. bulImg1,image.x – (i *10) , i image.x + (i *10))
  this.ctx.drawImage(this.bulimg3, image.x + 10 + (i *10), image.x + (i *10))
i ++;
},120)


6.使用onTouch方法获取战机移动位置,获取拖动的坐标后重新设置战机的图片坐标,使战机实现拖动效果。

.onTouch((event)=>{
  var offsetX = event.localX ||event.touches[0].localX;
  var offsetY = event.localY ||event.touches[0].localY;
  var w = this.heroImg[0].width,
      h = this.heroImg[0].height;
  var nx = offsetX - w / 2,
      ny = offsetY - h / 2;
      nx < 20 - w / 2 ? nx = 20 - w / 2 : nx > (this.windowWidth - w / 2 - 20) ? nx =
  (this.windowWidth - w / 2 - 20) : 0;
  ny < 0 ? ny = 0 : ny > (this.windowHeight - h / 2) ? ny = (this.windowHeight –
  h/2) : 0;
     this.hero.x = nx;
     this.hero.y = ny;
     this.hero.count = 2;


注:本示例引用了部分开源资源:GitHub - xs528/game: canvas实现的飞机大战,感兴趣的开发者可参考此开源资源,结合文中的实现思路补全代码。

以上就是本期全部内容,期待广大开发者能通过canvas组件绘制出精美的图形。更多canvas组件的详细使用方法,可跳转到官网文档(文档中心)进行学习。

(附源码)HTML+JavaScript+Canvas编写2D小游戏 (附源码)使用HTML+JavaScript+Canvas编写2D小游戏。第一次写文章,可能有些地方存在问题,如有不对的地方也请帮忙指出,谢谢。 阅读详情

相关推荐

中秋接月饼: 100行代码实现的canvas小游戏【超精解】

hellow大家好,中秋佳节到了,欢乐度节的同时,技术也要跟上呀,这次我们通过canvas实现一个中秋接月饼的小游戏,三连不迷路哦~

技术圈 618

为了让你们进阶 Canvas,我花 7 小时写了 3 个有趣的小游戏!!!

点击上方前端瓶子君,关注公众号回复算法,加入前端编程面试算法每日一题群前言大家好,我是林三心,相信大家看了我前一篇canvas入门文章为了让她10分钟入门canvas,我熬夜写了3个小项...

我本可以容忍阳光,如果我不曾见过太阳,然而阳光已使我荒凉,成为更新的荒凉。 4658

用canvas画飞机大战(一步步详解附带源代码,源码和素材上传到csdn,可以免费下载)

前端canvas飞机大战,文章里附带源码及步骤详解.源码及图片素材我也上传在csdn,需要的可以免费下载

yf19990720的博客 6684

canvas制作小游戏(欢乐的小鸟)

使用js画布制作小游戏,分为bird、sky、land、pipes、game和渲染页面index模块。

learning_endless的博客 2861

JS五彩连珠小游戏(Canvas绘制)

学习javaScript,当然少不了开发一些有趣的小游戏。 既可以更加熟练操作JS语法,又可以锻炼逻辑思维能力。 今天带给大家的是一款用JS+canvas开发的“五彩连珠小游戏”。相信不用我介绍,大家都知道游戏规则 了吧。

路漫漫其修远兮,吾将上下而求索。 2312

使用Canvas绘制移动端的《飞机大战》小游戏

综上所述,我们使用Canvas绘制了一款简单的《飞机大战》小游戏,并实现了玩家飞机的绘制、用户输入的处理、碰撞检测和游戏循环等基本功能。首先,我们在JavaScript中获取到Canvas元素,并保存为一个变量。例如,可以编写碰撞检测函数来检测玩家飞机和敌机之间的碰撞,并在游戏循环中调用该函数来判断游戏是否结束。首先,我们需要在HTML文件中创建一个Canvas元素,用于绘制游戏场景。除了绘制玩家飞机之外,我们还需要实现敌机和子弹的绘制逻辑。然后,我们可以根据触摸点的位置来更新玩家飞机的位置。

QwwyEmacs_Lisp的博客 272

Canvas 从 0 到 1 -- 开发 2D 游戏《保卫家园》-- 【上篇】

Canvas 是 HTML5 提供的一种新的标签形式 - 画布标签通过名字就不难理解这个标签的意思,就和一张白纸一样,我们想呈现什么样的画面都可以(前提你需要一根画笔 – JavaScript)Canvas 是一个矩形画布,可以使用 JavaScript 在画布上进行作画,控制每一个像素,也就是说他本身不具备绘画功能,是需要 JavaScript 来进行作画的,Canvas 非常的丰富多彩,拥有多种的绘制路径,矩形,图形,字符,图像等等方法,使得 Web 网页更加的美丽。...

世界和我们都不该止步于此 3192

使用Canvas创建的游戏编程案例展示

Canvas是HTML5中的一个重要特性,它提供了一个可以用于绘制图形、动画和游戏的面板。通过Canvas,开发者可以使用JavaScript来控制和绘制图像,实现各种有趣的游戏。下面将展示几个使用Canvas创建的游戏编程案例,帮助你了解如何利用Canvas开发自己的游戏。小球弹跳游戏是一个简单的物理模拟游戏。玩家需要控制小球避开障碍物,让小球在屏幕上弹跳。打砖块游戏是经典的街机游戏之一。弹球游戏是一个简单的物理模拟游戏。玩家需要控制小球避开障碍物,让小球在屏幕上弹跳。

HackSquad的博客 351

使用JS和Canvas做一个html5小游戏_html canvas用javascript制作一款网页游戏(1)

这是游戏的截图:1.有计算抓住的怪物的数量2.有背景,英雄,怪物。

2401_84976170的博客 1636

HTML5 Canvas游戏开发实战指南

HTML5 Canvas提供了一个可以通过JavaScript操作的像素网格,使得开发者能够绘制图形、动画甚至渲染整个游戏场景。它的出现标志着网页图形处理能力的大幅提升,并为网页游戏开发带来了前所未有的自由度。

weixin_42588555的博客 1215

BIOS/UEFI完全指南:从开机自检到超频魔改的底层硬件控制

计算机启动过程始于固件层,其核心是负责硬件初始化与引导的系统软件。传统BIOS基于16位实模式,寻址能力有限,而现代UEFI采用保护模式,支持图形界面与安全启动,实现了从概念到架构的革新。这一演进带来了显著的技术价值:更快的启动速度、更强的安全性以及对大容量存储设备的原生支持。在工程实践中,无论是解决“虚拟化技术禁用”问题、调整内存XMP配置以提升性能,还是为老主板“魔改”添加NVMe支持,都需要深入理解并操作BIOS/UEFI设置。掌握这些底层交互能力,是进行硬件调试、系统优化与故障排查的关键,也是连接抽

weixin_34236869的博客 456

开发一个Canvas小游戏 实现一个游戏“引擎”

渲染器 Renderer 是将 Canvas 对象进行封装,并提供了一些更便捷的方法;照相机 Camera 其实就是一个虚拟的概念,描述了一个正方形的大小宽高,然后让渲染的时候只渲染这个正方形内的内容;实体 Entity 是将游戏里面存着的元素用面向对象的方式来规范了一遍。场景 Scene 就是一些 实体 Entity 的集合。

江拥羡橙的博客 6万+

国内免魔法接入Grok API,打造智能QQ机器人实战指南

大型语言模型(LLM)通过API接口为开发者提供了强大的自然语言处理能力,其核心原理是基于海量数据训练的深度神经网络,能够理解和生成类人文本。这一技术价值在于显著降低了AI应用开发门槛,使开发者无需从零训练模型即可快速集成智能对话、内容生成等功能。在即时通讯、智能客服、自动化工具等应用场景中,LLM API能有效提升交互体验与效率。本文聚焦于如何通过稳定的第三方API服务,绕开网络访问限制,将xAI推出的Grok模型接入国内网络环境,并结合NoneBot2框架与go-cqhttp,实现一个功能完整的智能QQ

weixin_30607125的博客 317

如何用canvas制作一个华容道小游戏(乞丐版)

虽然我有着强烈的制作意愿,但是当初学的unity3D的知识早就还给老师了,而且就我一个人的话,做大型游戏先不说我一个人干不干的过来,首要面对的问题就是,没这个能力你知道吧。于是我想起来了小时候第一次去科技馆,玩的华容道,碰巧之前学过一点canvas,做的话应该是可以做的,虽然我上次用canvas还是在上次,那么......我大抵是废了,横竖都学不进去,上课知识不进脑子,学习光想划水摸鱼,心中仅剩的良知告诉我这样下去是铁定不行的哇,既然学不进去,何不打把游戏,既然要打游戏,为啥不自己写个小游戏嘞?

mhc20201554114的博客 1530

STM32单片机:驱动ADS1115四个通道全开程序

本文介绍了德州仪器(TI)的ADS1115高精度16位模数转换器(ADC)及其应用实现。该芯片具有16位分辨率、可编程增益放大器(PGA)和低功耗特性,支持±0.256V至±6.144V量程。文章提供了完整的C语言驱动代码,包括初始化、配置寄存器读写、单次/连续转换模式设置、电压值读取等功能实现。代码通过I2C接口与ADS1115通信,支持多通道选择和不同PGA设置,可实现高精度模拟信号采集。该方案适用于需要精密测量的嵌入式系统,如传感器数据采集等应用场景。

weixin_42122070的博客 689

VideoPose3D | 环境搭建

文章目录环境要求下载PyTorch基本步骤验证安装问题修复数据集设置Human3.6MCPN detections配置wget命令安装CPN评估环境测试问题测试报错 无法识别参数3 3 3 3卡在最后评估 主要参考:GitHub / facebookresearch / VideoPose3D 环境要求 Dependencies Make sure you have the followin...

D0 8655

canvas游戏开发框架的几点

1 点击时使用canvas离屏绘制,将不同的绘制对象绘制成不同的颜色,然后使用canvas获取点击点像素的颜色.点击点的颜色就是点击对象的颜色,缺点是,(1)如果将某个图像转化为纯色绘制计算量会较大, (2)离屏绘制各个图时,如果绘制的元素较多计算量会较大。即可以使用逆时针移动的四个格子的区域来判断,移动过程中被圈定的像素就是边界像素[[x,y],[x1,y1],[x2,y2],,,], 参考文章:然后提取其中的部分点作为绘制多边形的顶点,即可抽象出图象的父多边形.(pixijs的检测方式)

weixin_42686022的博客 746

Zemax热分析实战:5分钟搞定双胶合透镜温度漂移优化(附操作数详解)

本文详细解析了使用Zemax进行光学系统热分析的全流程,以双胶合透镜为例,重点阐述了如何通过多重结构编辑器模拟温度变化,并利用关键操作数优化系统以抵抗温度漂移。文章提供了从基础设置到高级优化的实战技巧,帮助工程师快速掌握无热化设计方法,确保系统在宽温范围内保持稳定成像性能。

n4o5p6q7r的博客 396

如何使用Canvas制作HTML5游戏

Canvas 是 HTML5 中的一个核心特性,提供了一种绘制图形的 API,可以用来制作各种类型的游戏,包括 2D 和 3D 游戏。在本教程中,我们将使用 Phaser 游戏框架来制作游戏。Phaser 是一个流行的 HTML5 游戏框架,它提供了一系列功能强大的 API,可以帮助我们快速制作游戏。例如,在这个游戏中,我们需要检测玩家是否与敌人相撞,如果相撞了,就需要重新开始游戏。这段代码检测玩家是否到达河岸(`y` 坐标为 0),如果到达了,就给玩家加 1 分,重新开始游戏,并生成新的敌人。

m0_75198698的博客 1401

从模型车到真实路口:基于YOLOv5-Lite与SORT的轻量化车流量检测系统实战

本文详细阐述了如何将基于YOLOv5-Lite与SORT的轻量化车流量检测系统从毕业设计原型部署到真实路口。文章聚焦于解决在嵌入式平台(如树莓派)上实现实时、稳定检测的工程挑战,涵盖数据采集、模型微调、系统集成及动态信号灯策略,为智能交通灯系统提供了实用的轻量化解决方案。

weixin_29179311的博客 125

一篇文章带你搞定数学建模中的线性回归模型(05年长江水质问题示例讲解含代码)

文章目录一、问题分析二、原理讲解三、MATLAB 实现线性回归模型 一、问题分析 根据你的预测分析,如果未来10年内每年都要求长江干流的Ⅳ类和Ⅴ类水的比例控制在20%以内,且没有劣Ⅴ类水,那么每年需要处理多少污水 为了达到题目中所要求的水质,可建立废水排放量与各类水百分比之间的二元线性回归模型,对未来十年的废水排放量进行预测,并确定其与各类水所占百分比之间的函数关系式。通过此关系式,可以计算在这种情况下长江所能承受的最大污水排放量,将这个排放量与预测的排放量进行比较,多出来的部分就是需要每年处理掉的。 二、

南淮北安的博客 2164

[canvas]空战游戏1.18

空战游戏到今天可以玩了,玩法还是方向键(或AWSD)控制飞机位置,空格键开炮,吃五星升级,被敌机打中降级直到击落,与敌机相撞则GG。 点此下载程序1.16版,用CHrome打开index.html试玩。 1.17版改变了敌机的出现位置。 1.18版为了防止居中火力全开模式,将让敌机一次出现两架,出现位置在四分之一和四分之三处,另外敌机子弹也加上了随机的横向速度。 1.19版改变了对象的描绘...

weixin_30794851的博客 179

OpenClaw 开机自启配置:Windows/macOS/Linux 全平台技术指南

OpenClaw 开机自启全平台配置指南 本文提供了在Windows、macOS和Linux系统上配置OpenClaw开机自启的完整技术方案。主要内容包括: Windows配置:提供三种方法(Windows服务、任务计划程序、启动文件夹),详细说明服务脚本创建、服务注册和测试流程 macOS配置:使用LaunchAgent实现开机自启,包含配置文件创建和加载方法 Linux配置:通过systemd服务实现,包括服务单元文件创建和启用步骤 系统要求:明确硬件(64位CPU/4GB内存)和软件(各平台操作系统版

一键难忘的博客 2992

web游戏---canvas基础图形

canvas是H5中新推出的标签,这个提供一块画布,可以在上面绘制图案,通过这种方式制作web游戏带来的性能消耗比操作DOM要小的多。如果知做浏览器游戏,为了保证性能最好使用画布来制作。

m0_66711291的博客 2495

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

使用Vue3 + Canvas 实现塔防小游戏

通过上述步骤,我们成功实现了一个简单的塔防小游戏。我们使用了Vue3和Canvas来实现游戏的UI和逻辑,并且添加了交互功能。希望这篇文章对你有所帮助!

三拾的博客 821

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

2048 js canvas实现2048小游戏及思路

canvas动画原理假设一个元素x轴为0,运动到x = 100这样直接绘制是没有动画的x值递增,x值改变时清除画布再次绘制,x=100时运动结束这就是动画原理。

NEWonclick的博客 1323

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

上一篇: 【视频】设备开发第6期:直连方案集成开发
下一篇: 手把手教你使用HarmonyOS本地模拟器
「已注销」
博客等级 码龄5年 1045粉丝 297原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

「已注销」

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值