GithubHelp home page GithubHelp logo

Comments (6)

spkingr avatar spkingr commented on May 6, 2024 1

It works now! Happy to go on flutter game. :) @luanpotter @feroult

from flame.

luanpotter avatar luanpotter commented on May 6, 2024

Could you please provide your code relevant to the error? I can only guess that you created a world (Box2DComponent) and added inside Components that are not bodies (BodyComponent). All components added directly inside a Box2DComponent must be BodyComponents.

from flame.

spkingr avatar spkingr commented on May 6, 2024

Here is my test code:

class GameRoot extends Game{
  GameRoot(){
    this._gameWorld = GameWorld();
    this._gameWorld.initializeWorld();
    this._initAssets().then((_) => this._isLoaded = true);
  }

  GameWorld _gameWorld;
  bool _isLoaded = false;
  Size _dimensions;

  Future<Null> _initAssets() async{
    this._dimensions = await Flame.util.initialDimensions();
    await Flame.audio.load('supersoyboy.ogg');
    await Flame.audio.load('dryfire.mp3');
    Flame.audio.loop('supersoyboy.ogg');
  }

  @override
  void render(Canvas canvas) {
    this._gameWorld.render(canvas);
  }

  @override
  void update(double t){
    this._gameWorld.update(t);
  }

  @override
  void resize(Size size){
    this._gameWorld.resize(size);
  }
}

And another file:

class GameWorld extends Box2DComponent{
  GameWorld():super();

  SuperBoyComponent player;

  @override
  void initializeWorld() {
    //this.add(BackgroundComponent(this.viewport));
    //this.add(GroundComponent(this));
    this.player = SuperBoyComponent(this);
    this.add(this.player);
  }

  @override
  void update(double t) {
    try{
      super.update(t); //This line triggers the error!
    }catch(e){
      print("Error:------------------$e");
    }
    this.cameraFollow(this.player, horizontal: 0.5);
  }
}

class SuperBoyComponent extends BodyComponent{
  static final double playerHeight = 48.0;
  static final double playerWidth = 40.0;

  SuperBoyComponent(Box2DComponent box) : super(box){
    this._loadImages().then((_) => this._isLoading = false);
    this._createBody();
  }

  bool _isLoading = true;
  final images = Map<String, Image>();

  bool _isIdle = true;
  bool _isRun = false;
  bool _isJump = false;
  bool _isSlide = false;

  @override
  void update(double t) {
    this._isIdle = this.body.linearVelocity.x == 0.0;
    this._isRun = this.body.linearVelocity.x != 0.0;
    this._isJump = this.body.getContactList() == null;
  }

  @override
  void renderPolygon(Canvas canvas, List<Offset> points){
    if(this._isLoading){
      return;
    }

    Image image = this._isJump ? this.images["jump_1"] : (this._isIdle ? this.images["run_1"] : (this._isRun ? this.images["run_1"] : this.images["slide_1"]));
    final rect = Rect.fromLTWH(- SuperBoyComponent.playerWidth * 0.5, - SuperBoyComponent.playerHeight * 0.5, SuperBoyComponent.playerWidth, SuperBoyComponent.playerHeight);
    paintImage(canvas: canvas, image: image, rect: rect, fit: BoxFit.contain, flipHorizontally: this.body.linearVelocity.x < 0.0);
  }

  Future<Null> _loadImages() async{
    /// run_1 run_15
    /// jump_1 jump 15
    /// slide_1
    Image image;
    for(int i = 1; i <= 15; i ++){
      image = await Flame.images.load("run_$i.png");
      this.images["run_$i"] = image;
      image = await Flame.images.load("jump_$i.png");
      this.images["jump_$i"] = image;
    }
    image = await Flame.images.load("slide_1.png");
    this.images["slide_1"] = image;
  }

  void _createBody(){
    final shape = PolygonShape()
      ..setAsBoxXY(SuperBoyComponent.playerWidth, SuperBoyComponent.playerHeight);
    shape.centroid.x = SuperBoyComponent.playerWidth * 0.5;
    shape.centroid.y = SuperBoyComponent.playerHeight * 0.5;

    final fixtureDef = FixtureDef()
      ..shape = shape
      ..restitution = 0.0
      ..density = 0.05
      ..friction = 0.2;

    final bodyDef = BodyDef()
      ..linearVelocity = Vector2.zero()
      ..position = Vector2(0.0, 15.0)
      ..bullet = true
      ..type = BodyType.DYNAMIC;

    this.body = this.world.createBody(bodyDef)
      ..createFixtureFromFixtureDef(fixtureDef)
      ..setFixedRotation(true);
  }
}

Thanks very much for help!

from flame.

feroult avatar feroult commented on May 6, 2024

Hi @spkingr, thanks for your code.
I was able reproduce the problem and I'm trying to fix it.

from flame.

feroult avatar feroult commented on May 6, 2024

It was a bug in Box2D Dart port. Since the original maintainer was not merging this PR from Feb, we decided to fork the project and create our own package.

You'll need to change any references to box2d package or sub-packages to add the _flame suffix:

import 'package:box2d_flame/box2d.dart';

Just wait @luanpotter to release next Flame version and you should be ok with your code.

Best

from flame.

luanpotter avatar luanpotter commented on May 6, 2024

@spkingr the new version was released (0.9.1). Could you verify if the problem is solved? Thanks!

from flame.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.