Closed MHOOO closed 12 years ago
Yes, this is the expected behavior. Any suggestion ?
Just put an invisible "proxy" actor the same size as the actorcontainer as the last child in actorcontainer. Catch the mouse events on that proxy actor and call findActorAtPosition with the coordinates on the container. That should work.
Thanks for the tip, but I basically worked around the issue by handling the events on the individual childs contained within the ActorContainer. I find the behavior to be strange however, since the function name and documentation does not hint at this behavior at all.
Here's another problem with findActorAtPosition: if I scale down the ActorContainer (setScale(.5,.5)), then findActorAtPosition no longer returns the correct result. Is this intended behavior as well?
Ah, I see. findActorAtPosition requires the parameter to be in view space. I however, passed in the point in model space (i.e. a point relative to the ActorContainers origin). I find that behavior to be unintuitive as well.
You have the following API in an actor:
modelToView, to turn actor's local coordinates into world coordinates. viewToModel, which does the opposite: take an screen coord, and know what local coordinate is. modelToModel, to transform a local coordinate into another actor's space local coordinate.
findActorAtPosition relies on viewToModel, but you can choose what function to use. One thing is that you must never call these functions during animation phase. they are safe to be called from paint code though.
What rob suggest is a very valid option, and then use whatever the coordinate system transformation best fits your need.
Regards,
I am calling those functions during the onClick handler - is that valid, or do I have to defer calling them until the paint code?
yes.
I'm unsure which of my two questions the "yes" is supposed to answer. The first or the second?
yes. you can call these functions during onclick. best.
I have an ActorContainer that contains several fields (i.e. actors) and I wanted to colorize those fields when the mouse was dragged over the ActorContainer. So in order to get events on the ActorContainer, I disabled events on the Actors that are inside it. Now however, I am no longer able to get any child using the ActorContainer.findActorAtPosition function. Is this intended behavior?