- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
更新 :我创建了一个较小的示例,可能更好地说明了本期中的问题:https://github.com/flame-engine/flame/issues/200
短版:
我正在实例化 SpriteComponents
在位置 (50, 50), (50, 100), (100, 50), (100, 100).
但是,渲染后它们看起来像这样:
是什么产生了这种奇怪的偏移量?如何正确渲染 SpriteComponents
?
更长的版本(带代码):
我想通过实现类似 bunnymark 来测试火焰的性能。 .
作为节省性能的第一次尝试,我正在加载单个 Sprite
并用它来生产许多SpriteComponents
.SpriteComponent
包裹在 Bunny
中类(class)。现在它什么都不做,最终它会处理运动:
import 'dart:ui';
import 'package:flame/components/component.dart';
import 'package:flame/sprite.dart';
class Bunny {
SpriteComponent bunny;
Bunny(Sprite bunnySprite, double x, double y, double w, double h)
: this.bunny =
SpriteComponent.fromSprite(w, h, bunnySprite) {
bunny.x = x;
bunny.y = y;
}
void render(Canvas c) {
bunny.render(c);
}
void update(double t) {}
}
import 'dart:ui';
import 'package:bunnymark/components/bunny.dart';
import 'package:flame/flame.dart';
import 'package:flame/game.dart';
import 'package:flame/sprite.dart';
import 'package:flutter/cupertino.dart';
class BunnyMark extends Game {
Size screenSize;
List<Bunny> bunnies;
Sprite bunnySprite;
BunnyMark() {
initialize();
}
void initialize() async {
resize(await Flame.util.initialDimensions());
bunnies = List<Bunny>();
bunnySprite = Sprite('rabbitv3_tron.png');
bunnies.add(Bunny(bunnySprite, 50, 50, 30, 30));
bunnies.add(Bunny(bunnySprite, 50, 100, 30, 30));
bunnies.add(Bunny(bunnySprite, 100, 100, 30, 30));
bunnies.add(Bunny(bunnySprite, 100, 50, 30, 30));
}
void render(Canvas canvas) {
Rect bgRect = Rect.fromLTWH(0, 0, screenSize.width, screenSize.height);
Paint bgPaint = Paint();
bgPaint.color = Color(0xff000000);
canvas.drawRect(bgRect, bgPaint);
bunnies.forEach((bunny) {
bunny.render(canvas);
});
}
void update(double t) {
bunnies.forEach((bunny) => bunny.update(t));
}
void resize(Size size) {
screenSize = size;
super.resize(size);
}
}
import 'package:bunnymark/bunnymark.dart';
import 'package:flame/util.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
Util flameUtil = Util();
await flameUtil.fullScreen();
await flameUtil.setOrientation(DeviceOrientation.portraitUp);
BunnyMark game = BunnyMark();
runApp(game.widget);
}
最佳答案
由于您使用的是 Game
而不是 BaseGame
(这会为你做),你对你的render
负责实现以重置每个 Sprite 的 Canvas 。
允许组件在 Canvas 上进行任何他们想要的修改,并且需要重置 BaseGame(或在您的情况下为 Game)。
所以当你这样做时
bunnies.forEach((bunny) {
bunny.render(canvas);
});
bunnies.forEach((bunny) {
canvas.save();
bunny.render(canvas);
canvas.restore();
});
BaseGame
为您解决很多这些问题的类(class):)
关于flutter - 使用 Flame 定位 SpriteComponent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59570431/
我有一个查询系统,可以找到鼠标所在的对象。这不是一个按钮,但是,我想改变颜色。我不知道从哪里开始。我将查询什么属性以及如何更改它?目前,我有以下内容: fn mouse_move(mut comman
以下程序是大量 SpriteComponents 的一个非常简约的示例。在此示例中,使用 FPS 计数器,您可以看到 SpriteComponents 的成本似乎是多么高。 我确实注意到,如果我重用
更新 :我创建了一个较小的示例,可能更好地说明了本期中的问题:https://github.com/flame-engine/flame/issues/200 短版: 我正在实例化 SpriteCom
我是一名优秀的程序员,十分优秀!