flutter - 如何使用带有 Flame/Flutter 的 PositionComponent 移动 Vector2?
问题描述
我正在尝试移动 Vector2 的 x 位置,正在调用更新,x 值正在更改但白色方形组件没有移动,我错过了什么?
我正在使用火焰 1.0.0-releasecandidate.11。
import 'dart:ui';
import 'package:flame/components.dart';
import 'package:flame/palette.dart';
class PlayerComponent extends PositionComponent {
static const squareSize = 128.0;
static Paint white = BasicPalette.white.paint();
@override
void render(Canvas canvas) {
canvas.drawRect(size.toRect(), white);
super.render(canvas);
}
@override
void update(double dt) {
x += 10 * dt;
print(x);
super.update(dt);
}
@override
void onMount() {
super.onMount();
size.setValues(squareSize, squareSize);
anchor = Anchor.center;
}
}
class AnimalVillageGame extends BaseGame {
@override
Future<void> onLoad() async {
add(PlayerComponent()
..x = 100
..y = 100
);
}
}
解决方案
您的 render 方法将大小呈现为一个零边界矩形,size.toRect()
在位置 0,0 返回一个 Rect。
相反,您可以使用类中的toRect
方法PositionComponent
:
@override
void render(Canvas canvas) {
canvas.drawRect(toRect(), white);
super.render(canvas);
}
此方法根据 x、y 位置和大小返回组件的矩形。
编辑:正如 spydon 所说,super.render
在渲染到画布之后调用,最好先调用 super 方法,因为它会自动为您处理平移、旋转等事情。
它为您自己的渲染准备画布。
推荐阅读
- sql - 用逗号 [,] 更新 DB 中的值
- git - 致命:无法访问“https://git-codecommit.us-east-1.amazonaws.com/v1/repos/lambda-pipeline-repo/”:请求的 URL 返回错误:403
- python-3.x - 使用 urllib 创建循环
- sql - 根据月份计数增加值 - SQL 不起作用
- mongodb - 使用“无”语言时,MongoDB 中的全文搜索未找到预期结果
- java - 如何使用 Java GSS-API 和 Kerberos 5 从单个 Java 客户端程序与两个不同的 KDC 服务器进行通信?
- javascript - jQuery 更新 main.js 文件中类实例的 css 状态
- apache-flink - 提交有关 YARN 问题的 Flink 作业
- c# - 使用实体框架插入多个多对多数据
- ruby-on-rails - Rails 不会运行服务器