Need help with Spritemap, animate with play () does not work !?
-
Hello
I've got stuck with an "Entity & Spritemap" object.
Can not make it animate with "sprite.play (" xxx ");
Have tried sprite.play ("xxx") in
Entity new () function, as well as in the update () function.I can however animate the object with "sprite.setAnimFrame (" xxx ", index)",
or with "sprite.frame = index".index += 1; if (index >= 8) index = 5;
But with "sprite.play (....)" nothing happens at all.
What have I missed?
Have checked http://haxepunk.com/documentation/tutorials/movement-and-animation/.
As far as I can see, I have not done anything differently.Sincerely, OB
here is the full source for my Entity!
class MushRoom extends Entity { var sprite:Spritemap; var i:Int = 5; public function new(x:Float=0, y:Float=0) { super(x, y); sprite = new Spritemap("graphics/centipede_8.png", 10, 10); sprite.add("green", [5, 6, 7, 8], 12); sprite.play("green"); //graphic = sprite; addGraphic(sprite); } public override function update() { /* this works! i += 1; if (i >= 8) i = 5; sprite.frame = i; */ // or /* this works! i += 1; if (i >= 8) i = 5; sprite.setAnimFrame("green", i); */ /* this dosen´t work! sprite.play("green"); */ } }
-
I suspect if you uncomment
graphic = sprite
and removeaddGraphic
this will work.Graphics and Entities have an
active
field which determines whether they're updated each frame. By default most graphics are not active (since they have nothing to do) but Spritemap is active by default (since it has to progress the animation.) However,addGraphic
puts the Spritemap inside of a Graphiclist, which is not active by default.You can also set
graphic.active = true
.Edit: actually Graphiclist is set to be active automatically if you add any active graphics to it.
-
Hi bendmorris
I have previously tested with
graphic = sprite;
No difference, displays only the first "frame".
So I simply have to "force" the animation withsprite.setAnimFrame("green", index)
orsprite.frame = index
And that I just checked if
graphic.active
istrue
,
And it is actuallytrue
.Unfortunately, I see no other solution than using. SetAnimFrame () at the moment.
Sincerely OB
-
I'm not sure what the difference might be in your code, but
play
does work - it's used in the platformer portion of this demo.
-
Hi
Has created 2 new projects to test the < SpriteMap > again.
Has basically recreated the code from previous projects.
Now I get it to work?!?!
I have compared the code between these projects, just can not see any difference. (there are so few lines, so I just can't see all wrong!?Possible that something went wrong in the "Haxedevelop" project files??
Have compiled to HTML and NEKO, everything now works as intended!
// OB
-
Hi
One last word about this.
If you add
public override function update () {...}
in your Scene object, then it is Super important to usesuper.update ()
in that function.Missed this in the beginning when I started a bunch of tests regarding this.
That's why I didn't get thesprite.play ("...")
to work!The same is also true for when you override
render ()
function, addsuper.render ()
at the beginning of the function.
Has also stumbled on that mistake!Bye!