JavaScript动画制作简单程序

JavaScript动画制作简单程序,第1张

<style>

        #box{

            position: absolute;

            width: 100px;

            height: 100px;

            background: #000;

            box-shadow: 0 0 10px 10px rgba(0,0,0,0,1);

        }

    </style>

    <div id="box"></div>

    <script>

        var pos=0;

        var box=documentgetElementById('box');

        var t=setInterval(move,100);

        function move(){

            if(pos>=379){

                clearInterval(t);

            }

            else{

                pos+=1;

                boxstyleleft=pos+'px';

            }

        }

    </script>

    

    我就这么写的,完全没问题啊

AE 一直是视频后期处理的主流应用程序。本文给大家分享2022年10款AE软件的替代品,总有一款适合你

其中前面7款是免费软件或提供免费版本

最佳免费 AE 替代品

1 Blender

Blender 是一个完全免费的开源 3D 软件,它于 2002 年启动。与 Cinema4D、Maya 和 3Ds Max 类似,可以创建令人惊叹的 3D 动画、建模、模拟、装配、合成、渲染和运动跟踪、视频编辑甚至游戏创建。

和AE一样,Blender 有一个强大的社区和教程,允许用户高效地制作 3D 作品和动画。主要区别之一是Blender是基于动画节点的,而 After Effects 动画是基于时间轴的。

虽然 Blender 中有视频编辑功能,但如果你以前没有视频编辑经验,那么进行简单的视频编辑和转换可能不像 After Effects 那样容易。

Blender特点:

渲染

造型

雕刻

动画和索具

油性铅笔

视觉效果

模拟

导入 | 导出

支持的图像格式: JPEG、JPEG2000、PNG、TARGA、OpenEXR、DPX、Cineon、Radiance HDR、SGI Iris、TIFF

支持的视频格式: AVI、MPEG 和 Quicktime(在 OSX 上)。

3D 格式 : Alembic、3D Studio (3DS)、COLLADA (DAE)、Filmbox (FBX)、Autodesk (DXF)、Wavefront (OBJ)、DirectX (x)、Lightwave (LWO)、运动捕捉 (BVH)、SVG、Stanford PLY 、STL、VRML、VRML97、X3D。

视频编辑

脚本

可定制的界面

*** 作系统: Windows | Mac | Linux

价格:免费

访问搅拌机网站

优点

强大的帮助社区

免费和开源

缺点

学习曲线

令人生畏的界面

无法在 After Effects 中导入项目文件

2DaVinci Resolve

DaVinci Resolve 特点:

高级 2D 和 3D 合成

虚拟现实

动态图形

旋转镜

标题

键控

3D 粒子

GPU 加速

DaVinci Resolve 不使用 After Effects 之类的图层,它使用的节点使其在合成和视觉效果方面非常强大。Davinci Resolve 是 After Effects 的最佳替代品之一,并且显然是一个强大的竞争对手

*** 作系统: Windows | Mac | Linux

价格:免费

专业版 Studio 17 价格: 295 美元

访问 Davinci Resolve 网站

优点

2D 和 3D 合成

视觉效果

色彩校正

GPU 加速

缺点

色彩校正

基本效果

有限的资源

3Cavalry

Cavalry特点:

实时设计

快速渲染

程序动画

程序工作流程采用传统技术,可在有趣和好玩的环境中快速迭代和发展概念。

集成插件

Rig Control

Rubber Hose

Lottie Export

Google Sheets

Color Palettes

Magic Easing

Sound

Quadtree

Connect Shapes

文件渲染导出: Apng、png、jpeg、quicktime、svg、webm

Cavalry 的易用性给我留下了深刻的印象,我可以想象自己快速制作 2d 动画,界面非常接近AE,也是基于时间轴,下面有图层和关键帧。当然它没有AE那么多的功能,但你完全可以用骑兵创造一个 2D 动画杰作。就像 After Effects Cavalry 作为图形编辑器来控制你的动画速度并对其进行自定义。

我喜欢的主要功能之一是橡胶软管的集成,你可以轻松地为角色的手臂和腿设置动画!

Cavalry非常有前途,虽然要与AE保持一致还有很多工作要做,但它已经拥有强大的元素来制作令人惊叹的 2D 动画。

免费版缺点:

有限的分辨率

水印呈现左下角

共享限制

*** 作系统: Mac | WIN

价格:免费 – 限量版

订阅: 20 英镑/月

访问骑兵网站

优点

便于使用

强大的集成插件

快速实时界面

缺点

没有 3D 集成

无文本预设动画

骑兵界面

骑兵视频

4Natron

Natron 是一款强大的合成工具,可满足你的所有 2D/25D 需求。其强大的 OIIO 文件格式和 OpenFX 架构使 Natron 成为视觉效果社区的灵活开源合成器。Natron 拥有强大的抠像、roto、2D 跟踪工具,针对当前所有需要视觉效果的**制作项目进行了优化。

纳特龙特点:

实时编辑

提供 250 个插件

预设集合

灵活的转描

平面和二维跟踪器

运动处理

强大的键控工具

曲线摄影表编辑器

与 AE 不同,Natron 是基于节点的,对于已经使用 Nuke 的人来说很容易掌握。与 After Effects 相比 Natron 具有先进的合成功能。如果你对 Nuke 软件感兴趣,你可能应该尝试 natron,因为它使用相同的快捷方式和类似的界面,而且免费

*** 作系统: Mac | WIN | Linux

价格:免费

访问 Natron 网站

优点

完全免费和开源

方便的转描

社区插件和脚本

合成

缺点

用户界面看起来像 Nuke 界面

难以处理的 4K 素材

难以上手

5 Hitfilm Express

HitFilm Express 是一款免费的视频编辑应用程序,具有专业的视觉效果工具,可用于**、游戏视频。Hitfilm 非常适合新手、**专业学生、游戏玩家

Hitfilm Express 特点:

视频编辑功能

粒子模拟器

合成器的工具包(400 种独特的效果和预设)

色彩校正和分级

键控和提取

追踪

3D 模型导入

特效

Hitfilm Express 有一个很好的内置标题模板,任何人都可以快速构建,它还有很多可以在视频上使用的效果。Hitfilm Express 视频编辑选项比 After Effects 更好,但缺少动态图形选项可能对某些人来说是个问题。

*** 作系统: Windows | Mac

价格:免费

访问 Hitfilm Express

优点

内置一系列效果和过渡

视频编辑

音频编辑

缺点

2D 动态图形选项

社区支持

没有太多可用的模板

绿屏不可用

6 Lightworks

Lightworks 是一款专业的视频编辑软件,自 1989 年以来一直在市场上销售。这个应用程序有很多编辑工具来创建引人入胜的视频。Lightwork 已被用于很多著名的**,如低俗小说、华尔街之狼、全能的布鲁斯……

Lightworks特点:

视频管理

色彩校正

色度键

Boris FX 插件

融合合成器

混合模式

Pond5 搜索集成

导出到 Youtube 和 Vimeo

第二个监视器输出

在视频编辑方面,Lightworks 是一个很好的选择,而且比 After Effects 更高效,它拥有一系列令人惊叹的工具,可以让你的视频看起来很专业。另一方面,除非你导入 Davinci Fusion 项目,否则使用 Lightworks 将无法制作高质量的动态图形或 2D 动画。总体而言,Lightworks 是开始视频编辑的绝佳选择

*** 作系统: Windows | Mac | Linux |

价格:免费

优点

视频编辑

关键帧

视觉特效即时预览

缺点

可用的模板不多

免费版的有限视频导出格式

学习曲线

没有很多过渡

7 OpenShot

Openshot 是适用于 Mac、Windows 和 Linux 的免费视频编辑器,它具有主要的编辑工具,可让你快速管理和编辑视频。

使用 Openshot,你将能够导入各种文件,例如具有不同编解码器的照片、音频文件、视频。

Openshot 特点:

视频效果

无限曲目

简单的用户界面

由 Blender 提供支持的动画标题模板

导入/导出项目:Final Cut Pro、EDL

导出视频格式:AVI、FLV、MKV、MOV、MP4、MPEG、OGG、WEBM

音频混合

许多可用的转换

Openshot 是一个很棒的跨平台视频编辑器,对于那些需要快速编辑 youtube 或个人视频的视频的人来说,它非常易于使用。它非常适合开始视频编辑的初学者。我真正喜欢的功能之一是搅拌机标题模板集成,它允许你准备好有趣的 3D 标题动画。总体而言,使用 Openshot,你将比 After Effects 更快地编辑视频,但无法创建 2D/3D 动画和动态图形。

*** 作系统: Windows | Mac | Linux

价格:免费和开源

优点

便于使用

很多过渡

由 Blender 提供支持的动画标题

视觉特效即时预览

缺点

可用的模板不多

免费版的有限视频导出格式

学习曲线

没有很多过渡

Openshot 界面

最佳付费 After Effects 替代应用

1 Apple Motion

Apple Motion 应用程序专为视频编辑而设计,它是一款功能强大的动态图形工具,可以轻松地实时创建**级 2D 和 3D 字幕、流畅的过渡和精美的效果。如果你在此应用程序之前使用过 Final Cut pro,则应该适合你。

苹果运动功能:

标题和介绍动画

过渡

2D 和 3D 标题动画

导入和动画 3D 对象(USDZ 格式)

文件轻松传输到 Final Cut Pro

Apple Motion 是 After Effects 的一个重要竞争对手,

与 After Effects 相比,它并不太容易上手,不幸的是这个应用程序只适用于 Apple 产品所以windows 和 linux 用户无法使用。

总体而言,Apple Motion 是一款非常完整的应用程序,可让你制作精美的动态图形动画,与 After Effects 相比的主要优势在于 Apple Motion 实时预览,而 After Effects 必须计算然后实时播放

*** 作系统: Mac | iPad

价格:4999 美元

在此处下载 Apple Motion

优点

实时回放

易于为 Final Cut Pro 导出

制作 2D 动画的快速方法

用户界面易于使用

缺点

陡峭的学习曲线

合成

网上的模板不多

Apple Motion界面

2 Procreate

Procreate 是一款插图应用程序,具有强大的动画工具,可让你将创作变为现实。

你可以延时记录从第一个笔画开始的每一个动作,非常适合创建动画。

Procreate特点:

草图/油漆

插图

延时记录

Procreate 是一款非常适合传统手绘艺术家和插画家的应用程序。在逐帧制作动画方面,procreate 比 After Effects 具有巨大优势,因为它将艺术家的审美和艺术和插图的复杂性与逐帧动画相结合。好的部分是你可以轻松地准备图层或视频并导入运动图形软件。缺点是 Procreate 本身没有任何动态图形工具,因此如果你想添加特殊效果,则必须使用其他编辑工具。总之,Procreate 不是 After Effects 的完全替代品,而是创建流畅手绘艺术的必备工具。它的动画组件非常适合初学者、简单动画或只想涉足动画艺术的艺术家。

*** 作系统: Mac | iPad

价格:999 美元

优点

逐帧动画

延时摄影记录

手绘工具

混合帧

缺点

没有动态图形工具

没有向量

仅适用于 Apple 用户,无 Windows 或 Linux 版本。

ProCreate 界面

3 CreateStudio

CreateStudio 是一款动画应用程序

CreateStudio 特点:

预建模板

动画和过渡

社交媒体视频创作

视频编辑

画外音/音频

预制动画 2D 和 3D 角色

SVG 导入

一键动画

绿屏编辑

矢量形状库

动力学排版

导入 Lottie 文件

CreateStudio 是一款不需要动画经验的软件,对于希望制作快速令人印象深刻的视频的新手或专家, CreateStudio 是值得尝试的,要在 After Effects 中制作相同类型的 3D 角色动画,你需要相当多的一点经验和知识。现在你可以在 Createstudio 中更快地完成 *** 作,但你将无法像 After Effects 那样真正控制动画的各个方面。总之,我认为 CreateStudio 对于想要制作解说视频或希望为社交媒体平台创建直观角色视频的人来说是必须的

*** 作系统: Mac | Win

价格: 99 美元/终身访问

访问创建工作室网站

优点

预制涂鸦动画

社交视频广告

非常适合解说视频

创建滚动停止视频广告

缺点

无试用版

普通版没有足够的模板

无法在时间轴上剪切剪辑

角色动画可能更长

CreateStudio 界面

分类AE

AE教程:如何在 AE 中拆分

C语言动画程序

#include <mathh>

#include <stdioh>

#include <graphicsh>

#include <dosh>

#define pi 31415926535

double ca3mm1(double m1,double m2);

double ca3fm1(double cosine,double sine);

double ca5fm2(double a6m,double a5m,double a4m,double a4f,int shang);

double ca6fm2(double a4m ,double a4f,double a5m , double a5f);

char inbox(int x,int y,int x1,int y1);

char buf();

main()

{

double m=30;

double xo=1000,yo=2000,a1=300,t1=pi;

double xc=xo+ma1,yc=yo;

double a2=80,a3,a4=250,a5=300,a6=200,a7=350;

double t2,t3,t4,t5,t6,t7;

double xo1=xo+m150,yo1=yo;

double xc1=xo1-ma1,yc1=yo1;

double i,j,k;

double l1;

double n=1161,nt;

initscreen();

setfillstyle(SOLID_FILL,DARKGRAY);

bar(0,0,640,480);

mybutton(10,10,"BEGIN",1,0);

mybutton(500,10,"EXIT",1,0);

line(0,69,640,69);

mouseinit();

changemousecross();

setmousexy(320,20);

mouseshow();

setmousearea(0,0,640,60);

do{

if(inbox(10,10,70,26)&&button()==1)

{mousehide(); mybutton(10,10,"BEGIN",0,0); mouseshow(); mousehold(); mousehide(); mybutton(10,10,"BEGIN",1,7); mouseshow(); break; }

if(inbox(500,10,555,26)&&button()==1)

{mousehide(); mybutton(500,10,"EXIT",0,0); mouseshow(); mousehold(); mousehide(); mybutton(500,10,"EXIT",1,7); mouseshow(); exit(0); }

if(buf()==56)

for(i=0;i<10000;i++){

switch (buf()){

case 18:{

mousehide();

mybutton(500,10,"EXIT",0,0);

mouseshow();

delay(4000);

mousehide();

mybutton(500,10,"EXIT",1,7);

mouseshow();

exit(0);

}

case 48: {

mousehide();

mybutton(10,10,"BEGIN",0,0);

mouseshow();

delay(4000);

mousehide();

mybutton(10,10,"BEGIN",1,7);

mouseshow();

goto run;

}

default:break;

}

}

}while(1);

run:

drawjijia(xo,yo,1);

drawjijia(xc,yc,1);

drawjijia(xo1,yo1,1);

drawjijia(xc1,yc1,1);

setwritemode(1);

do{

for(i=0;i<3600;i+=10)

{

t2=i;

a3=ca3mm1(a1cos(t1)+a2cos(t2pi/1800),a1sin(t1)+a2sin(t2pi/1800));

t3=ca3fm1(a1cos(t1)+a2cos(t2pi/1800),a1sin(t1)+a2sin(t2pi/1800));

a4=a3;

t4=t3;

t5=ca5fm2(a6,a5,a4,t4,0);

t6=ca6fm2(a4,t4,a5,t5);

t7=t6-900;

l1=xc1-xc-2ma7cos(t7pi/180);

nt=(asin(l1/2/(n/2))180/pi)-900;

drawline(xo,yo,a2,t2,m,LIGHTGRAY);

drawline(xo+ma2cos(t2pi/180),yo-ma2sin(t2pi/180),a5,t5,m,LIGHTGRAY);

drawline(xc,yc,a6,t6,m,LIGHTGRAY);

drawline(xc,yc,a7,t7,m,LIGHTGRAY);

drawline1(xo1,yo1,a2,t2,m,LIGHTGRAY);

drawline1(xo1+ma2cos((180-t2)pi/180),yo1-ma2sin((180-t2)pi/180),a5,t5,m,LIGHTGRAY);

drawline1(xc1,yc1,a6,t6,m,LIGHTGRAY);

drawline1(xc1,yc1,a7,t7,m,LIGHTGRAY);

for(j=-1;j<20;j++)

{ drawline(xc+ma7cos(t7pi/180),(yc-ma7sin(t7pi/180)-jnsin(ntpi/180)),n,nt,10,GREEN);

drawline1(xc1-ma7cos(t7pi/180),(yc1-ma7sin(t7pi/180)-jnsin(ntpi/180)),n,nt,10,DARKGRAY);

}

delay(300);

drawline(xo,yo,a2,t2,m,LIGHTGRAY);

drawline(xo+ma2cos(t2pi/1800),yo-ma2sin(t2pi/1800),a5,t5,m,LIGHTGRAY);

drawline(xc,yc,a6,t6,m,LIGHTGRAY);

drawline(xc,yc,a7,t7,m,LIGHTGRAY);

drawline1(xo1,yo1,a2,t2,m,LIGHTGRAY);

drawline1(xo1+ma2cos((180-t2)pi/180),yo1-ma2sin((180-t2)pi/180),a5,t5,m,LIGHTGRAY);

drawline1(xc1,yc1,a6,t6,m,LIGHTGRAY);

drawline1(xc1,yc1,a7,t7,m,LIGHTGRAY);

for(j=-1;j<20;j++)

{ drawline(xc+ma7cos(t7pi/180),(yc-ma7sin(t7pi/180)-jnsin(ntpi/180)),n,nt,10,GREEN);

drawline1(xc1-ma7cos(t7pi/180),(yc1-ma7sin(t7pi/180)-jnsin(ntpi/180)),n,nt,10,DARKGRAY);

}

setwritemode(0);

if(inbox(500,10,555,26)&&button()==1)

{mousehide(); mybutton(500,10,"EXIT",0,0); mouseshow(); mousehold(); mousehide(); mybutton(500,10,"EXIT",1,7); mouseshow(); exit(0); }

if(buf()==56)

for(k=0;k<10000;k++){

switch (buf()){

case 18:{

mousehide();

mybutton(500,10,"EXIT",0,0);

mouseshow();

delay(4000);

mousehide();

mybutton(500,10,"EXIT",1,7);

mouseshow();

exit(0); }

default:break;

}

}

setwritemode(1);

}

}while(1);

}

drawline(double xo,double yo,double mo,double fujiao,double m,int color)

{

double x,y;

x=(xo+mmocos(fujiaopi/180));

y=(yo-mmosin(fujiaopi/180));

setcolor(color);

line (xo,yo,x,y);

}

drawline1(double xo,double yo,double mo,double fujiao,double m,int color)

{

double x,y;

x=(xo-mmocos(fujiaopi/180));

y=(yo-mmosin(fujiaopi/180));

setcolor(color);

line (xo,yo,x,y);

}

drawjijia(double x,double y,int shang)

{

setcolor(RED);

if (shang==1){

circle(x,y,3);

line(x-30,y+30,x-150,y+200);

moveto(x-15,(int)(y+20));

lineto((int)(x+15),(int)(y+20));

moveto((int)(x+15),(int)(y+20));

lineto(x+3,y+3);}

setcolor(RED);

if (shang==0){

circle((int)x,(int)y,3);

line (x-3,y-3,x-15,y-20);

moveto(x-15,y-20);

lineto(x+15,y-20);

moveto(x+15,y-20);

lineto(x+3,y-3);

}

}

double ca3mm1(double m1,double m2)

{

double temp;

temp = sqrt(m1m1 + m2m2);

return(temp);

}

double ca3fm1(double cosine,double sine)

{

float temp;

if (sine > 0 && cosine > 0)

temp = atan(sine / cosine) 180 / pi;

if (sine > 0 && cosine < 0)

temp = (atan(sine / cosine) + pi) 180 / pi;

if (sine < 0 && cosine < 0)

temp = (atan(sine / cosine) + pi) 180 / pi;

if (sine < 0 && cosine > 0)

temp = (atan(sine / cosine) + 2 pi) 180 / pi;

return(temp);

}

double ca5fm2(double a6m,double a5m,double a4m,double a4f,int shang)

{

double temp,sine1,cosine1;

cosine1 = (a6m a6m - a4m a4m - a5ma5m) / (2 a4m a5m);

sine1 = sqrt(1 - cosine1 cosine1);

if (shang==0)

sine1 = sine1(-1);

if (sine1 > 0 && cosine1 > 0)

temp = a4f + (atan(sine1 / cosine1) 180 / pi);

if (sine1 > 0 && cosine1 < 0)

temp = a4f + ((atan(sine1 / cosine1) + pi) 180 / pi);

if (sine1 < 0 && cosine1 < 0)

temp = a4f + ((atan(sine1 / cosine1) + pi) 180 / pi);

if (sine1 < 0 && cosine1 > 0)

temp = a4f + ((atan(sine1 / cosine1) + 2 pi) 180 / pi);

return(temp);

}

double ca6fm2(double a4m ,double a4f,double a5m , double a5f)

{

double temp,sine1,cosine1;

sine1 = a4m sin(a4f pi / 180) + a5m sin(a5f pi / 180);

cosine1 = a4m cos(a4f pi / 180) + a5m cos(a5f pi / 180);

if (sine1 > 0 && cosine1 > 0)

temp = (atan(sine1 / cosine1) 180 / pi);

if (sine1 > 0 && cosine1 < 0)

temp = ((atan(sine1 / cosine1) + pi) 180 / pi);

if (sine1 < 0 && cosine1 < 0)

temp = ((atan(sine1 / cosine1) + pi) 180 / pi);

if (sine1 < 0 && cosine1 > 0)

temp = ((atan(sine1 / cosine1) + 2 pi) 180 / pi);

return(temp);

}

initscreen()

{

int gd=DETECT,gm;

registerbgidriver(EGAVGA_driver);

initgraph(&gd,&gm,"");

}

Towify 中的动画可以为组件设置多种动画效果,快来1秒Get如何配置!

效果展示

使用动画效果中的旋转动画,同时配置触发器行为:执行其它动画。实现点击播放动画的效果。

触发器配置

注意:在检查器面板中的触发器设置面板创建触发器,可以对组件进行交互逻辑设置,或配合事件来进行动态数据 *** 作。

选中音频组件

点击检查面板中的触发器

创建一个触发行为:执行其它动画的触发器

注意:在……时是一种监听行为的触发时机,在当前案例中,使用了监听音频的状态。

选中音频组件

点击检查面板中的触发器

创建触发行为:在……时的触发器

注意:激活有两种状态,分别为激活非激活,激活对应了样式中的Selected状态,而非激活对应了样式中的Default状态

选中音频组件

点击检查面板中的触发器

创建触发行为:激活的触发器

这样就可以配置旋转动画了。

这个问题也是我这两天遇到的,跟你说一下吧!unity出了新动画系统后,你在animation面板中制作动画默认是用于animator组件使用的,不能用animation组件来使用。如果你仔细观察会发现,在你制作动画时,你的gameobject上面会自动添加一个animator。当然,如果你想使用老的动画系统也可以,先在你的gameobject上面放个animation组件,然后再制作动画,这样就可以使用,你可以自己试试看!!!

因为C的图形处理功能太一般,不便于创作大型动画。制作动画用flash。

flash制作动画:

打开Flash,点击文件→新建,在打开的“新建”窗口中选择“Flash文件(ActiveScript 30)“,然后点击”确定“创建空白文档。

点击插入→新建元件,在打开的”新建元件“窗口中,将名称设置为”运动的小人“,勾选”影片剪辑“,然后点击”确定“按钮。

点击文件→导入→导入到库,然后在打开的”导入到库“窗口中,选择事先准备好的小人走动姿势,全部选择并点击”打开“按钮,导入到库。

在图层1 的第一帧,把库中的“Result0”拖动到场景中。

点击“时间轴”上的“新建图层”按钮,创建图层2,然后在图层2的第5帧处,点击插入→关键帧,把库中的“Result1”拖动到场景中。

利用同样的原理,将”Result2“、 ”Result3“和”Result4“分别到图层3、图层4和图层5中,对应的帧分别为10、15和20处。

最后调整各个图层图像的延续时间。至此,运动的小人影片剪辑制作完成。

切换至主场景中,使主场景处于活动状态,点击”属性“面板中的”大小“按钮,将场景的大小设置为”800300“,同时将背景色设置为”黑色“点击”确定“按钮。

从库中将”运动的小人“影片剪辑拖动到场景左边外边。

然后在”时间轴“第30帧处,点击插入→时间轴→关键帧,在30帧处插入关键帧,然后将小人从场景的左侧外面拖动到场景右侧外面。至此,整个动画设置完成。

在1到30帧之间鼠标右击,选择”创建补间动画“。

最后按下键盘组合键”CTRL+Enter“进行测试。如果感觉小人运动不规律,可适当将1至30帧的距离调整的稍微大一些,直到满意为止。

以上就是关于JavaScript动画制作简单程序全部的内容,包括:JavaScript动画制作简单程序、createstudio值得买吗、求一简单的C语言动画程序。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9473459.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存