2017-02-21 24 views
-2

У меня есть простое окно, отображающие две фигуры, как так:Как рисовать две фигуры во временной последовательности с помощью Gloss?

import Graphics.Gloss 

circles = pictures [Translate 80 0 one, Translate (-80) 0 two] 

main = display (InWindow "t" (400,400) (800,0)) white circles 

one = Color red $ Circle 80 
two = Color blue $ Circle 50 

Я новичок в Gloss, но от того, что я собираю «дисплей» просто отображает статическое изображение раз основной (т.е. моего модуля) запускается так что вы не можете сделать анимацию, используя «дисплей»?

Что я хочу сделать, так это запустить мою программу с этими фигурами, но вместо того, чтобы отображать их одновременно, я хочу сначала отобразить один круг, а в следующую секунду другой круг - это какая-то анимация.

До сих пор я могу сделать что-то статичное и сразу отображать оба круга сразу же после запуска программы. Но я хочу, чтобы они появлялись друг за другом, как Run the program -> (0 sec) Blank screen -> (1 sec) One of the circles is drawn -> (2 sec) the other circle is drawn -> The window now displays circles until I close it.

Это должно быть так просто, используя функцию «оживить», но я не могу понять это. Если кто-то там со знанием, пожалуйста, подумайте о помощи! Это действительно сделает мой день.

ответ

3

используется animate для того, чтобы нарисовать картинку в зависимости от времени анимации:

main = animate (InWindow "t" (400,400) (800,0)) white draw 

draw :: Float -> Picture 
draw t 
    | t <= 1 = blank            -- in the first second 
    | t <= 2 = pictures [Translate 80 0 one]      -- between 1s and 2s 
    | otherwise = pictures [Translate 80 0 one, Translate (-80) 0 two] -- afterwards