news 2026/7/14 15:16:24

保持对代码的理解,不要完全依赖AI Coding——由一段Babylon.js开发出现的bug引发的感慨

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
保持对代码的理解,不要完全依赖AI Coding——由一段Babylon.js开发出现的bug引发的感慨

子曰:AI Coding并不知道自己在干什么。

子曰:如果一段代码的bug找不到,不要整晚死磕,好好睡一觉,很可能第二天早上就找到了。

子还曰:保持清醒比无脑努力重要136.25倍。

子路:重要程度需要精确到小数点后两位吗?

子曰:需要!

使用cursor开发一个基于Babylonjs引擎的内容,cursor通过opus4.8帮我写了如下代码,注意的两段代码中关于attach的部分:

import { Observable, TransformNode, type Behavior } from "@babylonjs/core"; export default abstract class LerpBehavior implements Behavior<TransformNode> { public get name(): string { return "LerpBehavior"; } public static readonly behaviorName: string = "LerpBehavior"; private _uuid: string = ""; public get uuid(): string { return this._uuid; } protected _setUuid(uuid: string): void { this._uuid = uuid; } protected _target: TransformNode | null = null; public get target(): TransformNode | null { return this._target; } public readonly onSetProcessObservable = new Observable<number>(); public readonly onDetachObservable = new Observable<void>(); init() { } protected _isInitialized: boolean = false; protected _attached: boolean = false; attach(target: TransformNode) { if (this._attached) return; this._attached = true; this._target = target; } detach() { this.onDetachObservable.notifyObservers(); this.onDetachObservable.clear(); this._target = null; this._attached = false; this._isInitialized = false; } public dispose(): void { this._target?.dispose(); } public setProcess(process: number): void { if (!this._isInitialized && this._target) { this._initialize(); } this._applyProcess(process); } protected abstract _applyProcess(process: number): void; protected abstract _initialize(): void; }
import LerpBehavior from "./LerpBehavior"; import { Vector3, TransformNode, Axis, Space, Scalar } from "@babylonjs/core"; import { DTO_LerpPosition } from "../../../../../Shared/TScripts/DTO/DTO_RuntimeSystem"; export default class LerpPosition extends LerpBehavior{ public get name():string{return "LerpPosition";} public static readonly behaviorName = "LerpPosition"; public static createFromJson(trNode: TransformNode, jsonBehav: string): LerpPosition | undefined{ try { if(trNode){ const data: DTO_LerpPosition = JSON.parse(jsonBehav); if (!data) return undefined; const s = data.start; const e = data.end; const offsetStart = new Vector3(s.x, s.y, s.z); const offsetEnd = new Vector3(e.x, e.y, e.z); const behavior = new LerpPosition(offsetStart, offsetEnd); behavior._setUuid(data.uuid); trNode.addBehavior(behavior, true); behavior.setProcess(data.process || 0); return behavior; } return undefined; } catch (error) { console.error(`Failed to create LerpPosition:`, error); return undefined; } } private _offsetStart:Vector3; private _offsetEnd:Vector3; private _posStart: Vector3 | null = null; private _posEnd: Vector3 | null = null; constructor(offsetStart:Vector3, offsetEnd:Vector3){ super(); this._offsetStart = offsetStart; this._offsetEnd = offsetEnd; } public override attach(target: TransformNode): void { if (this._attached) return; this._attached = true; super.attach(target); } /** * 初始化起始和结束位置 * 使用局部空间的translate来计算相对于当前位置的偏移 */ protected override _initialize(): void { if (!this._target || this._isInitialized) return; const currentPosition = this._target.position.clone(); this._target.translate(Axis.X, this._offsetStart.x, Space.LOCAL); this._target.translate(Axis.Y, this._offsetStart.y, Space.LOCAL); this._target.translate(Axis.Z, this._offsetStart.z, Space.LOCAL); this._posStart = this._target.position.clone(); this._target.position = currentPosition; this._target.translate(Axis.X, this._offsetEnd.x, Space.LOCAL); this._target.translate(Axis.Y, this._offsetEnd.y, Space.LOCAL); this._target.translate(Axis.Z, this._offsetEnd.z, Space.LOCAL); this._posEnd = this._target.position.clone(); this._target.position = currentPosition; this._isInitialized = true; } protected override _applyProcess(process: number): void { if (!this._target) { return; } if (this._posStart && this._posEnd) { const p = Scalar.Clamp(process, 0, 1); this._target.position = Vector3.Lerp(this._posStart, this._posEnd, p); this.onSetProcessObservable.notifyObservers(process); } } }

注意,这中写法会导致子类中的

this._target = target;

这行代码永远得不到执行,所以this._target 一直是null !

让opus4.8在debug模型调试了一晚上都找不到问题,回家!睡觉!!

第二天早上一眼就看到了,只要把LerpPosition里面的

public override attach(target: TransformNode): void { if (this._attached) return; this._attached = true; super.attach(target); }

写成:

public override attach(target: TransformNode): void { if (this._attached) return; super.attach(target); this._attached = true; }

就好了。

当然这种 override 代码本来就没个P用,我不明白cursor写他干嘛?因为这几行狗P根本就是直接删除了也行!!!

子最后曰:有了AI Coding也不要当甩手掌柜的。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/14 21:37:06

在皓贝一口腔医院就诊是怎样一种体验?

走进皓贝一口腔医院&#xff0c;患者最先感受到的不是设备或技术&#xff0c;而是就诊流程的顺畅程度。预约环节——患者可通过医院官方渠道提前预约&#xff0c;合理安排就诊时间&#xff0c;减少现场等待。初诊环节——到院后&#xff0c;分诊人员根据患者的主诉引导至相应科…

作者头像 李华
网站建设 2026/7/14 22:40:36

NifSkope终极指南:免费开源的游戏文件编辑器完全解析

NifSkope终极指南&#xff1a;免费开源的游戏文件编辑器完全解析 【免费下载链接】nifskope A git repository for nifskope. 项目地址: https://gitcode.com/gh_mirrors/ni/nifskope 在游戏开发和MOD制作的世界中&#xff0c;NifSkope是一款备受推崇的开源工具&#xf…

作者头像 李华
网站建设 2026/7/14 10:15:09

LLM 直接写量化策略,到底靠不靠谱?

经常有人问我&#xff1a;现在大模型写代码这么强&#xff0c;能不能直接让它写一个量化策略&#xff0c;然后拿去实盘&#xff1f;这个问题&#xff0c;我以前也真试过。当时 GPT-4o 刚火起来&#xff0c;网上到处都是“AI 几分钟写出完整项目”的视频。我也心痒&#xff0c;直…

作者头像 李华
网站建设 2026/7/14 9:21:06

5分钟快速掌握uesave:终极虚幻引擎存档处理工具指南

5分钟快速掌握uesave&#xff1a;终极虚幻引擎存档处理工具指南 【免费下载链接】uesave Rust library and CLI to read and write Unreal Engine save files 项目地址: https://gitcode.com/gh_mirrors/ue/uesave uesave是一款专为虚幻引擎游戏存档设计的强大Rust工具库…

作者头像 李华
网站建设 2026/7/13 5:34:05

如何永久保存微信聊天记录:WeChatMsg完整备份与AI数据管理指南

如何永久保存微信聊天记录&#xff1a;WeChatMsg完整备份与AI数据管理指南 【免费下载链接】WeChatMsg 提取微信聊天记录&#xff0c;将其导出成HTML、Word、CSV文档永久保存&#xff0c;对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/…

作者头像 李华
网站建设 2026/7/13 5:12:42

远程Linux开发如何获得和展示高频log数据

5000Hz的log打印,显然从terminal肉眼看是做不到的,那怎么办, AI说在服务器弄个python的server,html WebSocket什么的,本地请求一个forwarded address就可以浏览器看图表里. 是,是成功了, 但不好用,以下是我觉得最好的方案.这个神器非常好用.这里本机是106. 服务器是104 本机用5…

作者头像 李华