Can't you just add conditions to an "On touched object" event to ignore any that are invisible or on invisible layers?
Yes, I can just add conditions to an "On touched object" event to ignore any that are invisible or on invisible layers. But:
1. To ignore objects that are on invisible layer, I'd have to make a condition "System: Layer Sprite.LayerNumber is visible":
Or the same thing with LayerName. This is a bad practice because it all stops working the second I rename the layer or change the layers order in Layers Panel or move the sprite do a different layer. And if it breaks, it's sooooo hard to find this error.
2. Checking if the layer or the object itself is visible is not enough. Sometimes objects you don't want to be touchable at the moment are technically visible (for example, under a popup). So to deal with that you should also make a condition "System: ×Layer 'Popup_Layer' is visible":
It only makes things worse because now you have twice the chance of accidentally breaking everything. Also you have to check all possible popup layers if there's more:
System: ×Layer 'Popup_LayerShop' is visible
System: ×Layer 'Popup_LayerPause' is visible
System: ×Layer 'Popup_LayerGameOver' is visible
Not only should you check all these layers for visibility, you should also not forget to add a new check when you come up with the new layer sometime later (and you will).
And don't forget that you have to do all of this with every touchable object in every layout that has touchable objects on at least two layers.
And all of the above doesn't cover cases when two touchable objects overlap on the same layer. There's not much sense in triggering both of them when I touch the one that's on top of the layer when the one that's behind may not even be seen at all.
3. No one wants to do all of that anyways. It's 1 in a 100 case when you actually need a tap to go through all layers and objects (even the ones that are invisible) and trigger everything it bumps into. This shouldn't have been a default behavior in the first place.