博客
关于我
Flutter 2D拍球App
阅读量:654 次
发布时间:2019-03-15

本文共 4329 字,大约阅读时间需要 14 分钟。

Flutter游戏开发入门:构建简单Pong游戏

在开始Flutter开发之前,了解基础知识是非常重要的。以下将引导您一步步构建一个简单的Pong游戏。

创建应用

首先,创建新的Flutter项目。在main.dart文件中,我们将定义一个MyApp无状态小部件。将应用命名为simple_pong

import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Pong Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: Scaffold(
appBar: AppBar(
title: Text('Simple Pong'),
),
body: Container()));
}
}

准备游戏元素

接下来,我们需要准备游戏的核心元素:

  • 创建球
  • 球是Pong游戏的重要组成部分。以下是球的实现:

    import 'package:flutter/material.dart';
    class Ball extends StatelessWidget {
    @override
    Widget build(BuildContext context) {
    final double diam = 50;
    return Container(
    width: diam,
    height: diam,
    decoration: BoxDecoration(
    color: Colors.amber[400],
    shape: BoxShape.circle),
    );
    }
    }
    1. 创建球棒
    2. 球棒的设计简洁可靠。

      import 'package:flutter/material.dart';
      class Paddle extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
      return Container(
      width: 50,
      height: 100,
      decoration: BoxDecoration(
      color: Colors.grey[800]),
      );
      }
      }
      1. 布局布局布局布局布局布局布局布局布局
      2. 为了将所有元素摆放好,我们需要设计一个适合所有元素的布局。

        import 'package:flutter/material.dart';
        class GameLayout extends StatelessWidget {
        @override
        Widget build(BuildContext context) {
        return Scaffold(
        appBar: AppBar(
        title: Text('Pong Game'),
        ),
        body: Row(
        children: [
        Expanded(
        child: Container(
        width: 400,
        height: 500,
        child: Ball(),
        ),
        ),
        Expanded(
        child: Column(
        children: [
        Container(
        width: 100,
        height: 500,
        child: Paddle(),
        ),
        Text('Score: 0'),
        ],
        ),
        ),
        ],
        ),
        );
        }
        }

        实现基本功能

        接下来,添加必要的功能:

      3. 动画效果
      4. 球需要在游戏中不断运动,以下是实现”运动“的方法:

        import 'package:flutter/material.dart';
        class Ball extends StatelessWidget {
        final double x;
        final Function updateBallPar;
        Ball(this.x, this.updateBallPar);
        @override
        Widget build(BuildContext context) {
        return Container(
        width: 50,
        height: 50,
        decoration: BoxDecoration(
        color: Colors.amber[400],
        shape: BoxShape.circle),
        ),
        );
        }
        }
        1. 游戏逻辑
        2. 为了让球在Paddle之间反弹,我们需要一个简单的逻辑:

          class Paddle extends StatelessWidget {
          @override
          Widget build(BuildContext context) {
          return Container(
          width: 50,
          height: 100,
          decoration: BoxDecoration(
          color: Colors.grey[800]),
          );
          }
          }
          1. 手势识别
          2. 识别用户的挥拍动作:

            class Paddle extends StatelessWidget {
            final Function movePaddle;
            Paddle(this.movePaddle);
            @override
            Widget build(BuildContext context) {
            return Container(
            width: 50,
            height: 100,
            decoration: BoxDecoration(
            color: Colors.grey[800]),
            cursor: PointerConnector(
            onPointerMove: (e) => movePaddle(e.position.y),
            ),
            );
            }
            }

            技巧小贴士

          3. 保持简洁
          4. 避免使用复杂的样板代码,保持代码的简洁性。

            1. 使用StatelessWidget
            2. 由于Paddle不需要保持其“状态”,可以使用StatelessWidget

              1. 随机性
              2. 加入Random类以增加游戏的趣味性。

                1. 得分系统
                2. 保留一个Text日志以显示当前得分。

                  完整代码示例

                  以下是完整的main.dart文件:

                  import 'package:flutter/material.dart';
                  import 'ball.dart';
                  import 'paddle.dart';
                  void main() => runApp(MyApp());
                  class MyApp extends StatelessWidget {
                  @override
                  Widget build(BuildContext context) {
                  return MaterialApp(
                  title: 'Pong Game',
                  theme: ThemeData(
                  primarySwatch: Colors.blue,
                  ),
                  home: GameLayout());
                  }
                  }
                  class GameLayout extends StatelessWidget {
                  @override
                  Widget build(BuildContext context) {
                  return Scaffold(
                  appBar: AppBar(
                  title: Text('Pong Game'),
                  ),
                  body: Column(
                  children: [
                  Expanded(
                  child: Ball()),
                  Expanded(
                  child: Container(
                  width: 100,
                  child: Column(
                  children: [
                  Paddle((double y) => पसदम.empty SMPкс)),
                  Text('Score: 0'),
                  ],
                  ),
                  ),
                  ),
                  ],
                  ),
                  );
                  }
                  }

                  以上代码展示了如何构建一个简单的Pong游戏。通过延展上述代码,您可以进一步优化游戏,添加更多的功能和细节。

    转载地址:http://lmilz.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现inversions倒置算法(附完整源码)
    查看>>
    Objective-C实现isalpha函数功能(附完整源码)
    查看>>
    Objective-C实现islower函数功能(附完整源码)
    查看>>
    Objective-C实现isPowerOfTwo算法(附完整源码)
    查看>>
    Objective-C实现isupper函数功能(附完整源码)
    查看>>
    Objective-C实现ItemCF算法(附完整源码)
    查看>>
    Objective-C实现ItemCF算法(附完整源码)
    查看>>
    Objective-C实现iterating through submasks遍历子掩码算法(附完整源码)
    查看>>
    Objective-C实现iterative merge sort迭代归并排序算法(附完整源码)
    查看>>
    Objective-C实现jaccard similarity相似度无平方因子数算法(附完整源码)
    查看>>
    Objective-C实现Julia集算法(附完整源码)
    查看>>
    Objective-C实现jump search跳转搜索算法(附完整源码)
    查看>>
    Objective-C实现jumpSearch跳转搜索算法(附完整源码)
    查看>>
    Objective-C实现k nearest neighbours k最近邻分类算法(附完整源码)
    查看>>
    Objective-C实现k-means clustering均值聚类算法(附完整源码)
    查看>>
    Objective-C实现k-Means算法(附完整源码)
    查看>>
    Objective-C实现k-nearest算法(附完整源码)
    查看>>
    Objective-C实现KadaneAlgo计算给定数组的最大连续子数组和算法(附完整源码)
    查看>>
    Objective-C实现kadanes卡达内斯算法(附完整源码)
    查看>>
    Objective-C实现kahns algorithm卡恩算法(附完整源码)
    查看>>