[etoys-dev] How can I cause a script to be executed on an object when I click on it? (Beyond MouseDown)

Steve Thomas sthomas1 at gosargon.com
Tue Mar 29 09:44:31 EDT 2011


Thanks, this helps and gives me some other ideas.

I hesitate to mention this (as one should not "bite the hand that feeds")
but if you open the viewer for any of the color Player's in the pallette,
then get its viewer and pull out the "actOn" script, the scripting tile show
"Player | turn by | 45" even though it does set the color properly. If you
then "show code textually" and switch back to "tile version" it turns the
player on mouse down.

When I addeded a new tile (with the actOn script being "forward by | 20")
the scripts tiles changed to show "forward by | 20" although the behavior
did not change until I switched from tile->text->tile. I opened a ticket in
Tracker.

Stephen


On Tue, Mar 29, 2011 at 7:43 AM, Bert Freudenberg <bert at freudenbergs.de>wrote:

> On 29.03.2011, at 12:49, Steve Thomas wrote:
>
> For example, I want to some buttons to transform a costume or set an
> objects color  and I want to click on the button and then be able to click
> on an object (or set of objects) and run a particular script on the objects
> I click on.
>
> I could program each object to perform a particular action on Mouse Down,
> but I would rather write the script once and then have that script execute
> on the object I click.  I was able to achieve this by using a Player
> variable watcher and then having a constantly running script that tests if
> the myPlayer != dot and if so, run the script on the Player variable value,
> then reset to dot. But besides looking ugly (the dot always shows) I can
> only run on one object at a time then have to click on the Player variable's
> watcher.
>
> Thanks,
> Stephen
>
>
> Well, Etoys is really object-centric. So adding the mouseDown script to
> each object is the Right Thing to do. But if you want to "centralize" what
> actually happens when clicked, you could call a "dispatching" script and
> pass the object itself as argument. Give that script a parameter of type
> "Player" so it can execute to the current command.
>
> I'm attaching an example project. To make a new command, just duplicate an
> existing one and change its "actOn:" script.
>
> - Bert -
>
>
>
> _______________________________________________
> etoys-dev mailing list
> etoys-dev at squeakland.org
> http://lists.squeakland.org/mailman/listinfo/etoys-dev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakland.org/pipermail/etoys-dev/attachments/20110329/7d0a78eb/attachment.html>


More information about the etoys-dev mailing list