Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 如何在颤振中以编程方式更改河流/火炬中坡度填充的开始/结束位置?_Flutter_Dart_Rive - Fatal编程技术网

Flutter 如何在颤振中以编程方式更改河流/火炬中坡度填充的开始/结束位置?

Flutter 如何在颤振中以编程方式更改河流/火炬中坡度填充的开始/结束位置?,flutter,dart,rive,Flutter,Dart,Rive,我有一个简单的球,它使用渐变填充使它看起来像是从一侧照亮的: 我想在运行时在颤振中修改渐变填充(例如,使灯光看起来像是相对于球移动的)。我能找到这样的坐标: final fill=(artboard.getNode(“椭圆”)作为flatterActorShape)。填充为flatterRadialFill; 打印(fill.renderStart); 打印(fill.rendernd); 但是,我找不到修改这些值的方法。我尝试使用Vec2D覆盖这些值,但它不会更改渲染(可能是因为根据这些值

我有一个简单的球,它使用渐变填充使它看起来像是从一侧照亮的:

我想在运行时在颤振中修改渐变填充(例如,使灯光看起来像是相对于球移动的)。我能找到这样的坐标:

final fill=(artboard.getNode(“椭圆”)作为flatterActorShape)。填充为flatterRadialFill;
打印(fill.renderStart);
打印(fill.rendernd);
但是,我找不到修改这些值的方法。我尝试使用
Vec2D
覆盖这些值,但它不会更改渲染(可能是因为根据这些值计算出了一些需要失效的内容):

Vec2D.copy(
_fill.renderStart,
Vec2D.fromValues(
200-_组分x,200-_组分y);

对于此属性,没有一个很好的有用的设置程序(关键帧操纵它并使内部状态无效),但是通过一点额外的详细代码(我们应该使此代码更友好),您可以做到:


类MutateGradient扩展FlareControl{
//存储填充,这样您就不需要在每一帧中查找它。
弗拉特-拉迪尔菲尔(flatterradialfill);;
//我选择用正弦波驱动梯度的末端位置,所以我使用
//用于累积相位的字段。
双相=0;
@凌驾
bool advance(颤振板艺术板,双行程){
如果(_radialFill==null){
//在初始化期间没有找到填充,很早就带着一个错误的意思离开了我们
//完成了。
返回false;
}
_相位+=经过;
//最后没有好的setter,所以我们必须手动设置值,然后
//将绘制标记为脏,以便更新循环更新实际绘制和绘制
//用于渲染的点。请注意,此处的位置可以是
//路径的局部变换或世界(艺术板)变换取决于
//在Rive中选择了transformAffectsStroke。
Vec2D.copy(
_半径填充结束,向量2d.from值(-100100+sin(_相位*2)*50);
_radialFill.markPaintDirty();
//返回true可在下一帧获得另一个调用。。。
返回true;
}
@凌驾
void初始化(颤振板艺术板){
//找到我们想要操纵的填充。
var node=artboard.getNode(“椭圆”);
if(节点为颤振器形状){
var fill=node.fill;
如果(填充为径向填充){
_径向填充=填充;
}
}
}
@凌驾
void setViewTransform(Mat2D viewTransform){
//实际上是空的,我们不需要从artboard(世界)转换到
//本例中的视图空间。
}
}
发送电子邮件至luigi@rive.app或者公开羞辱我@luigirosso