PixiJS 修炼指南 - 01. 启程_世界时讯

2023-03-31 21:23:38 来源: 腾讯云

简介

什么是 PixiJS

PixiJS 是一个使用便捷且高效的2D渲染引擎——没错,它不是大而全的游戏引擎,而是更轻量的渲染引擎。

这也使得它更专注于做好高效的2D渲染工作,给予WebGL高效渲染,实现上万对象渲染的粒子效果;同时也提供了更高的自由度,可用于做任何游戏类型的渲染层,甚至仅仅用于宣传页面的2D动画绘制。

同时,作为渲染引擎,它又比纯粹的 Canvas 使用起来更为便捷,可以直接通过操作 SpriteContainerGraphics等对象的属性完成画面中渲染效果的更新。


(相关资料图)

这样轻量易上手而又高效的渲染引擎,对于快速搭建轻量级的H5小游戏或者游戏 demo 来说可谓再合适不过。

而且,从2014年10月的第一个版本发布至今已过去近十年,仍然在不断更新迭代。2022年的 PixiJS v6 开始更是提供了 TypeScript 的支持,提供了内部对象更加方便的智能提示支持,也让大型项目使用 TS 开发后更加规范和可维护。最新的 v7 更是抛弃了各种历史包袱,更新到了现代化的前端项目生态,并且改进了一些历史 API(比如 interactive),提供新的更深入优化项目性能的能力。

对于诸如骨骼动画、游戏滤镜、物理引擎、跨平台框架等需求,PixiJS 也有各种第三方工具、插件的支持,可扩展性也十分优秀。

为什么写这篇文章

这样优秀的工具,却可能因为官方团队人力有限无暇顾及文档维护,或是觉得都是基本的开发概念不需要再重新写文档赘述,官方的文档较为简陋,基本只是罗列 API 的参考手册。

对于之前没太多了解的新同学来说,上手可能要走不少弯路。

于是就想在个人学习的笔记基础上,梳理一个从基础概念开始的学习流程供大家参考,希望能对有需要的同学有所帮助。

搭建项目

首先,我们来搭建一个使用 PixiJS 渲染的游戏项目。

方法 1. 静态引用 dist 资源

如果只是想快速体验,可以参考官方文档指南,在页面内通过 <script>标签引入 PixiJS 的 dist 文件后,直接在静态项目内体验使用 PixiJS:

<script src="https://pixijs.download/release/pixi.js"></script><script>  const { Application } = window.PIXI;  const app = new Application({    width: 640,    height: 360,    backgroundColor: 0x6495ed,  });  document.body.appendChild(app.view);</script>

这一方式的优点是快速可用。

但缺点也很明显,没有构建环境的支持无法使用 TypeScript 等相关能力,也不具备 Tree Shaking 优化项目产物大小等前端构建项目的常用特性。

方法 2. 基于 npm 包构建(推荐)

这一途径则是在现有的前端构建项目中,通过 npm/pnpm 安装 PixiJS,再 import 需要的模块到页面内进行开发。

优点是可以完整地使用所有 PixiJS 应有的能力,以及前端构建项目所具有的所有便捷特性。缺点是搭建最初的项目结构稍微需要花一点时间。

推荐使用 Vite 创建一个基本的 Vanilla + TypeScript 项目,再安装 pixi.js和几个常用的 PixiJS 基本子包:

$ npm create vite@latest my-pixi-demo$ cd my-pixi-demo$ npm install -S pixi.js @pixi/utils

然后清空项目的入口脚本(一般为 src/main.ts),修改为:

import { Application } from "pixi.js";const app = new Application({  width: 640,  height: 360,  backgroundColor: 0x6495ed,});document.body.appendChild(app.view as HTMLCanvasElement);

启动开发构建服务:

$ npm run dev

点击打开出现的开发预览页面链接,不出意外的话,就能看到游戏的画布出现在浏览器内了。

开始工作

创建成员

刚才我们搭建完项目后,创建了一个 PixiJS 提供的 Application对象,它就是我们开发的 游戏应用了。

只不过目前它里面空空如也,只是绘制了一个指定背景色和宽高尺寸的空画布。

接下来我们就要往里面加入各种成员,让它热闹起来。

import {  Application,  Graphics,  Sprite,  Text,} from "pixi.js";const app = new Application({  width: 640,  height: 360,  backgroundColor: 0x6495ed,});document.body.appendChild(app.view as HTMLCanvasElement);// 创建文本成员const slogan = new Text("Hello, developer!", {  fill: 0xffffff,  fontSize: 32,});slogan.position.set(20, 20);// 创建图形成员const sloganBg = new Graphics();sloganBg.position.set(10, 10);sloganBg.lineStyle(4, 0x333333, .25);sloganBg.beginFill(0xefefef, .5);sloganBg.drawRoundedRect(0, 0, slogan.width + 20, slogan.height + 20, 10);sloganBg.endFill();app.stage.addChild(slogan, sloganBg);// 创建精灵成员const sprite = Sprite.from("https://hk.krimeshu.com/sprite-minion.png");sprite.anchor.set(0.5, 0.5);sprite.position.set(app.screen.width / 2, app.screen.height / 2);app.stage.addChild(sprite);

效果大致如下:

基本概念

上面的例子中,除了之前提到的 Application之外,主要有以下几个新面孔:

TextGraphicsSprite

以及 Application的几个成员:

app.stageapp.screenapp.view

显然,TextGraphicsSprite将会是我们之后开发游戏常用的成员类型。其中的 TextGraphics顾名思义很好理解,就是 文本图形。而 Sprite其实也是它的字面意思“精灵”,它是具有图形材质和一系列属性、操作方法的成员对象,是我们在游戏中直接操作的基础单元之一。

1. 容器与层级

如果查看他们的 type 声明就会发现,它们具有这样的继承派生关系:

符号 ->表示继承。

Graphics -> ContainerSprite -> ContainerText -> Sprite -> Container

可见它们都属于一个共同的祖先类别 Container,而 Container又继承于更原始的 DisplayObject

可推测 DisplayObject是 PixiJS 中可用于绘制的 可显示对象,应该是渲染底层操作的基础单位。

Container是在 DisplayObject的基础上具有类似 Web 节点性质的树形结构对象。整个游戏需要绘制的成员,都以嵌套的树形结构最终挂载于 app.stage这个顶级 Container之下。

实际上因为 PixiJS 没有 CSS 的层级概念,绘制时其实就是按照遍历整个 app.stage的树形结构,从上到下、从前到后进行绘制,后绘制对象覆盖先绘制的对象的优先级来决定层级覆盖关系。

GraphicsSpriteText则是在 Container基础上,拥有更多特化后的绘制能力和操作方法的可显示对象具体子类。将它们的实例通过 addChild加入到游戏的 app.stage中,就会被 PixiJS 绘制出来,最终出现在我们眼前了。

const text1 = new Text("...");const text2 = new Text("...");// ...app.stage.addChild(  text1,  text2,  //...);

2. 屏幕

除了 app.stage之外,上面还用到了 app.screenapp.view这两个 Application的属性。

通过查看类型定义,我们发现前者的类型是 Rectangle,即矩形,对其的官方定义为:

Rectangle对象是一个由它左上角的 原点(x, y)和自身 宽度width+高度height定义的区域。

app.screen就是我们整个游戏应用的矩形渲染区域,平时游戏中只有位于这个区域内的可显示对象才能被用户在页面上看到。

3. 画布

最后的 app.view则是 PixiJS 应用的渲染器所持有的 Canvas 画布对象引用。

在我们的例子中,因为创建 Application时没有传入画布对象,所以 PixiJS 内部会帮我们创建符合指定属性的画布,并挂载在 app实例的 view属性上。在这一切完成之后,我们最后将创建的 app.view画布通过 appendChild()加入到页面的 DOM 树内。

同样的,我们也可以不使用自动创建的画布,而是使用页面上已有的 Canvas 画布对象来创建 Application应用对象:

const canvas = document.querySelector("#cvsMyGame");const app = new Application({  view: canvas,  width: canvas.width,  height: canvas.height,});

这个例子里,如果我们不将 canvas 的宽高传给 Application的构造参数,PixiJS 将会用一个默认的尺寸创建游戏,并修改为 canvas 的新宽高。所以还是需要获取后赋值传入,稍显啰嗦。

4. 更多适配

如果我们的游戏是面向移动端设备开发的话,还需要增加一个分辨率参数,以适配高分辨率设备的像素密度:

const app = new Application({  view: canvas,  width: canvas.width,  height: canvas.height,  resolution: window.devicePixelRatio || 2,});

不过如果我们的游戏应用与网页视口的尺寸始终保持一致(即所谓的“全屏游戏”)的话,其实可以也不用传入这么多参数,只需要这样配置:

const app = new Application({  view: canvas,  resizeTo: window,  autoDensity: true,});

通过 resizeTo属性指定应用画布跟随网页窗口尺寸,还可以在用户屏幕旋转、调整窗口尺寸后由 PixiJS 自动调整画布尺寸,以适配用户设备的最新画面状态。

——不过页面内的成员坐标和尺寸并不会按新旧尺寸的比例进行调整更新,毕竟实际游戏场景的成员数可能相当多,而且不同成员的定位适配策略通常并不相同,还是需要在检测到对应 resize事件后自行调整。

这次我们创建了一个基本的 PixiJS 游戏应用,并对一些基础概念进行了说明。

但这个基本 demo 中还是有不少东西没有说清楚,并且这个应用的代码也没有合理组织,之后我们将在这个基础上继续补充和完善。

如果有什么纰漏与谬误欢迎指出~

标签:

PixiJS 修炼指南 - 01. 启程_世界时讯

PixiJS是一个使用便捷且高效的2D渲染引擎——没错,它不是大而全的游戏引擎,而是更轻量的渲染引擎。

03-31 21:23:38

国内首部AI题材深圳原创舞剧《深AI你》3月30日上演

读特客户端·深圳新闻网2023年3月22日讯(记者童小晋)“你能做我的妈妈吗?”“妈妈是一种职业吗?”开...

03-31 20:42:11

超级形态官网在哪下载 最新官方下载安装地址

超级形态怎么下载?想要比别人更加抢先抢快的玩到这款游戏,那么你获取游戏开测消息是关键,能够获取到...

03-31 19:22:26

时讯:全球连线|我在中国学中医

我在中国学中医。

03-31 18:28:42

恶作剧之吻男主送女主礼物

恶作剧之吻男主送女主礼物,男主是上海的,主角是上海,上海的礼物很多,可是上海鲜送给恋对方,有些上...

03-31 18:24:22

3月31日24时国内成品油价迎今年来最大降幅 加满一箱少花13元

制图:申佳平人民网北京3月31日电(记者申佳平)今日24时,国内成品油价格实现“二连降”,为今年以来最...

03-31 17:39:15

外汇局:2022年末我国对外金融资产92580亿美元 对外负债67267亿美元 对外净资产25313亿美元_环球热点评

3月31日,国家外汇管理局公布2022年末我国国际投资头寸表。2022年末,我国对外金融资产92580亿美元,对...

03-31 16:55:51

知情人士:资方已经完成打款,虎头局资金紧张与此无关 全球即时

App3月31日消息,今日有消息称,虎头局资金紧张是由于此前红杉、GGV千万融资未能全部到账。对此,有知情...

03-31 16:01:53

一双“本命年”红袜子,揪出肇事逃逸嫌疑人

一双“本命年”红袜子,揪出肇事逃逸嫌疑人

03-31 15:11:43

和讯个股快报:2023年03月31日 美埃科技(688376)该股换手率大于8%-每日资讯

换手率大于8%说明了该股票当前处于比较活跃的局面,得到市场上资金的关注,如果在股价上涨途中,换手率5...

03-31 14:12:44

摔角动态《超级秀2020》惊现负星级比赛评分

摔角网讯,昨日进行的《超级秀2020》大赛上,产生了不少的争议,高柏(Goldberg)终结了布雷·怀亚特(TheFi

03-31 12:59:34

威少迎来了自己NBA历史总得分的里程碑|世界快讯

威少开挂了!他已经好久没开挂了!在快船队两大当家球星伦纳德和乔治有伤缺席的情况下,威少终于过了一把...

03-31 12:13:44

45个国家级集群产值超20万亿元(新数据 新看点) 热点聚焦

记者从近期举行的中国工业经济高峰论坛上获悉:2022年,我国先进制造业产业集群建设步伐进一步加快,45...

03-31 11:43:02

浙江省人大常委会决定任命省政府秘书长和组成部门主要负责人

潮新闻记者蒋欣如3月31日上午,省十四届人大常委会第二次会议经审议表决,决定:徐大可任浙江省人民政府...

03-31 11:03:30

《铃芽之旅》岩户铃芽寻门归

汝南郡草太,乃世袭之关门师也。其乡人民聚焉,以术法护卫日本社稷。彼在阳世,循规蹈矩,勤谨止损后门...

03-31 10:10:18

上市公司重要公告集锦2023年03月31日

上市公司重要公告集锦2023年03月31日。新闻资讯提供最新、最及时的新闻服务。包括:个股新闻、股票资讯...

03-31 09:02:22

华亚智能03月30日被深股通减持5.54万股|今日报

03月30日,华亚智能被深股通减持5 54万股,最新持股量为3 61万股,占公司A股总股本的0 05%。

03-31 08:11:49

kubernetes组件介绍

ServerKubernetesAPIServer是Kubernetes的核心组件之一,它是所有控制平面组件和工作节点组件之间的中心...

03-31 04:38:36

头条:市烟草专卖局劝导交通倡文明

连日来,市烟草专卖局组织“徽映”志愿者在滁城城区主要街道开展文明交通劝导志愿服务活动,为创建安全...

03-31 00:26:30

4月1日起,退役军人持优待证免费乘洛阳公交

3月30日,洛阳市公交集团发布通知,自4月1日起,在全市行政区域内,退役军人及其他优抚对象凭河南省制发...

03-30 22:12:17

今日聚焦!外交部发言人:中方将坚决有力捍卫国家主权和领土完整

新华社北京3月30日电(记者董雪)外交部发言人毛宁30日说,中方对美方不顾中方严正交涉和反复警示,执意...

03-30 21:12:34

每日资讯:124批次家用电器不合格!看看你家有用吗?

本次在流通领域进行抽查,覆盖11个省(区、市)121家企业生产的122批次产品,发现25批次产品不合格,抽查...

03-30 19:57:54

笔记本玩英雄联盟卡顿_玩英雄联盟卡顿不流畅

1、alienware17玩英雄联盟出现卡顿不流畅。2、其他大型游戏是否也会卡顿,不会的话就重装英雄联盟。3、...

03-30 19:01:27

每日热文:我们的家园|走进中国羌族博物馆 了解“云朵上的民族”

人民网成都3月29日电(周静圆)蓝天雪域为景,碉楼青山为台。3月27日,“我们的家园”网络主题活动(四...

03-30 18:06:43

东芝投影仪维修服务电话_东芝投影仪维修-通讯

1、投影仪开机后自动关机可以根据以下几点常见原因来排查原因:2、投影机内部没有定期清理灰尘,造成机...

03-30 17:00:32

韩总统办公室:韩国绝对不会进口日本福岛水产品!

据韩联社报道,面对舆论对于进口日本福岛水产品的担忧,韩国总统办公室当地时间30日明确表示,韩国绝对...

03-30 16:08:23

精彩看点:甘肃:环评“提速增效”助力项目“快马加鞭”

今年以来,甘肃省在守牢生态环境底线的同时,全力推动环评服务“提速增效”,助力重大项目“快马加鞭”...

03-30 15:33:54

缅怀革命先烈,弥牟小学学子传承红色精神 前沿热点

清明将至,为缅怀革命先烈,弘扬爱国主义情怀,2023年3月29日,成都市青白江区弥牟小学校开展了以“孔明...

03-30 15:00:47

【天天时快讯】奇迹的形状

毫无疑问这是一部优秀的作品,其中让我印象尤为深刻的便是沙耶线。也许正式这条线启发了后来的神作《Ang...

03-30 13:55:58

2023年中国花椒市场投资机会分析

椒原产于中国,原生于喜马拉雅山脉,后沿江河移植到中国地理第二阶梯。我国花椒分布由北起东北南部,南...

03-30 12:28:46

股票买卖费用怎么算?股票买卖费用有哪些?

股票买卖费用怎么算?股票买卖费用有哪些?股票买卖费用怎么算一、收费标准:佣金:最低5元起,收取成交金...

03-30 11:53:24

背厚胳膊粗壮怎么办_背厚胳膊粗怎么减|聚焦

1、可以多运动。2、经常锻炼手臂和背部。本文分享完毕,希望对大家有所帮助。

03-30 11:07:17

每日时讯!电工绩效考核表范本(绩效考核表范本)

1、去百度文库,查看完整内容>内容来自用户:朽木雕花v1员工绩效考核表姓名:部门:职位:本次考核日期:...

03-30 10:05:25

热点在线丨北京科锐:北京稳力参展主要是展示公司分布式综合能源系统、商用车燃料电池系统、无油离心空压机等产品

每经AI快讯,有投资者在投资者互动平台提问:董秘你好,贵司子公司稳力科技在氢能展是否签署新订单?截...

03-30 09:36:09

焦点精选!康普顿:公司正在积极开展海外业务,拓展相关领域的合作

每经AI快讯,有投资者在投资者互动平台提问:请问公司产品有在国外销售吗?占比多少?康普顿(603798 SH...

03-30 08:48:41

溧阳市属于哪个省

溧阳位于江苏省苏南,地处长江三角州,属上海经济区。江苏省 常州市 溧阳市溧阳市(英文名:Liyang)...

03-30 07:10:45

闻泰科技(600745):3月29日北向资金减持108万股 即时焦点

3月29日北向资金减持108 0万股闻泰科技。近5个交易日中,获北向资金增持的有4天,累计净增持307 99万...

03-30 05:18:32

煮泡面什么时候放鸡蛋(煮泡面什么时候放鸡蛋比较好)-最新资讯

煮泡面是平时最方便快速的美食,而且煮一碗好吃的泡面,一定少不了鸡蛋,那什么时候放鸡蛋呢,这是个很...

03-30 00:45:58

精华隆拟投资10万新设全资子公司深圳市通感物联科技有限公司

精华隆拟投资10万新设全资子公司深圳市通感物联科技有限公司2023 3 2921:44:00挖贝网白莹挖贝网3月29...

03-29 22:42:15

全球速递!人勤不负春光美 踏春赏花正当时

央视网消息:春天里的中国,春意盎然,候鸟北归。大江南北,花开正艳,万紫千红。下面就跟随镜头一起走...

03-29 20:08:19

观速讯丨亚洲经济体2023年经济增速预计达4.5%

以“不确定的世界:团结合作迎挑战,开放包容促发展”为主题的博鳌亚洲论坛2023年年会于3月28日至3月31...

03-29 19:04:12

当前快播:亲姐妹不和致父母骨灰6年无法合葬 法院:安葬骨灰系子女共同义务 拒不协助安葬有悖社会道德

北京青年报记者3月29日从北京市朝阳区人民法院获悉,该院近日就一起因亲姐妹不和,导致两人父母的骨灰长...

03-29 18:15:16

世界最资讯丨女子退租后押金两个月未退,澎湃介入后牛油果公寓退还

薛女士与牛油果公寓签订的房屋租赁合同。本文图片受访者提供近日,消费者薛女士向澎湃质量观投诉平台(h...

03-29 17:09:32

山东联通5G室分移频MIMO产品集采:唯得、赛特斯、中信科中标

山东联通5G室分移频MIMO产品集采:唯得、赛特斯、中信科中标,C114讯3月29日消息(焦焦)从中国联通官网...

03-29 16:33:38

世界观速讯丨聚焦航空生态系统价值创造 首届飞机价值管理国际论坛在沪举办

近年来,国产大飞机在商业化层面持续探索,而飞机价值评估作为主机制造商及航空公司资产优化的先决要素...

03-29 16:07:07

3月29日山东地区醋酸市场暂稳运行

企业产能生产情况兖矿国泰100万吨 年日产3000吨华鲁恒升60万吨 年日产1500吨3月29日,山东地区醋酸企...

03-29 14:59:14

全球快报:主力资金连续抢筹 化纤龙头3连板!最新业绩高增长出炉 煤炭龙头盈利超140亿元 市盈率不到5倍

主力连续抢筹的业绩高增长股有哪些?今日早盘,上证指数高开低走,目前日线已四连阴。TMT板块继续分化走...

03-29 13:32:12

Mysteel午报:钢价上涨为主,黑色期货飘红 每日头条

◎上海:29日早盘建材市场价格部分涨10。现螺纹4150-4210,西城抗震4220,其他4080-4130,兴鑫抗震4140...

03-29 12:11:31

全球观速讯丨构建人车信任,引领出行安全 梅赛德斯-奔驰安全科技日开启自动驾驶时代的安全新境界

科技之道,安全为先。近日,梅赛德斯-奔驰安全科技日活动在泉城济南举行,全方位展现品牌领先的安全理念...

03-29 11:25:00

奶粉企业熬过最难一年,但新一年价格战仍未熄火_天天消息

作者:栾立  疫情叠加出生人口的快速下滑,让国内奶粉企业生意越来越不容易。对于2022年业绩变化的原...

03-29 10:57:08

国内首部AI题材深圳原创舞剧《深AI你》3月30日上演
超级形态官网在哪下载 最新官方下载安装地址
时讯:全球连线|我在中国学中医
恶作剧之吻男主送女主礼物
3月31日24时国内成品油价迎今年来最大降幅 加满一箱少花13元
外汇局:2022年末我国对外金融资产92580亿美元 对外负债67267亿美元 对外净资产25313亿美元_环球热点评
知情人士:资方已经完成打款,虎头局资金紧张与此无关 全球即时
一双“本命年”红袜子,揪出肇事逃逸嫌疑人
和讯个股快报:2023年03月31日 美埃科技(688376)该股换手率大于8%-每日资讯
摔角动态《超级秀2020》惊现负星级比赛评分
威少迎来了自己NBA历史总得分的里程碑|世界快讯
45个国家级集群产值超20万亿元(新数据 新看点) 热点聚焦
浙江省人大常委会决定任命省政府秘书长和组成部门主要负责人
《铃芽之旅》岩户铃芽寻门归
上市公司重要公告集锦2023年03月31日
华亚智能03月30日被深股通减持5.54万股|今日报
kubernetes组件介绍
头条:市烟草专卖局劝导交通倡文明
4月1日起,退役军人持优待证免费乘洛阳公交
今日聚焦!外交部发言人:中方将坚决有力捍卫国家主权和领土完整
每日资讯:124批次家用电器不合格!看看你家有用吗?
笔记本玩英雄联盟卡顿_玩英雄联盟卡顿不流畅
每日热文:我们的家园|走进中国羌族博物馆 了解“云朵上的民族”
东芝投影仪维修服务电话_东芝投影仪维修-通讯
韩总统办公室:韩国绝对不会进口日本福岛水产品!
精彩看点:甘肃:环评“提速增效”助力项目“快马加鞭”
缅怀革命先烈,弥牟小学学子传承红色精神 前沿热点
【天天时快讯】奇迹的形状
2023年中国花椒市场投资机会分析
股票买卖费用怎么算?股票买卖费用有哪些?
背厚胳膊粗壮怎么办_背厚胳膊粗怎么减|聚焦
每日时讯!电工绩效考核表范本(绩效考核表范本)
热点在线丨北京科锐:北京稳力参展主要是展示公司分布式综合能源系统、商用车燃料电池系统、无油离心空压机等产品
焦点精选!康普顿:公司正在积极开展海外业务,拓展相关领域的合作
溧阳市属于哪个省
闻泰科技(600745):3月29日北向资金减持108万股 即时焦点
煮泡面什么时候放鸡蛋(煮泡面什么时候放鸡蛋比较好)-最新资讯
精华隆拟投资10万新设全资子公司深圳市通感物联科技有限公司
全球速递!人勤不负春光美 踏春赏花正当时
观速讯丨亚洲经济体2023年经济增速预计达4.5%
当前快播:亲姐妹不和致父母骨灰6年无法合葬 法院:安葬骨灰系子女共同义务 拒不协助安葬有悖社会道德
世界最资讯丨女子退租后押金两个月未退,澎湃介入后牛油果公寓退还
山东联通5G室分移频MIMO产品集采:唯得、赛特斯、中信科中标
世界观速讯丨聚焦航空生态系统价值创造 首届飞机价值管理国际论坛在沪举办
3月29日山东地区醋酸市场暂稳运行
全球快报:主力资金连续抢筹 化纤龙头3连板!最新业绩高增长出炉 煤炭龙头盈利超140亿元 市盈率不到5倍
Mysteel午报:钢价上涨为主,黑色期货飘红 每日头条
全球观速讯丨构建人车信任,引领出行安全 梅赛德斯-奔驰安全科技日开启自动驾驶时代的安全新境界
奶粉企业熬过最难一年,但新一年价格战仍未熄火_天天消息
天天热头条丨以点带面!海口打造一批食品安全示范引领点位
X 广告
行业动态
X 广告

Copyright ©  2015-2023 非洲植物网版权所有  备案号:沪ICP备2022005074号-8   联系邮箱:58 55 97 3@qq.com