Vector2List未按预期工作:飞镖//长笛



我正在开发一个游戏,并使用Vector2List来表示许多粒子的位置。假设我想把X值增加4。

当我使用一个Vector2时,我可以做这样的事情,一切都很好:

position.x += 4;

其中position是Vector2的实例

如果Vector2是{3,5},那么它就变成{7,5}(一切都好(。

但如果我使用矢量列表,我会做一些类似的事情:

position[i].x += 4

其中i是粒子索引,position是Vector2List的实例

然后它从{3,5}变为{3,5}(根本没有变化!(。
我发现完成这项工作的唯一方法是使用函数集值,但它看起来不应该是强制性的。我做错什么了吗?

什么不起作用

position[i].x += 4;

什么在起作用

position.setValues(i, position[i].x+4, position[i].y);

样本代码

Vector2List positions = Vector2List(1);
print('positions[0] = ${positions[0]}');
positions[0].x += 4;
positions[0].y += 10;
print('positions[0] after operation = ${positions[0]}');
positions.setValues(0, positions[0].x + 4, positions[0].y + 10);
print('positions[0] after setValues = ${positions[0]}');

结果是

I/flutter (32638): positions[0] = [0.0,0.0]
I/flutter (32638): positions[0] after operation = [0.0,0.0]
I/flutter (32638): positions[0] after setValues = [4.0,10.0]

我的软件
Flutter版本Channel Stable 2.0.1
Dart SDK版本:2.12.0(稳定(
我使用的是零安全。

请原谅任何英语错误,我不是母语人士。

谢谢!

问题是如何为Vector2List:实现[]运算符

T operator [](int index) {
final r = newVector();
load(index, r);
return r;
}

正如您所看到的,它实际上会创建一个新的矢量对象,并在填充数据后返回该对象。这意味着对这个新矢量对象的任何修改都不会导致Vector2List对象的任何变化。

你能做的是这样的事情:

import 'package:vector_math/vector_math_lists.dart';
void main() {
Vector2List positions = Vector2List(1);
print('positions[0] = ${positions[0]}');
positions[0] = positions[0]
..x += 4
..y += 10;
print('positions[0] after operation = ${positions[0]}');
// positions[0] after operation = [4.0,10.0]
}

它仍然不太好,但和你做的一样,但更简化了。我认为最理想的方法是创建一个新的Vector2,并将其与Vector2List:上的+=运算符一起使用

import 'package:vector_math/vector_math.dart';
import 'package:vector_math/vector_math_lists.dart';
void main() {
Vector2List positions = Vector2List(2);
print('positions[0] = ${positions[0]}');
positions[0] += Vector2(4, 10);
print('positions[0] after operation = ${positions[0]}');
// positions[0] after operation = [4.0,10.0]
}

相关内容

  • 没有找到相关文章

最新更新