render method
绘制界面
Implementation
void render(Canvas canvas) {
canvas.save();
/// 需要移动的位置
double moveX = 0;
double moveY = 0;
/// 跟随摄像机的精灵
if (camera.sprite != null) {
if (camera.limit != null) {
/// 限制边界
moveX = camera.rect.width / 2 - camera.sprite!.position.x;
moveY = camera.rect.height / 2 - camera.sprite!.position.y;
if (camera.sprite!.position.x <= camera.rect.width / 2) {
moveX = 0;
}
if (camera.sprite!.position.y <= camera.rect.height / 2) {
moveY = 0;
}
if (camera.sprite!.position.x >= camera.limit!.dx - camera.rect.width / 2) {
moveX = camera.rect.width - camera.limit!.dx;
}
if (camera.sprite!.position.y >= camera.limit!.dy - camera.rect.height / 2) {
moveY = camera.rect.height - camera.limit!.dy;
}
} else {
moveX = camera.rect.width / 2 - camera.sprite!.position.x;
moveY = camera.rect.height / 2 - camera.sprite!.position.y;
}
canvas.translate(moveX, moveY);
}
children.forEach((sprite) {
if (sprite.visible) {
if (!sprite.fixed) {
sprite.render(canvas);
}
}
});
/// 固定到屏幕位置的精灵
if (camera.sprite != null) {
canvas.translate(-moveX, -moveY);
}
children.forEach((sprite) {
if (sprite.visible) {
if (sprite.fixed) {
sprite.render(canvas);
}
}
});
canvas.restore();
}