学习 PixiJS — 补间动画

眨个眼就学会了Pixi.js theme: smartblue 本文正在参加「金石计划」 本文简介 带尬猴,我是德育处主任 当今的Web开发中,图形和动画已经成为了吸引用户注意力的重要手段之一。而 Pixi.js 作为一款高效、易用的2D渲染引擎,已经成为了许多开发者的首选~~(我吹的)~~。本文将为工友们介绍PixiJS的基础知识和使用方法,希望可以和工友们~~快速~~光速入门,掌握 Pixi.js 的用法。 ... 阅读详情

说明

补间动画指的是,我们可以通过为精灵的位置、比例、透明度,等属性,设置开始值和结束值,制作动画,动画中间需要的部分由软件自动计算填充。

Pixi 没有内置补间引擎,但是你可以使用很多很好的开源的补间库,比如 Tween.js 和 Dynamic.js 。如果要制作非常专业的自定义补间效果,可以使用这两个库中的其中一个。但是现在我们要使用的是一个名为 Charm.js 的专门用于 Pixi 的补间库。

使用 Charm 库

要开始使用 Charm ,首先直接用 script 标签,引入 js 文件

<script src="https://www.kkkk1000.com/js/Charm.js"></script>

然后创建它的实例

let c = new Charm(PIXI);

变量 c 现在代表 Charm 实例。

和前面的文章中讲到的粒子效果一样,在调用 state 函数之后,必须为游戏循环中的每个帧更新补间。就是在游戏循环中调用 Charm 的 update 方法,如下所示:

function gameLoop() {
    requestAnimationFrame(gameLoop);
    state();
    c.update();
    renderer.render(stage);
}

滑动补间

Charm 最有用的补间效果之一是 slide 。使用 slide 方法可以使精灵从画布上的当前位置平滑移动到任何其他位置。slide 方法有七个参数,但只有前三个参数是必需的。

名称默认值描述
anySprite需要移动的精灵
finalXPosition滑动结束时 x 坐标
finalYPosition滑动结束时 y 坐标
durationInFrames60补间需要的帧数,也就是动画应该持续多长时间
easingType"smoothstep"缓动类型
yoyofalse用于确定精灵是否应在补间的起点和终点之间来回移动。
delayTimeBeforeRepeat0一个以毫秒为单位的数字,用于确定精灵 yoyo 之前的延迟时间。

示例:

以下是如何使用 slide 方法使精灵用120帧从原始位置移动到坐标为(128,128)的位置的关键代码。

c.slide(sprite, 128, 128, 120);

效果图:
[外链图片转存中…(img-dWh2LtFI-1712410081123)]
查看示例

如果你想让精灵在起点和终点之间来回移动,请将 yoyo(第六个参数)设置为 true,代码如下所示:

c.slide(sprite, 128, 128, 120, "smoothstep", true);

查看示例

补间对象

Charm 所有的补间方法都返回一个补间对象,你可以这样创建:

let slidePixie = c.slide(sprite, 80, 128, 120, "smoothstep",true);

slidePixie 就是补间对象,它包含一些有用的属性和方法,可以用于控制补间。

其中一个是 onComplete 方法,它将在补间完成后立即运行。以下代码是精灵到达终点时如何使用 onComplete 方法在控制台中显示消息。

let slidePixie = c.slide(sprite, 80, 128, 120, "smoothstep",true);
slidePixie.onComplete = () => console.log("一次滑动完成");

如果将 yoyo (slide 方法的第六个参数)设置为 true,则每当精灵到达其起点和终点时,onComplete 方法都将运行。

补间还有 pause 和 play 方法,可以停止和开始补间。

slidePixie.pause();
slidePixie.play();

补间对象还具有 playing 属性,如果补间当前正在播放,则该属性值为 true。只不过有些补间方法返回的对象中直接有 playing 属性,有些补间方法返回的对象中的 playing 属性是在一个叫 tweens 的数组中, tweens 数组中包括了这个补间方法创建的所有补间对象。
以 slide 方法为例,完成一个滑动需要创建 x 轴补间对象和 y 轴补间对象,这两个对象都放在了 tweens 数组中,这两个对象也都分别有 playing 属性。

查看示例

所有 Charm 的补间方法都返回你可以控制和访问的补间对象。

设置缓动类型

slide 方法的第四个参数是 easingType 。它是一个字符串,用于确定补间加速和减速的类型。这些类型共有15种可供选择,并且它们对于 Charm 的所有不同补间方法都是相同的。某些类型对应的会有一个基本类型,一个 squared 类型和一个cubed 类型。squared 类型和 cubed 类型只是将基本类型的效果放大而已。大多数 Charm 的补间效果的默认缓动类型是 smoothstep。

Linear:
linear,精灵从开始到停止保持匀速运动。

Smoothstep:
smoothstep,smoothstepSquared,smoothstepCubed。加速精灵并以非常自然的方式减慢速度

Acceleration:
acceleration, accelerationCubed。逐渐加速精灵并突然停止。
如果要更加平滑的加速效果,请使用 sine,sineSquared 或 sineCubed。

Deceleration:
deceleration,decelerationCubed。突然加速精灵并逐渐减慢它。要获得更加平滑的减速效果,请使用inverseSine,inverseSineSquared或inverseSineCubed。

Bounce:
bounce 10 -10 ,这将使精灵到达起点和终点时略微反弹,更改乘数10和 -10,可以改变效果。

查看示例

使用 slide 进行场景过渡

你在游戏或应用程序中肯定要做的一件事就是让场景过渡,然后将新场景滑入视图。它可能是你游戏的标题滑动以显示游戏的第一级,或者可能是一个菜单,可以滑动以显示更多的应用程序内容。你可以使用 slide 方法执行此操作。

首先,创建两个容器对象:sceneOne 和 sceneTwo,并将它们添加到舞台上。

sceneOne = new Container();
sceneTwo = new Container();
stage.addChild(sceneOne);
stage.addChild(sceneTwo);

接下来,为每个场景创建精灵。制作一个像画布一样大的蓝色矩形; 并在矩形中间添加上 Scene One 的文字,将两者都添加到 sceneOne 容器中。再制作一个像画布一样大的红色矩形;并在矩形中间添加上Scene Two 的文字,将这两者添加到 sceneTwo 容器中。你最终得到的两个容器对象,如下图所示。

以下是关键代码:

//1. Scene one sprites:	
//画蓝色矩形
let blueRectangle = new PIXI.Graphics();
blueRectangle.beginFill(0x014ACA);
blueRectangle.drawRect(0, 0, canvasWith, canvasHeight);
blueRectangle.endFill();
sceneOne.addChild(blueRectangle);

//添加文字,并在容器中居中
let sceneOneText = new PIXI.Text("Scene One");
sceneOneText.style = { fill: "#fff", fontSize: "40px" };
let sceneOneTextX = (canvasWith - sceneOneText.width) / 2;
let sceneOneTextY = (canvasWith - sceneOneText.height) / 2;
sceneOneText.position.set(sceneOneTextX, sceneOneTextY);
sceneOne.addChild(sceneOneText);

//2. Scene two sprites:
//画红色矩形
let redRectangle = new PIXI.Graphics();
redRectangle.beginFill(0xEF4631);
redRectangle.drawRect(0, 0, canvasWith, canvasHeight);
redRectangle.endFill();
sceneTwo.addChild(redRectangle);

//添加文字,并在容器中居中
let sceneTwoText = new PIXI.Text("Scene Two");
sceneTwoText.style = { fill: "#fff", fontSize: "40px" };
let sceneTwoTextX = (canvasWith - sceneTwoText.width) / 2;
let sceneTwoTextY = (canvasHeight - sceneTwoText.height) / 2;
sceneTwoText.position.set(sceneTwoTextX, sceneTwoTextY);
sceneTwo.addChild(sceneTwoText);

在一个真实的项目中,你可以为每个容器填充每个场景所需的精灵数量,你也可以为你的项目添加尽可能多的场景容器。

接下来,将 sceneTwo 移开,使其位于画布的右边缘之外。代码如下所示:

sceneTwo.x = canvasWith;

这将在画布上显示 sceneOne,而 sceneTwo 在需要时会从左侧滑出,如下所示。

sceneTwo 就在屏幕外等着。

最后,使用 slide 方法从 sceneOne 过渡到 sceneTwo 。只需将 sceneOne 滑动到左侧,然后从右侧滑动 sceneTwo ,取代它的位置,代码如下。

c.slide(sceneTwo, 0, 0);
c.slide(sceneOne, -canvasWith, 0);

下图显示了这段代码的效果。

查看示例

时间过渡

你可以自定义一个 wait 函数在设定的时间间隔后进行过渡。

function wait(duration = 0) {
    return new Promise((resolve, reject) => {
        setTimeout(resolve, duration);
    });
}

要使用 wait,请为其提供一个参数,它代表你希望等待的时间(以毫秒为单位)。以下是在延迟1秒(1000毫秒)后从 sceneOne 过渡到 sceneTwo 的方法。

wait(1000).then(() => {
    c.slide(sceneTwo, 0, 0);
    c.slide(sceneOne, -canvasWith, 0);
});

查看示例

其实在 Charm 库中已经定义了 wait 这个方法,原理和上面的 wait 函数是一样的。你可以这样使用它。

c.wait(1000).then(() => {
    c.slide(sceneTwo, 0, 0);
    c.slide(sceneOne, -canvasWith, 0);
});

沿贝塞尔曲线移动

如果你还不清楚什么是贝塞尔曲线,可以先看看这篇文章。

slide 方法沿直线为精灵制作动画,但你也可以使用另一种方法(followCurve)使精灵沿贝塞尔曲线移动。首先,将贝塞尔曲线定义为4个坐标点的二维数组,如下所示:

let curve = [
    [sprite.x, sprite.y], //起始点
    [108, 32], //控制点1
    [176, 32], //控制点2
    [196, 160] //结束点
];

followCurve 方法的参数如下:

名称默认值描述
anySprite需要移动的精灵
curve贝塞尔曲线数组
durationInFrames60补间需要的帧数,也就是动画应该持续多长时间
easingType"smoothstep"缓动类型
yoyofalse用于确定精灵是否应在补间的起点和终点之间来回移动。
delayTimeBeforeRepeat0一个以毫秒为单位的数字,用于确定精灵 yoyo 之前的延迟时间。

接下来,使用 Charm 的 followCurve 方法使精灵跟随该曲线。(提供 curve 数组作为第二个参数)

c.followCurve(
 sprite, //需要移动的精灵
 curve, //贝塞尔曲线数组
 120, //持续时间,以帧为单位
 "smoothstep", //缓动类型
 true, //yoyo
 1000 //yoyo之前的延迟时间
);

效果图:

如果你需要使精灵的中点沿着曲线移动,还需要设置精灵的锚点(anchor)居中,如下所示:

sprite.anchor.set(0.5, 0.5);

查看示例

slide 和 followCurve 方法适用于简单的来回动画效果,但你也可以结合它们以使精灵遵循更复杂的路径。

沿路径移动

你可以使用 Charm 的 walkPath 方法连接一系列点,并使精灵移动到每个点。该系列中的每个点都称为 waypoint 。首先,从由坐标点组成的二维数组定位路径点开始,这些 waypoint 映射出你希望精灵遵循的路径。

let waypoints = [
 [32, 32], //要移动到的第一个坐标点
 [32, 128], //要移动到的第二个坐标点
 [300, 128], //要移动到的第三个坐标点
 [300, 32], //要移动到的第四个坐标点
 [32, 32] //要移动到的第五个坐标点
];

你可以根据需要使用任意多的 waypoint。

walkPath 方法的参数如下:

名称默认值描述
anySprite需要移动的精灵
waypoints坐标点的二维数组
durationInFrames60补间需要的帧数,也就是动画应该持续多长时间
easingType"smoothstep"缓动类型
loopfalse用于确定精灵在到达结尾时是否从头开始
yoyofalse用于确定精灵是否应在补间的起点和终点之间来回移动。
delayBetweenSections0一个以毫秒为单位的数字,用于确定精灵在移动到路径的下一部分之前应该等待的时间。

接下来,使用 walkPath 方法使精灵按顺序移动到所有这些点。(前两个参数是必需的)

c.walkPath(
    sprite, //需要移动的精灵
    waypoints, //坐标点的二维数组
    300, //持续时间,以帧为单位
    "smoothstep", //缓动类型
    true, //循环
    true, //轮流反向播放动画
    1000 //移动到路径的下一部分之前应该等待的时间
);

效果图:

[外链图片转存中…(img-yD11Ytvu-1712410081126)]

查看示例

而使用 walkCurve 方法,可以使精灵遵循一系列连接的贝塞尔曲线。首先,创建任何贝塞尔曲线数组,描述你希望精灵遵循的路径。

let curvedWaypoints = [
 //第一条曲线
 [[sprite.x, sprite.y],[75, 500],[200, 500],[300, 300]],
 //第二条曲线
 [[300, 300],[250, 100],[100, 100],[sprite.x, sprite.y]]
];

每条曲线的四个点与 followCurve 方法中的相同:起始位置,控制点1,控制点2和结束位置。第一条曲线中的最后一个点应与下一条曲线中的第一个点相同。你可以根据需要使用尽可能多的曲线。

walkCurve 方法的参数如下:

名称默认值描述
anySprite需要移动的精灵
curvedWaypoints贝塞尔曲线的坐标点的数组
durationInFrames60补间需要的帧数,也就是动画应该持续多长时间
easingType"smoothstep"缓动类型
yoyofalse用于确定精灵是否应在补间的起点和终点之间来回移动。
delayBeforeContinue0一个以毫秒为单位的数字,用于确定精灵yoyo之前的延迟时间。

接下来,提供 curvedWaypoints 数组作为 walkCurve 方法中的第二个参数,来试试这个方法。

c.walkCurve(
    sprite, //需要移动的精灵
    curvedWaypoints, //贝塞尔曲线的坐标点的数组
    300, //持续时间,以帧为单位
    "smoothstep", //缓动类型
    true, //循环
    true, //轮流反向播放动画
    1000 //移动到路径的下一部分之前应该等待的时间
);

效果图:

[外链图片转存中…(img-oA2tSUes-1712410081126)]

查看示例

使用 walkPath 和 walkCurve 将为你提供了一个很好的开端,它们可以为游戏制作一些有趣的动画。

更多补间效果

Charm 有许多其他内置的补间效果,你会发现它们在游戏和应用程序中有很多用处。下面是其他一些效果的介绍。

fadeOut 和 fadeIn
fadeOut 方法使精灵逐渐变得透明,fadeIn 方法使精灵从透明逐渐显现。这两个方法需要的参数是一样的。

参数:

名称默认值描述
anySprite需要产生效果的精灵
durationInFrames60持续的帧数

示例:

c.fadeOut(anySprite);
c.fadeIn(anySprite);

查看示例

pulse

使用 pulse 方法可以使精灵以稳定的速率连续淡入淡出。

参数:

名称默认值描述
anySprite需要产生效果的精灵
durationInFrames60淡入淡出应该持续的帧数,也就是持续时间
minAlpha0精灵可以减少到的最小的透明度值

示例:

c.pulse(anySprite);

查看示例

如果你只希望精灵在再次淡入之前变为半透明,请将第三个参数设置为0.5,如下所示:

c.pulse(anySprite, 60, 0.5);

scale

你可以使用 scale 方法让精灵产生缩放效果。

参数:

名称默认值描述
anySprite需要产生效果的精灵
endScaleX0.5x 轴缩放的比例
endScaleY0.5y 轴缩放的比例
durationInFrames60持续时间,以帧为单位

示例:

c.scale(
    sprite, //精灵
    0.1, //x轴缩放的比例
    0.1, //y轴缩放的比例
    100 //持续时间,以帧为单位
);

查看示例

breathe

如果你希望缩放效果来回 yoyo,请使用 breathe 方法。它是一种缩放效果,使精灵看起来好像在呼吸。

参数:

名称默认值描述
anySprite需要产生效果的精灵
endScaleX0.5x 轴缩放的比例
endScaleY0.5y 轴缩放的比例
durationInFrames60持续时间,以帧为单位
yoyotrue是否轮流反向播放
delayBeforeRepeat0一个以毫秒为单位的数字,用于确定精灵 yoyo 之前的延迟时间。

示例:

c.breathe(
    sprite, //精灵
    0.1, //x轴缩放的比例
    0.1, //y轴缩放的比例
    100, //持续时间,以帧为单位
    true, //轮流反向播放 
    0, //yoyo 之间的延迟时间
);

查看示例

strobe

使用 strobe 方法通过快速改变精灵比例,使精灵看起来像闪光灯一样闪烁。

参数:
只需要传入一个精灵作为参数即可。

示例:

c.strobe(sprite);

查看示例

wobble

使用 wobble 方法可以使精灵像果冻一样摆动。

参数:
只需要传入一个精灵作为参数即可。

示例:

c.wobble(sprite);

查看示例

如果你使用这些缩放补间效果(scale,breathe,strobe,或者 wobble),将精灵的锚点居中,就可以从精灵的中心进行缩放。

sprite.anchor.set(0.5, 0.5);

注意:
目前, Charm 这个库支持的 Pixi 版本是 3.0.11。如果使用比较高的版本会有一些问题,比如出现这样的警告。

这是因为 Pixi 版本4.0.0起已弃用 ParticleContainer ,改为使用 particles.ParticleContainer 了。所以要解决这个问题需要把 Charm.js 文件中的 ParticleContainer 改为 particles.ParticleContainer 。

上一篇 学习 PixiJS — 视觉效果

下一篇 学习 PixiJS — 碰撞检测

PixiJS教程(001):Pixi简介以及基本使用 PixiJS是一款高效的开源2D渲染引擎,支持WebGL和Canvas,适用于游戏、动画、数据可视化等场景。本文介绍了PixiJS的基本特点、安装方法以及图形绘制功能。通过Vue项目集成PixiJS,演示了如何创建矩形、圆形,并对图形进行缩放、位移、旋转等操作。PixiJS凭借其高性能渲染和易用API,成为开发富媒体交互应用的理想选择。 阅读详情

相关推荐

探索Pixi.js的潜力:打造专业级网页游戏《消消乐》(上)

网页游戏以其便携性通常内嵌在各大app中,通过提供沉浸式的游戏体验拉近用户与app之间的距离,最终将用户流量转换为具体的物质价值,这就是网页游戏的价值之一。 本文将带你从零使用Pixi.js打造一款专业级别的网页游戏---消消乐

weixin_45013937的博客 2277

Pixi.js技术探索:开发者必备的视觉开发工具

pixi.js是一个开源的轻量级2D渲染引擎,专注于利用WebGL和HTML5中的Canvas技术来实现高性能的交互式图形和动画。它旨在提供一个简单而强大的工具集,使开发者能够轻松地创建各种类型的视觉效果,包括游戏、数据可视化、广告和其他富媒体应用程序。

ztK63LrD的博客 4925

冷热电多微网储能配置的双层优化方法与实践

能源互联网中的微网系统通过整合分布式发电、储能设备和多元负荷实现区域能源协同管理。其核心在于优化算法对储能容量的科学配置,其中双层优化方法通过分离规划层与运行层决策,利用KKT条件耦合求解,有效解决了长期投资与短期调度的矛盾。在Matlab实践中,采用YALMIP工具箱结合Gurobi求解器,配合大M法处理非线性互补约束,可显著提升冷热电联供系统的经济性。典型应用场景包括工业园区和医院等能源多元负荷场合,需特别注意负荷数据预处理和设备启停约束等工程细节。

weixin_34327761的博客 470

Pixi.js 使用指南

Pixi.js 是一个高性能的 2D 渲染引擎,广泛应用于游戏开发、动画制作和数据可视化。它基于 WebGL,提供了卓越的渲染性能,同时兼容 HTML5 Canvas 作为后备渲染器。本文将介绍 Pixi.js 的基本使用方法,涵盖初始化、绘制基本图形、处理事件和创建动画等内容。Pixi.js 是一个功能强大且高性能的 2D 渲染引擎,适用于各种需要复杂图形和动画的应用场景。通过本文的介绍,您应该已经掌握了 Pixi.js 的基本使用方法,包括创建应用、绘制基本图形、处理事件和动画等。

前端程序猿的博客 3298

charm.js:用更优雅的方式调用RESTful APIs

charm.js =========== 以更优雅的方式调用RESTful APIs,在charm.js中,你可以使用router.project(1).issue(2).retrieve()这样的方式来调用你的API。 过去 var project_id = '5433d5e4e737cbe96dcef312' var issue_id = '5434f2a85a68db8073c4a29e' var url = 'api/project/' + project_id + '/issue/' + issue_id //get $.ajax({ url: url, type: 'GET', success: function(result){ //do something } }) //post $.ajax({ url: url, type: 'post', data:

微调BERT进行中文文本分类任务(Pytorch代码实现)

BERT(Bidirectional Encoder Representation from Transformers)是2018年10月由Google AI研究院提出的一种预训练模型。其模型结构由多层Transformer的Encoder堆叠而成,在大规模语料中进行预训练后,迁移到下游任务,仅进行参数微调训练,就能显著提升性能。本文聚焦于微调中文BERT进行新闻标题分类任务的代码实现。

Iswayzw的博客 1万+

学习 PixiJS — 动画精灵

说明 看完官方教程中提到的这本书 — Learn Pixi.js ,准备写写读后感了,官方教程中所说的内容,基本上就是书的前4章,所以我就从第5章开始写写吧。 ...

FEWY的博客 6975

基于BFQ19S的共射振荡器设计(克拉泼电容三点式)

根据理论,设计出如下LC振荡器: 一、设计初期是使用= 400Mhz作为目标值计算的, 但由于计算值与实际值有差别,所以使用计算值附近的元器件代替使用;最终该电路的L1=82nH , D1 = 5.6pF, C11=18pF, C12 = 18pF ; 另外R3= 600Ω, R4取27k , C9取10pF; 该电路实际的震荡频率为主要为L1,D1 决定,所以其震荡频率约为 == 235Mhz; 二、由于实际得到的频率比目标频率低太多,所以调整电路使其能达到400M左...

rzchong1988的专栏 3704

PixiJS核心概念及简单上手

PixiJS核心概念及简单上手 0. PixiJS 介绍 PixiJS是一个轻量级的2D渲染引擎,它能自动侦测使用WebGL还是Canvas来创建图形。开发者无需专门学习 WebGL 就能感受到强大的硬件加速的力量。 PixiJS 会帮助你用 JavaScript 或者其他 HTML5 技术来显示媒体,创建动画或管理交互式图像(精灵),从而制作一个游戏或应用。它拥有语义化简洁的 API 接口。比如支持纹理贴图集和为精灵提供了一些简单的动画系统。它也提供了一个完备的场景图,你可以在精灵图层里面创建另一个精灵

小平果的欢乐谷 8678

[QMT量化交易小白入门]-八十九、深度学习训练多维特征进行金融价格行情预测

本专栏主要是介绍QMT的基础用法,常见函数,写策略的方法,也会分享一些量化交易的思路,大概会写100篇左右。QMT的相关资料较少,在使用过程中不断的摸索,遇到了一些问题,记录下来和大家一起沟通,共同进步。

木头大左的博客 218

Alist/Openlist 的 WebDAV 老是连不上?别再乱试了,这才是标准答案!(1Panel如何使用Alist/Openlist作为备份账号)

😫服务器硬盘告急,想用 Alist/Openlist 的 WebDAV 备份却屡屡失败?别慌!本文带你揭秘正确的连接地址和权限配置,手把手教你搞定 1Panel 备份设置,让你的网盘秒变备份仓库!

XiaoqiangClub的博客 5576

教你用PixiJs实现复杂动画

前言此篇文章源于前段时间商业有个项目需求,要实现一个比较复杂的H5交互动画。那说到动画常用的技术方案无非是下面几种:gif图css3动画属性原生Javascript实现CanvasWeb...

大转转FE 4786

我的世界进阶模组开发教程——制作机械动力附属模组

摘要: Create是Minecraft的机械动力模组,其代码结构分为多个关键模块: 数据生成系统:通过CreateRecipeProvider基类实现配方自动化生成,支持多步骤序列化装配配方(SequencedAssemblyRecipeGen),采用建造者模式链式调用; 注册管理:CreateRegistrate扩展了Registrate库,统一管理方块、流体、实体等注册,集成标签页分类和工具提示定制; 伤害系统:DamageTypeTagGen为机械伤害(如钻头、风扇火焰)定义原版兼容的标签; 客户端

qq_24992377的博客 2083

模仿网易四字魔咒:PixiJS实现h5一镜到底

目录 前言 1.代码地址与demo效果图 2.项目技术架构分析 3. PixiJS 3.1 pixi常见概念介绍 3.2 创建应用 3.3 预加载资源 3.4 初始化场景 3.5 初始化精灵 4. AlloyTouch 5. TimelineMax 6. 初始化动画 7. 舞台的整体缩放与旋转 8.添加背景音乐 总结 后记 // 续更 2019-09-08 (1...

吴纯玲的博客 1万+

PyTorch强化学习实战(1)——强化学习(Reinforcement Learning,RL)详解

在本节中,开始进入探索强化学习 (Reinforcement Learning, RL) 之旅,首先剖析了强化学习的独特之处及其与监督学习、无监督学习范式的关系。随后系统学习了强化学习的基础形式化框架及其内部关联机制,并深入讲解了马尔可夫过程 (Markov Process, MP)、马尔可夫奖励过程 (Markov Reward Process, MRP) 和马尔可夫决策过程 (Markov Decision Process, MDP),为后续学习奠定基础。

盼小辉丶的博客 2050

密码学与信息安全面试题及参考答案(2万字长文)

密码学是一门研究信息安全的学科,它涉及加密、解密以及保护数据免受非授权访问的技术和方法。这门学科的核心在于设计并分析各种协议,使通信双方即使在存在潜在敌手的环境中也能安全地传输信息。保密性:确保信息只能被预期的接收方读取,阻止未经授权的第三方获取信息的真实内容。完整性:保证数据在传输过程中不被篡改,确保接收方接收到的信息与发送方发送的信息完全一致。认证性:验证信息的来源,即确认信息确实是由声称的发送方发出的。不可否认性:确保发送方不能在事后否认曾经发送过某条信息。访问控制。

大模型大数据攻城狮的专栏 1993

开始学习 PixiJS

PixiJS Pixi是一个超快的2D渲染引擎。这意味着什么呢?这意味着它会帮助你用JavaScript或者其他HTML5技术来显示媒体,创建动画或管理交互式图像,从而制作一个游戏或应用。它拥有语义化的,简洁的API接口并且加入了一些非常有用的特性。比如支持纹理贴图集和为精灵(交互式图像)提供了一个简单的动画系统。它也提供了一个完备的场景图,你可以在精灵图层里面创建另一个精灵,当然也可以让精灵响应...

FEWY的博客 2518

第一章:Profibus DP通信简介

PROFIBUS (Process Fieldbus)的缩写,是一种国际化的、开放的、不依赖于设备生产商的现场总线标准。它广泛应用于制造业自动化、流程工业自动化和楼宇、交通、电力等其他工业自动化领域。串行现场总线主要用来连接数字现场设备或中、低功能的系统,如传感器、执行机构、变送器、可编程序控制器(PLC)、数控装置(NC)、编程设备、本地人机接口等。

qq_22560021的博客 4892
上一篇: 学习 PixiJS — 视觉效果
下一篇: 学习 PixiJS — 碰撞检测
FEWY
FEWY 领域专家: 前端开发技术领域 领域专家: 前端开发技术领域
博客等级 码龄10年 504粉丝 77原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值