首页 > 其他分享 >p5.js 到底怎么设置背景图?

p5.js 到底怎么设置背景图?

时间:2023-10-27 22:22:32浏览次数:39  
标签:bg p5 js 加载 背景图 图片

本文简介

点赞 + 关注 + 收藏 = 学会了

《p5.js 光速入门》 里我们学过加载图片元素,学过过背景色的用法,但当时没提到背景图要怎么使用。

本文就把背景图这部分内容补充完整,并且会提到在 p5.js 里使用背景图的一些注意点。



背景图的用法

p5.js 里使用背景图只需做以下几步操作即可。

  1. 使用 loadImage() 加载图片资源。
  2. 使用 background() 设置背景图。
// 创建画布并加载图片
function setup() {
  // 创建一个 500x500 的画布
  createCanvas(500, 500)
  // 加载图片
  let bg = loadImage('../images/bg.png')
  // 设置背景图
  background(bg)
}

上面这种写法是错的!!!


正确的写法是先加载好图片再绘制。

p5.js 官网上的案例是这样写的。

let bg = null

function setup() {
  createCanvas(500, 500)
  // 加载图片
  bg = loadImage('../images/bg.png')
}

function draw() {
  // 将图片添加到背景里
  background(bg)
}

出来的结果是这样

file

在这个例子中,我准备的图片的尺寸是 3073*3072,而画布的尺寸是 500*500。从画布输出的效果可以看出,图片是被百分百展示出来,并没有裁切过。

file

如果画布和背景图的宽高比不一致,画布会被拉伸。

比如

file

let bg = null

function setup() {
  createCanvas(800, 300)
  // 加载图片
  bg = loadImage('../images/bg.png')
}

function draw() {
  // 将图片添加到背景里
  background(bg)
}

由此可见,使用 background() 设置背景图,图片会根据画布的宽高自动拉伸适配。

而使用 image() 方法渲染图片的时候默认是按照图片自身的尺寸进行渲染。

这是两者之间的不同。



更优的写法

结合前面的几个例子,可能有工友会有点疑问。

为什么在 setup() 里一次性把图片加载并添加到背景是错误的写法呢?

因为图片作为一种资源文件加载肯定是需要时间的,在没加载完就使用的话会比较容易出问题。

所以在 p5.js 官网的例子中,会在 setup() 里加载图片资源,然后在 draw() 里再把图片绘制出来。

但其实还有更安全的写法。

p5.js 提供了一个 preload() 的生命周期,这个生命周期的执行时间比 setup() 要早。preload() 通常用作资源加载,比如需要加载图片或者视频的时候会写在这里。

let bg = null

function preload() {
  // 加载图片
  bg = loadImage('../images/bg.png')
}

function setup() {
  // 创建画布
  createCanvas(500, 500)
}

function draw() {
  // 将图片添加到背景里
  background(bg)
}

以上就是本期的所有内容,关于 p5.js 生命周期方面的知识还不太了解的工友可以看看 《p5.js 光速入门》



推荐阅读

标签:bg,p5,js,加载,背景图,图片
From: https://www.cnblogs.com/k21vin/p/17793263.html

相关文章

  • 第 12 节 JSON应用
    认识JSONJSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式,它基于ECMAScript的一个子集,用于存储和交换文本信息。JSON使用JavaScript的语法描述和操纵数据,但它是Python、Java、C++和其他许多编程语言的一个子集。JSON的特点:语法简单:JSON使用易于阅读的键值对形式表示数......
  • 新人报道+js批量混淆
    做过游戏开发很多年,现在转型做展厅UI和中控开发,技术栈包括flashunityH5pythonc#wpf 今天分享一个js项目批量混淆的脚本@echooff::设置压缩JS文件的根目录,脚本会自动按树层次查找和压缩所有的JSSETJSFOLDER=laya\assets2\jsecho正在查找JS文件chdir/d%JSFOLDER%for......
  • js的对像及数据及数据类型的转换
    varcat={'color':'blank','name':'加菲猫','bland':'波斯猫','eat':function(){console.log('我能吃肉');},'drunk':functi......
  • 如何使用nodejs对接【企查查开放平台API服务】
    下面分享一下如何对接企查查API接口相关内容。API服务对接流程:1、登录|注册:先打开企查查开放平台网站(https://openapi.qcc.com),菜单栏中右上角【登录|注册】;2.打开API服务列表通过顶部导航菜单【API】,可以查看所有服务列表,里面包含了很多API接口,此处不具体介绍,有兴趣的可以自己......
  • vite.config.js配置详解
    import{fileURLToPath,URL}from'node:url'import{defineConfig}from'vite'importvuefrom'@vitejs/plugin-vue' exportdefaultdefineConfig({   //根路径,也就是项目的基础路径   base:'/',   //服务器配置   server:{       /......
  • P5108 仰望半月的夜空
    Day\(\mathbbP_1^2+\mathbbP_2^2+\mathbbP_3^2\)。不考虑左端点最小,如何求出一个字典序最小子串,只需要建出后缀数组后找最小的\(i\)满足\(n-\text{sa}_i+1\geL\),然后取\(S[\text{sa}_i,\text{sa}_i+L-1]\)即可。现在的问题在于可能存在一个\(j>i\)使得\(S[\tex......
  • Fabric.js 使用自定义字体
    本文简介点赞+关注+收藏=学会了如果你使用Fabric.js做编辑类的产品,有可能需要给用户配置字体。这次就讲讲在Fabric.js中创建文本时怎么使用自定义字体、在项目运行时怎么修改字体、以及推荐一个精简字体库的工具。学习本文前,你必须有一点Fabric.js的基础,如果没......
  • 我与Vue.js 2.x 的七年之痒
    ——过去日子的回顾(这是个副标题)——其实这是篇广告软文(这是个副副标题) 以下是一些牢骚和感悟,不感兴趣的可以滑倒最下面,嘻嘻。每每回忆起从前,就感觉时间飞逝,真切的感受到了那种课本中描述的白驹过隙。和很多人发生的,经历的很多事情,就好像昨天一样,但是仔细的思......
  • Django和Vue.js是两种不同的框架,它们各自有自己的特点和用途¹。 **Django**¹: - Dja
    Django和Vue.js是两种不同的框架,它们各自有自己的特点和用途¹。**Django**¹:-Django是一个开放源代码的PythonWeb应用框架¹。-它采用了MTV(模型,视图,模板)的软件设计模式¹。-Django可以方便、快捷地创建高品质、易维护、数据库驱动的应用程序¹。-Django还包含许多功能......
  • js rsa
    $0=undefined;varpy="0123456789abcdefghijklmnopqrstuvwxyz";functionv0(t){returnpy.charAt(t)}functionhy(t,e){returnt&e}functionvs(t,e){returnt|e}functionxc(t,e){returnt^e}functionwc(t,......