[Newbies] How to put a delay between Morph movements/changes ?

Nicola Mingotti nmingotti at gmail.com
Thu Oct 24 07:47:18 UTC 2019


Hi KK Subbu,

I own that book and luckily I red already that chapter. Anyhow it was a 
good recommendation;)

I am aware of the `step` method, that is not really what I want in this 
case. I am preparing a video tutorial, I need changes to be slow and the 
user to be able to modify stuff. Something feeling like Etoys, but in 
Smalltalk.

I discovered by accident that what i wanted is not difficult to achieve 
running this:
----------- for some reason it works -------------------
1 to: 10 do: [:x |
      e forward: 10.
      Transcript show: ('[{1} -- hello]' format: {x}); cr.
      (Delay forMilliseconds: 500) wait.
          ].
--------------------------------------------------------

Then after your suggestion I went to review that chapter in search for 
inspirations. And I remembered the `World` is just a `PasteUpMorph`, so 
I started to dig into the class and I found this method which I already 
read about somewhere else, probably "the white book": `doOneCycleNow`
-------- working, reasonable, easy to read --------------
1 to: 20 do: [:x |
      e forward: 10.
      World doOneCycleNow.
      (Delay forMilliseconds: 200) wait.
          ].
---------------------------------------------------------


Then I wrote this, but i don't think i will use it because it starts to 
be difficult to understand for new users.
----- better looping to not starve UI --------------
[1 to: 10 do: [:x |
      e forward: 10.
      World doOneCycleNow.
      (Delay forMilliseconds: 500) wait.
       ] ] fork.
-----------------------------------------------------


If you have other recommendations for improvement let me know.

bye
Nicola




On 10/23/19 10:46 PM, K K Subbu wrote:
> Nicola,
>
> Morphic updates to Display are buffered, so you can't animate them 
> through delays. Morphic core already has built-in facilities to 
> support animation in an efficient way. There is an excellent tutorial 
> by John Maloney at:
>
>
> http://sdmeta.gforge.inria.fr/FreeBooks/CollectiveNBlueBook/morphic.final.pdf 
>
>
> See the section on "Adding Liveness" (page 11) for the specifics.
>
> HTH .. Subbu
>
> On 24/10/19 5:03 AM, Nicola Mingotti wrote:
>> Hi,
>>
>> I would like a Morph to move and then wait a bit, move and wait a bit 
>> ... and so on. I can't get it.
>>
>> For example, this code works as expected:
>> ------------
>> 1 to: 10 do: [:x |
>>      Transcript show: ('[{1} -- hello]' format: {x}); cr.
>>      (Delay forMilliseconds: 500) wait.
>>      ].
>> --------------
>>
>> But once i try to put the Delay between a Morph changes it does not 
>> do what i want. That is, the morph does all the actions together at 
>> the end of the loop.
>>
>> ---------------------------
>> e := PolygonMorph new.
>> e openInWorld.
>> e position: 300 at 300.
>> e heading.
>> e forward: 50.
>>
>> 1 to: 10 do: [:x |
>>      e forward: 10.
>>      (Delay forMilliseconds: 500) wait.
>>      ].
>> ---------------------
>>
>> bye
>> Nicola
>>
>>
>>
>>
>>
>>
>> _______________________________________________
>> Beginners mailing list
>> Beginners at lists.squeakfoundation.org
>> http://lists.squeakfoundation.org/mailman/listinfo/beginners
>>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/beginners/attachments/20191024/e7c2f34d/attachment.html>


More information about the Beginners mailing list