首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >颤动火焰精灵复制品在Android上,而不是Iphone上?

颤动火焰精灵复制品在Android上,而不是Iphone上?
EN

Stack Overflow用户
提问于 2020-04-06 05:54:21
回答 1查看 408关注 0票数 1

使用Flutter Flame engine和AndroidStudio开发一个游戏。render函数使用canvas.save()和canvas.render()函数来确保帧之间的屏幕清晰(以防止重复的精灵绘制)。在IPhone模拟器上,应用程序按预期运行,但是在多个安卓模拟器上,会渲染重复的精灵。不知道为什么会这样。感谢任何人的帮助!

代码语言:javascript
运行
复制
import 'dart:ui';
import 'package:flame/components/component.dart';
import 'package:flame/flame.dart';
import 'package:flame/game.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';


class ThisGame extends Game {
  final SharedPreferences storage;
  Size screenSize;
  double tileSize;

  Player player;
  double spriteSize = 128;
  double timeElapsed = 0;

  ThisGame(this.storage) {
    initialize();
  }

  initialize() async {
    resize(await Flame.util.initialDimensions());
    player = Player();
    player.x = 0;
    player.y = 0;
  }

  @override
  void render(Canvas canvas) {
    canvas.save();
    player.render(canvas);
    canvas.restore();
  }

  @override
  void update(double t) {
    timeElapsed += t;
    if (timeElapsed > 1) {
      timeElapsed = 0;
      player.y += t * 300;
      player.x += t * 300;
    }
  }

  @override
  void resize(Size size) {
    screenSize = size;
    tileSize = screenSize.width / 9;
  }
}

class Player extends SpriteComponent {
  Player() : super.square(128.0, 'player.png') {
    this.angle = 0.0;
   }

}
EN

回答 1

Stack Overflow用户

发布于 2020-06-09 01:31:29

你不必自己处理渲染方法,只需将你的SpriteComponent添加到游戏中,它就会为你处理渲染。

代码语言:javascript
运行
复制
class ThisGame extends Game {
  final SharedPreferences storage;
  Size screenSize;
  double tileSize;

  Player player;
  double spriteSize = 128;
  double timeElapsed = 0;

  ThisGame(this.storage) {
    initialize();
  }

  initialize() async {
    resize(await Flame.util.initialDimensions());
    player = Player();
    player.x = 0;
    player.y = 0;
    add(player); // <-- Like this
  }

  @override
  void update(double t) {
    super.update(t) // Also don't forget to call super
    timeElapsed += t;
    if (timeElapsed > 1) {
      timeElapsed = 0;
      player.y += t * 300;
      player.x += t * 300;
    }
  }

  @override
  void resize(Size size) {
    screenSize = size;
    tileSize = screenSize.width / 9;
  }
}

class Player extends SpriteComponent {
  Player() : super.square(128.0, 'player.png') {
    this.angle = 0.0;
  }
}

此外,不要忘记在更新覆盖中调用super.update(t)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61050043

复制
相关文章

相似问题

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