Spriter/C2 update 11/2 bug fix for performance mode

Discussion and feedback on Construct 2

Post » Tue Aug 16, 2016 3:13 pm

chadorireborn wrote:
lucid wrote:btw, everyone, just a status update for anyone having the issue with the bounding boxes of the objects. I don't have an ETA yet for the release of the fix, but the bounding box fix is already working on my internal builds of Spriter and the scml plugin. I just a few more unrelated bugs to squash in Spriter before I release the upcoming build, but it shouldn't be too long. Thanks for your patience.


Ohh Good :D . Thanks for this.

Btw @lucid , have you already made some thoughts about this below? That's about my request before, the visual display of the scml object. To show a differentiation
of each object since the white boxes of the scml objects look alike.

lucid wrote:
chadorireborn wrote:Woah, I nearly missed seeing this. I meant the scml object white boxes on the editor(layout view), since they all look alike, it is hard to identify which is which. Then i suggested to add a text(nametag) of the name of the scml object so it will be easier to differentiate like the scml object has it's own scale always shown. Or did you / with your team thought of something better?

Thanks again.
Oh right. I need to look into this more. I haven't found a decent solution, but in all honesty I haven't had a lot of time checking for one yet either. There's a few things I need to take care of in the near future, so it may be a while, but please remind me if I haven't responded one way or the other in the next couple of weeks.

No news yet, but I will make sure to take a look at this and have an answer one way or the other for the next plugin update (which will arrive at the same time as the new Spriter version).



Sergeyk wrote:Hi Lucid,

I have one question.

I use new self draw mode for my Spriter animations.

How can I add sound into C2 if I do not drag scml file to C2? (I double click on C2 layout and add scml plugin - according the new instruction of using self draw mode)

Thank you in advance, I spent 3 hours trying to add sound into C2 with new mode

Sergey.

Hello Sergey, the hybrid import should work:
I wrote:For anyone curious, there is actually a hybrid way to import now, which is a bit tedious, but I will explain it in case anyone wants to use direct drawing mode with collision boxes, or even with collideable sprites. First, save your project normally, and then save a spritesheeted project. Import your non-spritesheeted project the old way. Follow the old to new style project conversion steps, but this time only delete everything except collision boxes, and other sprites you want to test for collisions. This should self draw the animation, but also animate the separate sprites and collision boxes you kept. Keep in mind, the zorder will not place sprites correctly inside the self-drawing scml object, so it's probably only useful for making invisible sprite objects for collision detection.


Let me know if you have any issues.
Spriter Dev
B
87
S
21
G
12
Posts: 3,240
Reputation: 16,461

Post » Fri Aug 19, 2016 4:21 pm

lucid wrote:
chadorireborn wrote:
lucid wrote:Hi @Falterdan, because of the way the plugin system works, and the plugin using actual c2 objects, there was always a tradeoff of either the entire character being one tick behind, or things set to a Spriter object's position. I'll explain why below, if you're interested, but as far as an actual solution, there's an action under the 'Attach C2 Object' category called 'Set C2 Object to Spriter object'.


Nice one. I experience the lag as well. Good thing you've posted this. :D

Edit:

@lucid - How does this action work, the Set C2 Object to Spriter Object... I used it as a replacement for set position to (x,y) since the set spriter to position(spriteX, spriteY) causes a short lag, but I don't know what does this action do, it didn't go to the position(x,y) of my sprite black box, I think I misunderstood the use?


It's meant to use every tick, like you're setting the position that one tick, rather than a permanent attachment. Is that already what you're doing?



I am sorry, but I don't get it... I don't know what the function is for...

I tried this..

(Player1_SpriterObject) as the SCML Object.
(Player1) as the BlackBox with behaviors.



(As a substitute to -> Set Player1_SpriterObject to (Player1.X, Player1.Y) )

*Every tick
--->(Player1_SpriterObject) -> Set C2 object to Spriter Object (Player1, Position only, "")

and

*Every tick
--->(Player1_SpriterObject) -> Set C2 object to Spriter Object to (Player1, Position only, "Player1_SpriterObject")

and

(As a feature like the pin object. I used it as a once pin trigger)

*On created
--->Set (Player1_SpriterObject) to (Player1.X, Player1.Y)
--->(Player1_SpriterObject) -> Set C2 object to Spriter Object to (Player1, Position only, "Player1_SpriterObject")


------------------------------------------------------------------------------------------------------------


Is it like the Set Spriter Object Position to (PlayerBlackBox_PositionX, PlayerBlackBox_PositionY) of the Player BlackBox?
I don't understand the action's use. @lucid , can you give me an example that uses the action "Set C2 Object to Spriter Object"?
Even if it is on a text format like the one I made above. Thanks.
The Things you can create is only limited by your imagination. If you don't have the skills then use your motivation as a natural force to exceed all expectations. Chadori RebornXD
B
30
S
12
G
76
Posts: 964
Reputation: 50,850

Post » Sat Aug 20, 2016 2:01 pm

@lucid

Hello again @lucid . I think I have found some bugs. But I got a high feeling that it really is a bug.
I sent you an email with the .capx file, Spriter File(scml & scon) & Preview image but I only managed to reproduce Bug1 on a .capx file but not Bug2.

But I think if you fix Bug1, it might also fix Bug2.

Thanks a lot.

Below is the content of the note I sent you on the email.


Bug 1 (with .capx)

I'm not sure if it is a bug but I just found out that the Scml object doesn't mirror when
the animation finished playing a certain animation or the animation is not playing anything.


Since it is a non-repeating animation. It doesn't mirror afterwards...

I have only found out about Bug 1 because of Bug 2.


--------------------------------------------------------------------------------------------

Bug 2 - Also connected to Bug 1 (without .capx) (Sorry, I can't reproduce it yet with a sample .capx.)

Lucid, I found this problem when I found out that my spriter object on C2 was playing a single trigger or non-repeating
animation and it has a code that makes it look at the player. Mirrored if the player is at the left side &
Non-Mirrored if the player is at the right side.

The Spriter Object has finished playing the single trigger animation.
But the player moved to another side and this somehow triggered a mirror state of the animation.

As I stated at the Bug 1, the Mirror event doesn't work when a single trigger animation has finished playing it's animation.
But in my game, it somehow forced it to mirror and I am still finding the reason for it so that I can give you more details.


I have a picture of a mirror fail. It is named Bug2 Preview (comment).png
(On the email I sent you)

Thanks.

The Things you can create is only limited by your imagination. If you don't have the skills then use your motivation as a natural force to exceed all expectations. Chadori RebornXD
B
30
S
12
G
76
Posts: 964
Reputation: 50,850

Post » Tue Aug 23, 2016 4:26 pm

@lucid - And about the Skins(Experimental) does that feature affect largely on performance? I am making a game for mobile & I want to make sure that it doesn't use up a lot of memory & cpu like the physics plugin. Thanks.
The Things you can create is only limited by your imagination. If you don't have the skills then use your motivation as a natural force to exceed all expectations. Chadori RebornXD
B
30
S
12
G
76
Posts: 964
Reputation: 50,850

Post » Tue Aug 30, 2016 11:50 am

@lucid, not sure if this is right place to post, but is there any way using Spriter to replicate the following action:

Wait PlayerSprite.AnimationFrameCount/PlayerSprite.AnimationSpeed

I can't use the on animation finished trigger as the wait takes place inside a for loop between a series of actions
B
10
Posts: 21
Reputation: 390

Post » Wed Aug 31, 2016 3:28 pm

New plugin release!
8/31/2016
  • Direct drawing mode can now use bounding box data created in Spriter.
  • Added animationLength and speedRatio expressions
  • Fixed a bug where mirror and flip actions wouldn't apply while animations were paused

Scml objects can now use bounding boxes precalculated in Spriter for correct clipping and effects.
To use this feature, in Spriter, simply click on the box icon on the animation widget. Use settings roughly like what you see below:
Image
framerate: In order to calculate a bounding box that takes tweening into account, Spriter will go through the animation at a set framerate. 60 is recommended.
padding: Extra pixels added to each side of the bounding box to ensure that frames in between the above calculated don't go slightly outside. 0 is probably fine for most cases, but 1 or 2 pixels isn't going to affect your performance and makes doubly sure.


The best workflow would probably be to run the calculation once on all animations the first time you use it, and each time you add an animation. After that, only bother recalculating the bounding box if new animation changes massively affect the bounding box, or if you notice any clipping at runtime. And of course, run it once before shipping or demoing your game.



And finally. I apologize for the late replies everyone. Things have been a bit hectic with the contest and Spriter release.

chadorireborn wrote:I am sorry, but I don't get it... I don't know what the function is for...

If I'm understanding you correctly, it's not used for that purpose. For pinning the entire Spriter character to a box, just use the pin behavior. But say you have a C2 object. We'll call it Fire. And you have an scml object, and you want the fire attached to the character's hand. Without this action, it would always lag a tick behind if you used something like Every Tick - set Fire position to {scmlChar.objectX("hand"),scmlChar.objectY("hand")} for the above mentioned reasons. This action let's you set the position every tick in the same way, but it waits until the scml plugin's post-tick calculations are made before moving the object, so it doesn't lag behind.

chadorireborn wrote:@lucid

Hello again @lucid . I think I have found some bugs.
...
It doesn't mirror afterwards
...

If I fully understood, this issue is fixed with today's release. Let me know if I missed anything.

chadorireborn wrote:@lucid - And about the Skins(Experimental) does that feature affect largely on performance? I am making a game for mobile & I want to make sure that it doesn't use up a lot of memory & cpu like the physics plugin. Thanks.
The skins feature is not currently supported on any game engines (as far as we know). We're currently working on a more complete skin mode for Spriter 2, which will be a free upgrade to all current Spriter Pro owners. No ETA on that yet.

stricky wrote:@lucid, not sure if this is right place to post, but is there any way using Spriter to replicate the following action:

Wait PlayerSprite.AnimationFrameCount/PlayerSprite.AnimationSpeed

I can't use the on animation finished trigger as the wait takes place inside a for loop between a series of actions
hmmm. I'm not sure I understand. You want to use a wait command and you need to know what expressions you need for it to give you the current amount of time it should take the animation to play? If so that would be animationLength/speedRatio (both new expressions. Really surprised animationLength never came up before).
Spriter Dev
B
87
S
21
G
12
Posts: 3,240
Reputation: 16,461

Post » Wed Aug 31, 2016 3:42 pm

lucid wrote:If I'm understanding you correctly, it's not used for that purpose.


Ohh, I think I get it now.

lucid wrote:If I fully understood, this issue is fixed with today's release. Let me know if I missed anything.


It works fine now. :D

lucid wrote:The skins feature is not currently supported on any game engines (as far as we know). We're currently working on a more complete skin mode for Spriter 2, which will be a free upgrade to all current Spriter Pro owners. No ETA on that yet.


Ok, I think you did the best you could. I'll just wait for Spriter 2 for that.

lucid wrote:New plugin release!
8/31/2016
  • Direct drawing mode can now use bounding box data created in Spriter.
  • Added animationLength and speedRatio expressions
  • Fixed a bug where mirror and flip actions wouldn't apply while animations were paused


Thanks for the update :D . I tried it and it fixed it.
The Things you can create is only limited by your imagination. If you don't have the skills then use your motivation as a natural force to exceed all expectations. Chadori RebornXD
B
30
S
12
G
76
Posts: 964
Reputation: 50,850

Post » Fri Sep 02, 2016 9:37 am

Great plugin, just starting to use it. Is it possible to set a frame rate for an animation?
It seems too smooth for a retro type of game
Also, a 20-30 FPS animation looks closer to a movie or animated cartoon. everything above looks like TV news
B
64
S
15
G
20
Posts: 469
Reputation: 16,027

Post » Fri Sep 02, 2016 4:14 pm

Cipriux wrote:Great plugin, just starting to use it. Is it possible to set a frame rate for an animation?
It seems too smooth for a retro type of game
Also, a 20-30 FPS animation looks closer to a movie or animated cartoon. everything above looks like TV news

Right now, the only way to do that would be to manually use instant speed curves on your keyframes in Spriter to make the animation limited to those frames (as many as needed).
Spriter Dev
B
87
S
21
G
12
Posts: 3,240
Reputation: 16,461

Post » Fri Sep 02, 2016 5:13 pm

lucid wrote:
Cipriux wrote:Great plugin, just starting to use it. Is it possible to set a frame rate for an animation?
It seems too smooth for a retro type of game
Also, a 20-30 FPS animation looks closer to a movie or animated cartoon. everything above looks like TV news

Right now, the only way to do that would be to manually use instant speed curves on your keyframes in Spriter to make the animation limited to those frames (as many as needed).

I see, thanks. That is a little more tedious, but will do. An option to covert to a "tesselated"(instant speed) animation would be nice, inserting a keyframe every 1/FPS seconds
B
64
S
15
G
20
Posts: 469
Reputation: 16,027

PreviousNext

Return to Construct 2 General

Who is online

Users browsing this forum: Arima and 2 guests