[Squeakland] Etoys - create duplicate (not sibling) from a script?

Scott Wallace scott.wallace at squeakland.org
Thu Jan 31 02:04:07 PST 2008


Hi, Mark,

You're right that there's no direct programatic way using tiles alone  =

to obtain a proper "duplicate" (as opposed to a "sibling,") except (as  =

Pierre-Andr=E9 suggests) by using "do menu item - duplicate," which,  =

unsatisfactorily, leaves the clone in the "hand" rather than allowing  =

you programatically to place it where you wish.

However, by using a one-line textual script, you can get the desired  =

effect.

The trick is to devote a "Player-valued" variable to "remember" the  =

newly-created thing, so that you can send messages to it to set it up  =

the way you want.

In the example below, Robot has been given a player-valued variable  =

named "theDuplicate."  The one-line textual script creates a duplicate  =

of the Robot and places it into the "theDuplicate" variable.  Each  =

time this script is run, a new copy of the robot is made, and placed  =

into the originating robot's "theDuplicate" variable.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: pastedGraphic.jpg
Type: image/jpeg
Size: 27286 bytes
Desc: not available
Url : http://squeakland.org/pipermail/squeakland/attachments/20080131/6aad5=
701/pastedGraphic-0002.jpg
-------------- next part --------------



In order for the newborn to be seen on the screen, it needs to be put  =

somewhere visible, and this is done by "including" it in the desired  =

container, and positioning it appropriately; all of this can be done  =

with normal tiles.

Thus, for example, the following script first invokes the textual one- =

liner to create a copy, then adds the copy to the container, and,  =

finally, positions the copy at an offset to the upper-right of the  =

original robot.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: pastedGraphic.jpg
Type: image/jpeg
Size: 58520 bytes
Desc: not available
Url : http://squeakland.org/pipermail/squeakland/attachments/20080131/6aad5=
701/pastedGraphic-0003.jpg
-------------- next part --------------



Hope this helps!

Cheers,

   -- Scott



On Jan 30, 2008, at 7:55 PM, Mark Nelson wrote:

> Thanks for the tip.  That's getting closer to what I need, but in my
> application the robots need to be able to 'reproduce' without any user
> interaction.  Having a robot 'in hand' isn't going to work for this
> purpose.
>
> The robots autonomously explore their environment collecting
> food/energy and once they have acquired enough energy, they reproduce
> (generate a copy of themselves).  I have the reproduction algorithm
> working fine with the 'copy' tile, but I have the problem that the
> embedded sensors of the child robot seem to be linked back to the
> parent's sensors, rather than the child's own sensors.
>
> If you have any other ideas along these lines, please let me know.
> Thanks,
> --Mark
>
> On Jan 30, 2008 12:13 PM, Dreyfuss Pierre-Andr=E9 (EDU)
> <pierre-andre.dreyfuss at edu.ge.ch> wrote:
>> Hi,
>> you have to use do menu item tile in the category miscellanous and  =

>> choose duplicate as item.
>>
>> This seems create a copy in the hand.
>>
>>
>> If you want just create a new robot this will work. But there is no  =

>> handle on the new created object this way.
>>
>> however once dropped it can be designated as the first element of  =

>> the morph containing it.
>>
>>
>>
>>
>> Regards
>>
>>
>> -------- Message d'origine--------
>> De: squeakland-bounces at squeakland.org de la part de Mark Nelson
>> Date: mer. 30/01/2008 15:35
>> =C0: squeakland at squeakland.org
>> Objet : [Squeakland] Etoys - create duplicate (not sibling) from a  =

>> script?
>>
>>
>> Hi,
>>
>>> From an Etoys SCRIPT, how can I create a 'duplicate' of a player
>> (equivalent to clicking on the green halo icon), rather than creating
>> a 'sibling/clone' of a player (equivalent to SHIFT-clicking on the
>> green halo icon)?  The 'copy' tile available under the miscellaneous
>> category seems to create a clone; the textual equivalent of
>> ''Playfield include Ellipse's copy' is 'self include: Ellipse
>> getNewClone'.   What I need is the textual equivalent that would
>> create a 'duplicate' rather than a 'clone'.
>>
>> [Why do I care?  In the course that I'm currently teaching, we've
>> created a 'robot' with embedded 'sensors'  (the 'robots' and  =

>> 'sensors'
>> are created from individual Ellipse morphs; the sensors then get
>> embedded in the robot). The robot's actions depend on differences
>> between left and right sensor values. If I now make a 'duplicate' of
>> the robot using the green halo icon, the new robot works as expected.
>> However, if I make a 'clone' of the robot (either by SHIFT-clicking
>> the green halo icon, or by using the 'copy' tile in a script, the new
>> robot seems to pick up the sensor values from the original robot,
>> rather than from its own sensors.]
>>
>> Thanks in advance,
>> --Mark Nelson
>>
>>
>> _______________________________________________
>> Squeakland mailing list
>> Squeakland at squeakland.org
>> http://squeakland.org/mailman/listinfo/squeakland
>>
>>
>
> _______________________________________________
> Squeakland mailing list
> Squeakland at squeakland.org
> http://squeakland.org/mailman/listinfo/squeakland



More information about the Squeakland mailing list