"On fade finished" activates for other fade behaviors

Bugs will be moved here once resolved.

Post » Sat Apr 29, 2017 10:37 pm

Problem Description
An object has 2 fade behaviors.
Fade 1 activates.
Fade 2 has an "on fade finished" event.
When Fade 1 finishes, Fade 2's "on fade finished" event activates.

Expected behavior: Fade 1 finishes and Fade 2's on fade finished event does not activate.

Attach a Capx
https://ufile.io/fnxkw

Description of Capx
Extremely simple: runs a fade, and sets text if the other fade behavior is finished.

Steps to Reproduce Bug
Play the layout and watch.

Observed Result
The text changes even though it should only change when the corresponding fade behavior is finished.

Expected Result
Nothing.

Affected Browsers
  • Chrome: Yes
  • FireFox: Yes

Operating System and Service Pack
Windows 10 Home

Construct 2 Version ID
r243
B
19
S
10
Posts: 51
Reputation: 1,675

Post » Sun Apr 30, 2017 5:14 am

happening for me as well.

Once any fade-in, wait or fade-out finishes it triggers for all the fades.

using r244
B
88
S
29
G
14
Posts: 1,154
Reputation: 15,003

Post » Sun Apr 30, 2017 9:52 pm

jobel wrote:happening for me as well.

Once any fade-in, wait or fade-out finishes it triggers for all the fades.

using r244


Thanks for confirming. (Didn't even notice a r244 was out.)

I'm curious if there are any workarounds for this... can't think of any, and since the Fade behavior isn't a 3rd-party one, I'm less inclined to try and fix it myself... (though I also know Scirra is busy and all, so at least for a short bit, I'm stumped, haha, guess I'll wait for now)

EDIT: Took a brief look at the behavior code.

It seems like it doesn't account at all for multiple fade behaviors—it triggers stuff based purely on the object instance the Fade behavior belongs to—and I'm not even sure i t would be possible to "retrieve" the name of the Fade behavior since it seems like it's not a variable in the behavior but rather something that Construct 2 handles (and possibly internal, not sure and would have to look more into it, I'm just guessing here).

If my guesses are right though then one solution would be to add something like a "Name" or "ID" to the fade behavior and have the trigger events require a parameter for that, such that they only trigger for a fade with the corresponding name/ID.

I could probably do this myself given enough time, but it could be messier than something official, and in general I prefer not to mess with official plugins (for various reasons)—even if I did, I'd be inclined to make a copy, but changing my project to use said copy could be... tedious, if not problematic, so I'm once again stumped on what I should do. I thought about just using different objects for the different fade behaviors, but trying to work with both when they serve different purposes seems like an inefficient solution/general hassle. Hm...

Maybe I can work around the problem using some combination of instance variables/conditions (going to try now), but it'd be nice if this were upgraded to support multiple fade behavior instances attached to a single object instance.
B
19
S
10
Posts: 51
Reputation: 1,675

Post » Mon May 01, 2017 3:29 am

well for a work-around you'd start the fade and set a flag and then in your OnFinished, just check the flag as well and that's how you'd manually figure out which fade had finished. You'd create a bool for each Fade.
B
88
S
29
G
14
Posts: 1,154
Reputation: 15,003

Post » Mon May 01, 2017 5:49 am

jobel wrote:well for a work-around you'd start the fade and set a flag and then in your OnFinished, just check the flag as well and that's how you'd manually figure out which fade had finished. You'd create a bool for each Fade.


Yeah that's what I did, it's just a little confusing to manage that for each one in a big project like mine, haha.
B
19
S
10
Posts: 51
Reputation: 1,675

Post » Mon May 01, 2017 3:26 pm

BBaller1337 wrote:
jobel wrote:well for a work-around you'd start the fade and set a flag and then in your OnFinished, just check the flag as well and that's how you'd manually figure out which fade had finished. You'd create a bool for each Fade.


Yeah that's what I did, it's just a little confusing to manage that for each one in a big project like mine, haha.

it's not too bad though, 2 extra Actions and only one extra Event Condition.

Start Fade
Set fade1 to true

>>OnFade Finished AND fade1 is true Then
reset fade1 to false

but I guess it depends on exactly how many objects you have fading and watching, then trigger when finished. I almost never use onFadeFinished usually for me it's fade and forget.
B
88
S
29
G
14
Posts: 1,154
Reputation: 15,003

Post » Mon May 01, 2017 4:44 pm

yeah exactly, it's just that it adds up when you have a lot and if I forget it could be problematic haha, it's not bad individually
B
19
S
10
Posts: 51
Reputation: 1,675

Post » Mon Jun 26, 2017 11:36 am

Original project link unavailable so closing.

BBaller1337 wrote:It seems like it doesn't account at all for multiple fade behaviors—it triggers stuff based purely on the object instance the Fade behavior belongs to

You're right, this sounds like it would explain it from the description, and it's an architectural oversight more than a bug. The proper fix would involve re-architecting all behavior triggers which would be quite a lot of work, and possibly cause compatibility problems with third-party behaviors. So I think it would be easiest to fix this in the upcoming C3 runtime which is being rewritten anyway.

I'm not sure why you'd want to use two of the same behavior anyway - why not just adjust the settings of one?
Scirra Founder
B
387
S
230
G
88
Posts: 24,251
Reputation: 192,454

Post » Mon Jun 26, 2017 11:47 am

Ashley wrote:Original project link unavailable so closing.

BBaller1337 wrote:It seems like it doesn't account at all for multiple fade behaviors—it triggers stuff based purely on the object instance the Fade behavior belongs to

You're right, this sounds like it would explain it from the description, and it's an architectural oversight more than a bug. The proper fix would involve re-architecting all behavior triggers which would be quite a lot of work, and possibly cause compatibility problems with third-party behaviors. So I think it would be easiest to fix this in the upcoming C3 runtime which is being rewritten anyway.

I'm not sure why you'd want to use two of the same behavior anyway - why not just adjust the settings of one?

Ehhmm, so C2 fade behavior will still bugged?
~Everyone can make GAMEs~
B
54
S
10
G
1
Posts: 411
Reputation: 5,655

Post » Tue Jun 27, 2017 6:50 am

Ashley wrote:Original project link unavailable so closing.

BBaller1337 wrote:It seems like it doesn't account at all for multiple fade behaviors—it triggers stuff based purely on the object instance the Fade behavior belongs to

You're right, this sounds like it would explain it from the description, and it's an architectural oversight more than a bug. The proper fix would involve re-architecting all behavior triggers which would be quite a lot of work, and possibly cause compatibility problems with third-party behaviors. So I think it would be easiest to fix this in the upcoming C3 runtime which is being rewritten anyway.

I'm not sure why you'd want to use two of the same behavior anyway - why not just adjust the settings of one?


Whoop, didn't think the link would die out, sorry about that. Though you responded anyway, so it's not a big deal.

Yeah, it's not a bug per se, just intended to work differently than what I expected. Sorry if I worded any of my posts poorly. I understand the situation and as you implied, I think a C3 adjustment would be the best course here, it's not a problem that can't be worked around in C2 and it's not a simple fix per se, nor is it an issue of much significance.

As for the answer to your question—ease of use/organization.

Let's say I have an object that fades in and out, each at 2 different speeds, meaning there are basically 4 ways it could fade. For each given fade, I could set all the values first before fading, but this would get a bit tedious/cluttered if I call a given fade more than once.

I could then put it in a function to fix that, but then I need to write (preferably using local variables) and call said function before every fade, and I'd rather have that information preset as part of the object/behavior since I'd be able to find it easily, rather than having to look up and edit a function.

Since I can rename behaviors, I thought it effective to name each Fade based on the type it is (e.g. "FadeIn", "FadeInQuick", "FadeOut", "FadeOutQuick"), then just call said fade, thus making it clear what kind of fade is happening, without adding the extra work/clutter of fade functions—C2 lets me set the values to start, anyway.

I'm not sure if there's a notable overhead for having multiple fade behaviors like that, but I can't think of any reason there would be. And if there's an easier way to do it than I've brought up, I apologize for having not been aware of it (and not coming up with it myself).

tl;dr, the issue could easily be considered a matter of convenience/organization and not essential, but might be appreciated in C3 should you find the time. Thank you kindly for responding and for your support. :)
B
19
S
10
Posts: 51
Reputation: 1,675


Return to Closed bugs

Who is online

Users browsing this forum: No registered users and 1 guest