首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >除了flutter的小部件外,还可以使用Flame的游戏小部件吗?

除了flutter的小部件外,还可以使用Flame的游戏小部件吗?
EN

Stack Overflow用户
提问于 2022-01-11 18:20:32
回答 1查看 540关注 0票数 2

简而言之,由于Flame游戏本身就是一个小部件,所以我想在列小部件中添加这个小部件。当我将它添加到runApp()时,游戏就会运行,但是当在列中添加小部件时,它不会运行。为什么?

代码语言:javascript
复制
import 'package:flame/components.dart';
import 'package:flame/game.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Sprite examples')),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Text(
                'This a sample text!',
                style: TextStyle(fontSize: 22),
              ),
              GameWidget(game: SpriteSample())       //<========== game widget
            ],
          ),
        ),
      ),
    );
  }
}

class SpriteSample extends FlameGame {
  @override
  Future<void>? onLoad() {
    add(SpriteOne());
    return super.onLoad();
  }
}

class SpriteOne extends PositionComponent {
  final Paint _paint = Paint()..color = Colors.red;

  @override
  Future<void>? onLoad() {
    return super.onLoad();
  }

  @override
  void render(Canvas canvas) {
    canvas.drawCircle(Offset(150, 150), 25, _paint);
  }

  @override
  void update(double dt) {
    super.update(dt);
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-11 18:39:37

您需要将它包装在一个Expanded小部件(或者给它一个大小的另一个小部件,例如SizedBox )中,否则由于无限大小的约束,GameWidget将无法布局:

代码语言:javascript
复制
class _MyAppState extends State<MyApp> {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Sprite examples')),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Text(
                'This a sample text!',
                style: TextStyle(fontSize: 22),
              ),
              Expanded(
                child: GameWidget(game: SpriteSample()),
              )
            ],
          ),
        ),
      ),
    );
  }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70671635

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档