游戏中的子弹发射与碰撞系统
游戏中的子弹发射与碰撞系统1. 基础组件1.1 基础碰撞检测123456789101112class Circle { x: number; y: number; radius: number; intersects(other: Circle): boolean { const dx = this.x - other.x; const dy = this.y - other.y; const distance = Math.sqrt(dx * dx + dy * dy); return distance < (this.radius + other.radius); }} 1.2 游戏对象基类1234567891011121314151617class GameObject { x: number; y: number; bounds: Circle; health: number = 100; ...
技能状态
2. 技能系统中的二进制应用2.1 技能状态管理使用位运算来管理角色的各种状态效果: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556// 定义状态效果const StatusEffects = { NONE: 0, STUN: 1 << 0, // 眩晕 SILENCE: 1 << 1, // 沉默 POISON: 1 << 2, // 中毒 BURN: 1 << 3, // 燃烧 FREEZE: 1 << 4, // 冰冻 INVINCIBLE: 1 << 5, // 无敌 STEALTH: 1 << 6, // 隐身 HASTE: 1 << 7 // 加速};class...
二进制的使用
游戏开发中的二进制应用在游戏开发中,二进制操作是一个非常重要的技术点,它可以帮助我们高效地存储和处理各种游戏数据。本文将探讨几个常见的应用场景并使用Node.js来演示具体实现。 1. 使用位运算存储游戏状态在游戏中,我们经常需要记录玩家的各种状态,比如: 是否完成某个任务 是否解锁某个成就 是否获得某个道具 使用二进制的位运算可以非常高效地存储这些布尔值信息。 1234567891011121314151617181920212223// 使用一个32位整数存储32个不同的状态let playerState = 0;// 设置状态的函数function setState(state, position) { return state | (1 << position);}// 检查状态的函数function checkState(state, position) { return (state & (1 << position)) !== 0;}// 清除状态的函数function...
贪吃蛇游戏学习
贪吃蛇游戏 开始游戏 暂停/继续 * { margin: 0; padding: 0; box-sizing: border-box; } .game-container { width: 100%; max-width: 800px; padding: 10px; background: transparent; } #gameCanvas { border: 2px solid #333; background: #000; display: block; margin: 0 auto; width: 100%; height: 400px; } .controls { margin: 10px 0; text-align: center; } button { padding: 8px 16px; margin: 0 5px; font-size:...
网络配置与路由基础
网络配置与路由基础1. IP地址基础1.1 IP地址的组成 IP地址由32位二进制数组成(IPv4) 通常以点分十进制表示:如 192.168.1.1 分为网络部分和主机部分 IPv4地址分为A、B、C、D、E五类 1.2 网络位与主机位网络位(Network Portion) 定义:IP地址中用于标识网络的位 作用: 标识IP所属的网络 用于路由选择 决定网络的规模 特点: 同一网络中的所有主机,网络位相同 由子网掩码中的”1”对应的位确定 网络位越多,可划分的子网越多 主机位(Host Portion) 定义:IP地址中用于标识主机的位 作用: 标识网络内的具体主机 决定网络可容纳的主机数量 特点: 同一网络中的主机,主机位必须唯一 由子网掩码中的”0”对应的位确定 主机位越多,可用主机数越多 全0表示网络地址,全1表示广播地址 实例说明123456789101112IP地址:192.168.1.1子网掩码:255.255.255.0二进制形式:IP: 11000000.10101000.00000001.00000001掩码: ...
机电一体化初学
机电一体化初学笔记在参加ABB机器人培训后,我整理了一些关键知识点和心得体会,希望能对机器人编程初学者有所帮助。 1. 坐标系统基础1.1 笛卡尔坐标系笛卡尔坐标系是机器人编程的基础。最简单的记忆方法是: 大拇指:X轴 食指:Y轴 中指:Z轴 只要确定X、Y方向,Z的方向就自然确定了。这在以下场景中尤为重要: RobotStudio软件操作 示教器操作 位置和方向向量的确定 2. 三大坐标系统2.1 工具坐标系(Tool) 定义:用于确定工具的中心点位置 设置方法: 三维空间需要记录三个点 通过前、左、右三点确定工具中心点 用于精确定位工具位置 2.2 工件坐标系 目的:确定操作平面位置 设置步骤: 记录初始点 记录X轴方向上的点 记录Y轴平移点 三点共同确定工件坐标系 2.3 世界坐标系作为机器人的基础参考系统 3. 机器人编程特点3.1 简单性与复杂性 复杂性: 涉及行列式计算 包含多轴运动学 简单性: 底层计算已完全封装 操作者只需关注起点和终点 路径规划由系统自动完成 4. 实际应用案例4.1...
TypeScript 入门笔记
TypeScript 简介TypeScript 是 JavaScript 的超集,它添加了可选的静态类型和基于类的面向对象编程。TypeScript 由微软开发和维护,设计目标是开发大型应用。 常用点 类型判断 as 断言 interface record 用法 keyof typeof 类,class,type,enum 枚举 1. 基本类型1234567891011121314151617// 布尔值let isDone: boolean = false;// 数字let decimal: number = 6;let hex: number = 0xf00d;// 字符串let color: string = "blue";let sentence: string = `The color is ${color}`;// 数组let list: number[] = [1, 2, 3];let list2: Array<number> = [1, 2, 3];// 元组let x: [string, number]...
游戏架构笔记
游戏要素1. 二进制数据传输游戏对于性能有极高要求,所以通过二进制数据传输来提高游戏的性能,一般使用 protobuffer,这是游戏的基本要素之一。 2. WebSocket 协议HTTP 协议因为包头的问题,导致无效内容过多,而 WebSocket 协议可以尽可能减少这些无效内容,并且默认使用二进制,这是游戏的基本要素之二。 3. 加密机制后端发送到前端一般无需加密,但是前端发到后端需要加密,这里巧妙的利用了二进制的好处,也就是 buffer,通过异或的方式进行简单加密,这是游戏要素之三。 4. 日志系统游戏日志内容众多,因为涉及到复杂逻辑,所以在架构上需要对日志做出特殊要求,比如报错日志需要发送到指定的地方,比如微信,或者一些辅助平台,这是游戏的基本要素之四。 5. 数据存储游戏服务和传统 Web 应用有一个显著差异:状态管理。Web...
NODEJS笔记
Node.js 事件循环机制Node.js 存在事件循环,主要分为 task 和 microtask 两种任务队列: microtask:一般涉及业务逻辑的 await 后面的逻辑都会在 microtask 中执行,执行优先级很高 task:在每次清理完 microtask 中的任务后执行 Task 的六个阶段 timers:定时器回调阶段 I/O callbacks:处理网络、流、TCP的错误回调 idle, prepare:仅系统内部使用 poll:检索新的 I/O 事件 check:setImmediate() 回调 close callbacks:关闭回调 示例代码12345678910setTimeout(() => console.log('setTimeout'), 0);setImmediate(() => console.log('setImmediate'));(async () => { console.log('async start');...
链事件监听
实现方式使用 ethers.js 监听事件在区块链开发中,事件监听是一个至关重要的功能。虽然轮询也是一种可行的方案,但存在两个主要问题: 实时性不足,无法及时响应链上事件 API 资源消耗较大,频繁的轮询会显著增加系统负载 注意1区块链网络的稳定性存在一定挑战,事件监听的一个主要问题是难以保持长时间的持续连接。有时会出现无法获取最新监听事件的情况,比如七八个小时之后,这个问题在 GitHub 上也有其他开发者遇到。单纯发送 heartbeat 并不能完全解决这个问题,而且 ethers.js 的 WebSocket 实现由于封装的原因,缺少了完整的重连机制。 针对区块链监听不稳定后的重连,需要注意两个关键点: 妥善处理交易哈希,避免重复处理 每次重新启动监听时,主动查询之前的区块数据(例如往前1000个块),以防止漏掉重要事件。在我的实现中,使用 Redis...








