Kinru
Kinru

Reputation: 399

Scene2d vs Sprites

So I am currently designing a game where the main idea is that you choose your attack and then an animation plays out based on the attack that you picked (think pokemon). The game is turn-based as well.

My question is whether scene2d would be easier to use than implementing a custom solution for handling the animation part of the game. From what I've read (and I've found it difficult to find good information on scene2d), it sounds like scene2d would make designing the UI for the buttons/menu extremely easy, but I'm not sure how I can roll that into making the actors move. Is it as simple as handling the touch event on the button and calling the corresponding actor's action method based on the player's choice?

In what I have in mind, the actors never actually move (except during their animation and they don't move across the screen, they merely go through their animations in place). During the animation, there will also be particle effects (the attack) which, if using scene2d, would need to be their own actors. Would the synchronization of the actors and the attack be difficult to produce?

Upvotes: 1

Views: 539

Answers (3)

fr_andres
fr_andres

Reputation: 6687

you may already know this, but let me try to answer your question:

Scene2d has a very handy action system, which basically allows the following:

  1. do any of the provided actions
  2. fine tune them with the many provided interpolations
  3. make new actions with Actions.run()
  4. chain existing actions forming sequences

Like this:

import com.badlogic.gdx.scenes.scene2d.actions.Actions;
import com.badlogic.gdx.scenes.scene2d.Action;
Action a1 = Actions.sequence(Actions.fadeOut(0), Actions.fadeIn(3, Interpolation.bounce));
Action a2 = Actions.moveTo(100, 200, 3, Interpolation.pow2Out);
Runnable r = new Runnable() {
    @Override
    public void run() {
        setColor(1, 0, 0, 1);
        System.out.println("now I'm a red actor");
    }
};

And then combine then, for example like this:

addAction(Actions.sequence(Actions.parallel(a1, a2), Actions.run(r)));

This allows you to profit from scene2d's built-in sequencer saving you the half of the work, at least. So, answering your question, I think it is very possible indeed to easily implement fixed as well as reactive/randomized animations using this system. It also allows you to easily encapsulate simpler actions into complexer ones, and has the following advantages:

  • Very readable and maintainable code
  • Tradeoff CPU/Mem: much more memory-efficient than storing plain sequences or even videos
  • Reactivity: this way you can program your animations to be slightly different each time

On the other hand, this developing system can become very time consuming if you constantly want "uncovered" things, like the following:

  • Implement time-based actions yourself that aren't built-in (like camera travelling)
  • Make your own interpolations if the built-in ones don't fit your goals
  • Work with many little granular elements (for that sake I would use the ParticleEditor).

Which I don't think is your case. As a last remark, you should take a look at the spine animation engine. I don't use it myself but may be useful for what you have in mind.

Upvotes: 0

Buddy
Buddy

Reputation: 2114

Scene2D would be better since you would have to manually implement the listener for actions such as Click when you use Sprite whereas Scene2D provides the functions to set Listeners.

Upvotes: 0

sandeep kundliya
sandeep kundliya

Reputation: 961

Actors do movee..

actor.addAction(Actions.moveTo(posX, posY, 5)));

by this your actor moves to posX, posY and 5 is the time duration ..

using scene2d would be a good idea in my opinion..

Upvotes: 2

Related Questions