Java LibGdx多Cell实例路径重合 Math.random跨实例返回相同值?
根因分析
LibGDX的Vector2.X是全局静态共享的常量Vector2实例,指向坐标为(1,0)的向量对象。你在Cell构造方法中直接将vel字段赋值为Vector2.X,导致所有Cell实例的vel都指向同一个内存地址的Vector2对象。只要任意一个Cell调用vel.rotateDeg()修改这个共享对象的属性,所有Cell的速度都会同步变更,这就是你观测到两个Cell运动路径完全同步、Cell1的偏差会作用到Cell0上的核心原因,和随机数生成逻辑无关。
解决方法
修改Cell类的构造方法,为每个Cell实例创建独立的Vector2速度对象,不要直接引用全局静态的Vector2.X实例:
public Cell(){ // 不要直接写this.vel = Vector2.X this.vel = new Vector2(Vector2.X); // 基于Vector2.X的值创建新的独立实例 // 也可以直接写 this.vel = new Vector2(1, 0); 效果完全一致 }
修改后每个Cell的速度向量都是独立的,各自的旋转操作不会互相影响,两个粒子的路径就会正常分离。
内容的提问来源于stack exchange,提问作者Ciro García
相关产品推荐
相关产品推荐

