首页 > 其他分享 >Cocos Creator引擎开发:物理引擎使用_物理触发器与事件处理

Cocos Creator引擎开发:物理引擎使用_物理触发器与事件处理

时间:2024-11-21 20:49:23浏览次数:3  
标签:事件处理 触发器 otherCollider 玩家 引擎 IPhysics2DContact 节点 物理

物理触发器与事件处理

在Cocos Creator中,物理触发器和事件处理是实现复杂物理交互的重要手段。物理触发器(Trigger)是一种特殊的碰撞体,用于检测物体之间的接触,但不会产生物理响应。事件处理则是当触发器检测到接触时,执行特定的逻辑。

物理触发器的基本概念

物理触发器在物理世界中主要用于检测物体之间的接触,但不会产生任何物理反应。这意味着,当一个物体进入或离开触发器的范围时,触发器会生成事件,但不会改变物体的运动状态。触发器在游戏中的常见用途包括检测玩家进入特定区域、触发特定事件、计分等。

创建物理触发器

在Cocos Creator中,创建物理触发器非常简单。你只需要在碰撞体组件(如 BoxColliderCircleColliderPolygonCollider 等)中启用触发器属性即可。

示例:创建一个BoxCollider触发器
  1. 在场景中创建一个节点,并为其添加 BoxCollider 组件。

  2. BoxCollider 组件中,勾选 Is Trigger 属性。


# 在节点上添加BoxCollider组件

- BoxCollider:

    size: [1, 1]  # 触发器的大小

    offset: [0, 0]  # 触发器的偏移

    isTrigger: true  # 启用触发器

触发器事件

当物体进入或离开触发器时,物理引擎会生成相应的事件。Cocos Creator提供了以下几种触发器事件:

  • onBeginContact:当物体开始接触触发器时触发。

  • onEndContact:当物体结束接触触发器时触发。

  • onPreSolve:在每个物理步中,当物体仍然接触触发器时触发。

  • onPostSolve:在每个物理步中,当物体仍然接触触发器且物理计算完成后触发。

这些事件可以通过在脚本中实现相应的回调函数来处理。

示例:处理触发器事件

假设我们有一个玩家节点和一个触发器节点,我们需要在玩家进入触发器时显示一个提示信息。

  1. 创建一个玩家节点,并为其添加 RigidBody 组件。

  2. 创建一个触发器节点,并为其添加 BoxCollider 组件,勾选 Is Trigger 属性。

  3. 为触发器节点编写脚本,处理触发器事件。


// 创建一个名为TriggerHandler的脚本

import { _decorator, Component, Node, contact2D, Contact2DType, IPhysics2DContact } from 'cc';

const { ccclass, property } = _decorator;



@ccclass('TriggerHandler')

export class TriggerHandler extends Component {

    // 触发器开始接触时的回调函数

    @contact2D(Contact2DType.BEGIN_CONTACT)

    onBeginContact (selfCollider: IPhysics2DContact, otherCollider: IPhysics2DContact, contact: IPhysics2DContact) {

        if (otherCollider.tag === 'player') {

            console.log('玩家进入触发器');

        }

    }



    // 触发器结束接触时的回调函数

    @contact2D(Contact2DType.END_CONTACT)

    onEndContact (selfCollider: IPhysics2DContact, otherCollider: IPhysics2DContact, contact: IPhysics2DContact) {

        if (otherCollider.tag === 'player') {

            console.log('玩家离开触发器');

        }

    }



    // 每个物理步中,当物体仍然接触触发器时的回调函数

    @contact2D(Contact2DType.PRE_SOLVE)

    onPreSolve (selfCollider: IPhysics2DContact, otherCollider: IPhysics2DContact, contact: IPhysics2DContact) {

        if (otherCollider.tag === 'player') {

            // 可以在这里处理持续接触的逻辑

        }

    }



    // 每个物理步中,当物体仍然接触触发器且物理计算完成后触发的回调函数

    @contact2D(Contact2DType.POST_SOLVE)

    onPostSolve (selfCollider: IPhysics2DContact, otherCollider: IPhysics2DContact, contact: IPhysics2DContact) {

        if (otherCollider.tag === 'player') {

            // 可以在这里处理物理计算完成后的逻辑

        }

    }

}

触发器事件的注意事项

  1. 标签(Tag)的使用:为了区分不同的碰撞体,可以为碰撞体设置标签。在触发器事件中,通过标签来判断接触的物体类型。

  2. 接触的顺序:在触发器事件中,selfCollider 总是指向触发器本身,otherCollider 指向进入或离开触发器的物体。

  3. 性能优化:大量触发器事件可能会对性能造成影响,因此要合理使用触发器,避免不必要的检测。

触发器与碰撞体的区别

触发器和碰撞体虽然都是物理世界中的对象,但它们的用途和行为有所不同。

  • 碰撞体:用于模拟物理碰撞,会改变物体的运动状态。例如,玩家角色与障碍物的碰撞会导致玩家角色停止或反弹。

  • 触发器:用于检测物体之间的接触,但不会改变物体的运动状态。例如,玩家角色进入一个触发器区域,触发一个提示信息,但不会改变玩家角色的运动状态。

示例:触发器与碰撞体的对比

假设我们有一个玩家节点和两个节点:一个带有碰撞体的障碍物节点,一个带有触发器的区域节点。

  1. 障碍物节点:创建一个节点,并为其添加 BoxCollider 组件,不勾选 Is Trigger 属性。

  2. 区域节点:创建一个节点,并为其添加 BoxCollider 组件,勾选 Is Trigger 属性。

  3. 玩家节点:创建一个节点,并为其添加 RigidBody 组件和 BoxCollider 组件。


// 创建一个名为PlayerHandler的脚本

import { _decorator, Component, Node, contact2D, Contact2DType, IPhysics2DContact, RigidBody } from 'cc';

const { ccclass, property } = _decorator;



@ccclass('PlayerHandler')

export class PlayerHandler extends Component {

    // 碰撞开始时的回调函数

    @contact2D(Contact2DType.BEGIN_CONTACT)

    onBeginContact (selfCollider: IPhysics2DContact, otherCollider: IPhysics2DContact, contact: IPhysics2DContact) {

        if (otherCollider.tag === 'obstacle') {

            console.log('玩家碰到障碍物');

            // 可以在这里处理碰撞逻辑,例如停止玩家的运动

            this.getComponent(RigidBody).linearVelocity = cc.Vec2.ZERO;

        } else if (otherCollider.tag === 'trigger') {

            console.log('玩家进入触发器区域');

            // 可以在这里处理触发器逻辑,例如显示提示信息

        }

    }



    // 碰撞结束时的回调函数

    @contact2D(Contact2DType.END_CONTACT)

    onEndContact (selfCollider: IPhysics2DContact, otherCollider: IPhysics2DContact, contact: IPhysics2DContact) {

        if (otherCollider.tag === 'obstacle') {

            console.log('玩家离开障碍物');

        } else if (otherCollider.tag === 'trigger') {

            console.log('玩家离开触发器区域');

        }

    }

}

在这个示例中,当玩家碰到障碍物时,玩家的运动会被停止;当玩家进入触发器区域时,会显示一个提示信息,但玩家的运动状态不会改变。

触发器的高级用法

多触发器区域

在某些情况下,你可能需要在一个区域内设置多个触发器,以实现更复杂的逻辑。例如,一个大型的触发器区域可以包含多个小型触发器,每个小型触发器负责不同的功能。

示例:多触发器区域

假设我们有一个大型的触发器区域,其中包含两个小型触发器:一个用于增加分数,另一个用于减少分数。

  1. 大型触发器节点:创建一个节点,并为其添加 BoxCollider 组件,勾选 Is Trigger 属性。

  2. 小型触发器节点:在大型触发器节点下创建两个子节点,分别为其添加 BoxCollider 组件,勾选 Is Trigger 属性。

  3. 玩家节点:创建一个节点,并为其添加 RigidBody 组件和 BoxCollider 组件。

  4. 脚本:为大型触发器节点编写脚本,处理子触发器的事件。


// 创建一个名为MultiTriggerHandler的脚本

import { _decorator, Component, Node, contact2D, Contact2DType, IPhysics2DContact } from 'cc';

const { ccclass, property } = _decorator;



@ccclass('MultiTriggerHandler')

export class MultiTriggerHandler extends Component {

    @property(Node)

    scoreNode: Node = null;



    @property

    score: number = 0;



    start() {

        this.scoreNode.addComponent(Label).string = `Score: ${this.score}`;

    }



    // 触发器开始接触时的回调函数

    @contact2D(Contact2DType.BEGIN_CONTACT)

    onBeginContact (selfCollider: IPhysics2DContact, otherCollider: IPhysics2DContact, contact: IPhysics2DContact) {

        if (otherCollider.tag === 'player') {

            if (selfCollider.tag === 'addScore') {

                this.addScore();

            } else if (selfCollider.tag === 'subtractScore') {

                this.subtractScore();

            }

        }

    }



    // 触发器结束接触时的回调函数

    @contact2D(Contact2DType.END_CONTACT)

    onEndContact (selfCollider: IPhysics2DContact, otherCollider: IPhysics2DContact, contact: IPhysics2DContact) {

        if (otherCollider.tag === 'player') {

            // 可以在这里处理离开触发器的逻辑

        }

    }



    addScore() {

        this.score += 10;

        this.scoreNode.getComponent(Label).string = `Score: ${this.score}`;

    }



    subtractScore() {

        this.score -= 5;

        this.scoreNode.getComponent(Label).string = `Score: ${this.score}`;

    }

}

在这个示例中,大型触发器节点包含两个子节点,一个用于增加分数,另一个用于减少分数。当玩家进入或离开这些子节点时,触发相应的逻辑。

触发器与非物理对象的交互

触发器不仅可以与带有 RigidBody 的物理对象交互,还可以与非物理对象交互。例如,你可以创建一个不带 RigidBody 的节点,用于检测玩家是否进入了某个区域,但不希望该区域产生物理反应。

示例:触发器与非物理对象的交互

假设我们有一个触发器节点和一个非物理对象节点,用于检测玩家是否进入了某个区域。

  1. 触发器节点:创建一个节点,并为其添加 BoxCollider 组件,勾选 Is Trigger 属性。

  2. 非物理对象节点:创建一个节点,不添加 RigidBody 组件。

  3. 玩家节点:创建一个节点,并为其添加 RigidBody 组件和 BoxCollider 组件。

  4. 脚本:为触发器节点编写脚本,处理与非物理对象的事件。


// 创建一个名为NonPhysicalTriggerHandler的脚本

import { _decorator, Component, Node, contact2D, Contact2DType, IPhysics2DContact } from 'cc';

const { ccclass, property } = _decorator;



@ccclass('NonPhysicalTriggerHandler')

export class NonPhysicalTriggerHandler extends Component {

    @property(Node)

    regionNode: Node = null;



    start() {

        this.regionNode.addComponent(BoxCollider).isTrigger = true;

    }



    // 触发器开始接触时的回调函数

    @contact2D(Contact2DType.BEGIN_CONTACT)

    onBeginContact (selfCollider: IPhysics2DContact, otherCollider: IPhysics2DContact, contact: IPhysics2DContact) {

        if (otherCollider.tag === 'player') {

            console.log('玩家进入非物理区域');

            // 可以在这里处理进入区域的逻辑

        }

    }



    // 触发器结束接触时的回调函数

    @contact2D(Contact2DType.END_CONTACT)

    onEndContact (selfCollider: IPhysics2DContact, otherCollider: IPhysics2DContact, contact: IPhysics2DContact) {

        if (otherCollider.tag === 'player') {

            console.log('玩家离开非物理区域');

            // 可以在这里处理离开区域的逻辑

        }

    }

}

在这个示例中,触发器节点可以检测玩家是否进入了非物理对象节点的区域,但不会对玩家产生任何物理影响。

触发器的动态特性

触发器不仅可以静态地存在于场景中,还可以动态地创建和销毁。这在某些情况下非常有用,例如在游戏关卡中动态生成触发器区域。

示例:动态创建和销毁触发器

假设我们需要在玩家进入某个区域时动态创建一个新的触发器区域,并在玩家离开时销毁该触发器区域。

  1. 玩家节点:创建一个节点,并为其添加 RigidBody 组件和 BoxCollider 组件。

  2. 脚本:为玩家节点编写脚本,处理动态触发器的创建和销毁。


// 创建一个名为DynamicTriggerHandler的脚本

import { _decorator, Component, Node, contact2D, Contact2DType, IPhysics2DContact, BoxCollider } from 'cc';

const { ccclass, property } = _decorator;



@ccclass('DynamicTriggerHandler')

export class DynamicTriggerHandler extends Component {

    @property(Node)

    triggerRegion: Node = null;



    start() {

        this.createTriggerRegion();

    }



    // 触发器开始接触时的回调函数

    @contact2D(Contact2DType.BEGIN_CONTACT)

    onBeginContact (selfCollider: IPhysics2DContact, otherCollider: IPhysics2DContact, contact: IPhysics2DContact) {

        if (otherCollider.tag === 'trigger') {

            console.log('玩家进入动态触发器区域');

            // 可以在这里处理进入区域的逻辑

        }

    }



    // 触发器结束接触时的回调函数

    @contact2D(Contact2DType.END_CONTACT)

    onEndContact (selfCollider: IPhysics2DContact, otherCollider: IPhysics2DContact, contact: IPhysics2DContact) {

        if (otherCollider.tag === 'trigger') {

            console.log('玩家离开动态触发器区域');

            this.destroyTriggerRegion();

        }

    }



    createTriggerRegion() {

        if (!this.triggerRegion) {

            this.triggerRegion = new Node('DynamicTrigger');

            this.triggerRegion.addComponent(BoxCollider).isTrigger = true;

            this.triggerRegion.getComponent(BoxCollider).size = cc.size(1, 1);

            this.triggerRegion.getComponent(BoxCollider).tag = 'trigger';

            this.triggerRegion.setParent(this.node);

        }

    }



    destroyTriggerRegion() {

        if (this.triggerRegion) {

            this.triggerRegion.destroy();

            this.triggerRegion = null;

        }

    }

}

在这个示例中,当玩家进入某个区域时,会动态创建一个新的触发器区域;当玩家离开该区域时,会销毁该触发器区域。

触发器与物理模拟的结合

触发器不仅可以用于简单的事件检测,还可以与物理模拟结合,实现更复杂的逻辑。例如,你可以使用触发器来检测玩家是否进入了一个加速区域,然后在玩家进入该区域时应用一个力,使其加速。

示例:触发器与物理模拟的结合

假设我们有一个加速区域,当玩家进入该区域时,玩家的速度会增加。

  1. 触发器节点:创建一个节点,并为其添加 BoxCollider 组件,勾选 Is Trigger 属性。

  2. 玩家节点:创建一个节点,并为其添加 RigidBody 组件和 BoxCollider 组件。

  3. 脚本:为触发器节点编写脚本,处理玩家进入和离开加速区域的逻辑。


// 创建一个名为SpeedBoostTriggerHandler的脚本

import { _decorator, Component, Node, contact2D, Contact2DType, IPhysics2DContact, RigidBody } from 'cc';

const { ccclass, property } = _decorator;



@ccclass('SpeedBoostTriggerHandler')

export class SpeedBoostTriggerHandler extends Component {

    @property(Node)

    playerNode: Node = null;



    @property

    boostForce: cc.Vec2 = cc.v2(0, 0);



    start() {

        if (this.playerNode) {

            this.playerNode.addComponent(RigidBody);

            this.playerNode.addComponent(BoxCollider);

        }

    }



    // 触发器开始接触时的回调函数

    @contact2D(Contact2DType.BEGIN_CONTACT)

    onBeginContact (selfCollider: IPhysics2DContact, otherCollider: IPhysics2DContact, contact: IPhysics2DContact) {

        if (otherCollider.tag === 'player') {

            console.log('玩家进入加速区域');

            this.applyBoostForce();

        }

    }



    // 触发器结束接触时的回调函数

    @contact2D(Contact2DType.END_CONTACT)

    onEndContact (selfCollider: IPhysics2DContact, otherCollider: IPhysics2DContact, contact: IPhysics2DContact) {

        if (otherCollider.tag === 'player') {

            console.log('玩家离开加速区域');

            this.resetPlayerSpeed();

        }

    }



    applyBoostForce() {

        if (this.playerNode) {

            this.playerNode.getComponent(RigidBody).applyForce(this.boostForce, cc.v2(0, 0));

        }

    }



    resetPlayerSpeed() {

        if (this.playerNode) {

            this.playerNode.getComponent(RigidBody).linearVelocity = cc.v2(0, 0);

        }

    }

}

在这个示例中,当玩家进入加速区域时,会应用一个力使其加速;当玩家离开加速区域时,会重置玩家的速度。

触发器事件的优化

在处理大量触发器事件时,性能优化是非常重要的。以下是一些优化建议:

  1. 减少触发器的数量:尽量减少场景中的触发器数量,特别是那些频繁接触的触发器。过多的触发器会增加物理引擎的负担,导致游戏性能下降。可以通过合并多个触发器区域或者使用逻辑判断来减少触发器的数量。

  2. 使用层级结构:将触发器节点组织成层级结构,可以更高效地管理和处理触发器事件。例如,将多个小型触发器作为子节点附属于一个大型触发器节点,这样可以减少物理引擎的检测次数。

  3. 合理设置碰撞检测:根据游戏需求,合理设置碰撞检测的条件。例如,可以使用标签(Tag)来区分不同的碰撞体,只处理特定类型的碰撞事件。

  4. 延迟处理事件:在某些情况下,可以在触发器事件中延迟处理某些逻辑,例如使用 setTimeoutsetInterval 来分批处理事件,避免一次性处理大量事件导致卡顿。

  5. 使用事件池:如果频繁地创建和销毁触发器事件,可以考虑使用事件池来管理这些事件,减少内存分配和垃圾回收的压力。

示例:使用层级结构优化触发器

假设我们有一个大型的触发器区域,其中包含多个小型触发器。通过将这些小型触发器作为子节点附属于大型触发器节点,可以减少物理引擎的检测次数。

  1. 大型触发器节点:创建一个节点,并为其添加 BoxCollider 组件,勾选 Is Trigger 属性。

  2. 小型触发器节点:在大型触发器节点下创建多个子节点,分别为其添加 BoxCollider 组件,勾选 Is Trigger 属性。

  3. 玩家节点:创建一个节点,并为其添加 RigidBody 组件和 BoxCollider 组件。

  4. 脚本:为大型触发器节点编写脚本,处理子触发器的事件。


// 创建一个名为OptimizedMultiTriggerHandler的脚本

import { _decorator, Component, Node, contact2D, Contact2DType, IPhysics2DContact, Label } from 'cc';

const { ccclass, property } = _decorator;



@ccclass('OptimizedMultiTriggerHandler')

export class OptimizedMultiTriggerHandler extends Component {

    @property(Node)

    scoreNode: Node = null;



    @property

    score: number = 0;



    start() {

        this.scoreNode.addComponent(Label).string = `Score: ${this.score}`;

    }



    // 触发器开始接触时的回调函数

    @contact2D(Contact2DType.BEGIN_CONTACT)

    onBeginContact (selfCollider: IPhysics2DContact, otherCollider: IPhysics2DContact, contact: IPhysics2DContact) {

        if (otherCollider.tag === 'player') {

            const triggerTag = selfCollider.tag;

            if (triggerTag === 'addScore') {

                this.addScore();

            } else if (triggerTag === 'subtractScore') {

                this.subtractScore();

            }

        }

    }



    // 触发器结束接触时的回调函数

    @contact2D(Contact2DType.END_CONTACT)

    onEndContact (selfCollider: IPhysics2DContact, otherCollider: IPhysics2DContact, contact: IPhysics2DContact) {

        if (otherCollider.tag === 'player') {

            // 可以在这里处理离开触发器的逻辑

        }

    }



    addScore() {

        this.score += 10;

        this.scoreNode.getComponent(Label).string = `Score: ${this.score}`;

    }



    subtractScore() {

        this.score -= 5;

        this.scoreNode.getComponent(Label).string = `Score: ${this.score}`;

    }

}

在这个示例中,大型触发器节点包含多个小型触发器子节点,每个子节点负责不同的功能。通过将这些子节点组织在层级结构中,可以减少物理引擎的检测次数,提高性能。

触发器事件的调试

调试触发器事件是确保物理交互逻辑正确的重要步骤。Cocos Creator 提供了一些调试工具和方法,帮助你更有效地调试触发器事件。

  1. 启用物理调试:在 Cocos Creator 的编辑器中,可以通过 Physics Manager 组件启用物理调试,显示物理碰撞体和触发器。

  2. 使用控制台日志:通过在触发器事件的回调函数中使用 console.log 输出调试信息,可以方便地检查事件的触发情况。

  3. 可视化调试:可以使用可视化工具或自定义的调试方法,例如在触发器区域内显示一个视觉提示,帮助你确认触发器是否正常工作。

示例:启用物理调试
  1. 在场景中选择 Physics Manager 组件。

  2. 勾选 Debug Draw 属性。


# 在Physics Manager组件中启用Debug Draw

- PhysicsManager:

    debugDraw: true

启用物理调试后,场景中会显示物理碰撞体和触发器的轮廓,帮助你确认触发器的设置是否正确。

总结

在 Cocos Creator 中,物理触发器和事件处理是实现复杂物理交互的重要手段。通过合理使用触发器,可以检测物体之间的接触并执行特定的逻辑,而不会产生物理响应。触发器不仅可以用于简单的事件检测,还可以与物理模拟结合,实现更复杂的逻辑。在处理大量触发器事件时,需要注意性能优化,合理设置碰撞检测条件,使用层级结构和事件池等方法来提高性能。

通过本文的介绍和示例,希望你能更好地理解和使用 Cocos Creator 中的物理触发器和事件处理功能,为你的游戏添加更多的互动性和趣味性。
在这里插入图片描述

标签:事件处理,触发器,otherCollider,玩家,引擎,IPhysics2DContact,节点,物理
From: https://blog.csdn.net/chenlz2007/article/details/143954465

相关文章

  • Cocos Creator引擎开发:物理引擎使用_物理世界的设置与调试
    物理世界的设置与调试在CocosCreator中,物理引擎是模拟现实世界物理规律的关键组件,它可以帮助开发者实现逼真的物理效果,如碰撞检测、刚体运动、关节连接等。本节将详细介绍如何在CocosCreator中设置和调试物理世界,包括物理世界的初始化、物理材质的设置、物理关节的使用以......
  • 15、物理IO_1
    物理读(physicalread)数据实际存储在磁盘上,将数据从磁盘上读取到内存里,就叫做物理读将修改完的数据从内存写到磁盘,叫做物理写一般我们关注的主要是物理读IOPS(或者TPS):每秒读的次数(主要关注的)IOthroughart:IO吞吐量(每秒多少M)数据文件数据文件分为两类:1、临时数据文件(tempora......
  • 痞子衡嵌入式:利用i.MXRT10xx系列内部DCP引擎计算CRC32值时需注意数据长度对齐
    大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是利用i.MXRT10xx系列内部DCP引擎计算CRC32值时需注意数据长度对齐。MCU开发里常常需要CRC校验来检查数据完整性,CRC校验既可以纯软件实现也可以借助MCU片内外设硬件实现。大部分MCU里通常都会包含一......
  • echarts 绑定事件处理函数
    echartson文档echartsInstance.on(eventName,)https://www.cnblogs.com/Cxymds/p/17491486.htmlhttps://blog.csdn.net/weixin_42079403/article/details/137536279https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=2&tn=baiduhome_pg&wd=ech......
  • Server2025 和 GPU-P(GPU Partitioning,GPU 分区技术)的正式支持,  GPU-P 是一种将物理 G
     Server2025和GPU-P(GPUPartitioning,GPU分区技术)的正式支持, WindowsServer2025系统将全面支持GPU-P技术。然而,GPU-P是一种将物理GPU划分为多个虚拟GPU(vGPU)并分配给不同虚拟机或容器的技术。如果你是在询问WindowsServer或MicrosoftHyper-V是否已经正式支持......
  • 物理hack
    声明声明文章只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负。✍......
  • BING搜索引擎去广告
    一、问题现状在浏览器地址栏搜关键字会有广告,我用的BING最他妈恶心的是,点到广告条目左边的空白区,一样进入广告二、解决办法查阅资料,原因是bing的url被添加了FORM参数https://cn.bing.com/search?q=<关键字>&PC=<>&FORM=<小可爱>进入浏览器安装目录cmdergrep-Hnr'&FORM=......
  • 空间计算、物理计算、实时仿真与创造拥有「自主行为」的小狗 | 播客《编码人声》
       「编码人声」是由「RTE开发者社区」策划的一档播客节目,关注行业发展变革、开发者职涯发展、技术突破以及创业创新,由开发者来分享开发者眼中的工作与生活。 虚拟世界与现实世界的界限逐渐模糊,已然成为不争的事实。但究竟哪些曾经的幻想已然照进现实,又有哪些挑战依然横......
  • 计算机网络复习物理层(第二章)
    物理层数据通信的概念回顾数字信号常用编码方式波特率与比特率s:比特率,每秒多少比特B:波特率,每秒多少码元(指的是每秒调制信号的变化次数)k:多相调制的相数log2k:一个码元所含二进制比特数信道复用技术信道复用有多种,如频分复用、时分复用、波分复用、码分复用。其中频分......
  • HTTP/3 深入解读:现代互联网的加速引擎
    文章目录引言HTTP协议的进化之路初代HTTP:从1.0到1.1的过渡HTTP/2的革命性改进新的时代:HTTP/3登场HTTP3的技术亮点解析QUIC协议:重塑连接模式安全性内建:与TLS1.3深度集成更强的性能优化HTTP3在实际场景中的优势视频流媒体与直播在线游戏:微秒级优化移动设备:提升用户体验......