2016 Update
This commit is contained in:
parent
948b86eafa
commit
dcf5d15da3
7965 changed files with 139854 additions and 31002 deletions
|
|
@ -1,3 +1,10 @@
|
|||
'''Animation''' is integral to many parts of [[GUI]]s, including both the fancy effects when things change used in window managers, and of course games. The core of any animation system is a scheme for periodically changing the display while still remaining responsive to the user. This task demonstrates this.
|
||||
'''Animation''' is integral to many parts of [[GUI]]s, including both the fancy effects when things change used in window managers, and of course games. The core of any animation system is a scheme for periodically changing the display while still remaining responsive to the user. This task demonstrates this.
|
||||
|
||||
Create a window containing the string "<code>Hello World! </code>" (the trailing space is significant). Make the text appear to be rotating right by periodically removing one letter from the end of the string and attaching it to the front. When the user clicks on the text, it should reverse its direction.
|
||||
|
||||
;Task:
|
||||
Create a window containing the string "<code>Hello World! </code>" (the trailing space is significant).
|
||||
|
||||
Make the text appear to be rotating right by periodically removing one letter from the end of the string and attaching it to the front.
|
||||
|
||||
When the user clicks on the (windowed) text, it should reverse its direction.
|
||||
<br><br>
|
||||
|
|
|
|||
58
Task/Animation/Go/animation.go
Normal file
58
Task/Animation/Go/animation.go
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"log"
|
||||
"time"
|
||||
|
||||
"github.com/gdamore/tcell"
|
||||
)
|
||||
|
||||
const (
|
||||
msg = "Hello World! "
|
||||
x0, y0 = 8, 3
|
||||
shiftsPerSecond = 4
|
||||
clicksToExit = 5
|
||||
)
|
||||
|
||||
func main() {
|
||||
s, err := tcell.NewScreen()
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
if err = s.Init(); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
s.Clear()
|
||||
s.EnableMouse()
|
||||
tick := time.Tick(time.Second / shiftsPerSecond)
|
||||
click := make(chan bool)
|
||||
go func() {
|
||||
for {
|
||||
em, ok := s.PollEvent().(*tcell.EventMouse)
|
||||
if !ok || em.Buttons()&0xFF == tcell.ButtonNone {
|
||||
continue
|
||||
}
|
||||
mx, my := em.Position()
|
||||
if my == y0 && mx >= x0 && mx < x0+len(msg) {
|
||||
click <- true
|
||||
}
|
||||
}
|
||||
}()
|
||||
for inc, shift, clicks := 1, 0, 0; ; {
|
||||
select {
|
||||
case <-tick:
|
||||
shift = (shift + inc) % len(msg)
|
||||
for i, r := range msg {
|
||||
s.SetContent(x0+((shift+i)%len(msg)), y0, r, nil, 0)
|
||||
}
|
||||
s.Show()
|
||||
case <-click:
|
||||
clicks++
|
||||
if clicks == clicksToExit {
|
||||
s.Fini()
|
||||
return
|
||||
}
|
||||
inc = len(msg) - inc
|
||||
}
|
||||
}
|
||||
}
|
||||
18
Task/Animation/HicEst/animation.hicest
Normal file
18
Task/Animation/HicEst/animation.hicest
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
CHARACTER string="Hello World! "
|
||||
|
||||
WINDOW(WINdowhandle=wh, Height=1, X=1, TItle="left/right click to rotate left/right, Y-click-position sets milliseconds period")
|
||||
AXIS(WINdowhandle=wh, PoinT=20, X=2048, Y, Title='ms', MiN=0, MaX=400, MouSeY=msec, MouSeCall=Mouse_callback, MouSeButton=button_type)
|
||||
direction = 4
|
||||
msec = 100 ! initial milliseconds
|
||||
DO tic = 1, 1E20
|
||||
WRITE(WIN=wh, Align='Center Vertical') string
|
||||
IF(direction == 4) string = string(LEN(string)) // string ! rotate left
|
||||
IF(direction == 8) string = string(2:) // string(1) ! rotate right
|
||||
WRITE(StatusBar, Name) tic, direction, msec
|
||||
SYSTEM(WAIT=msec)
|
||||
ENDDO
|
||||
END
|
||||
|
||||
SUBROUTINE Mouse_callback()
|
||||
direction = button_type ! 4 == left button up, 8 == right button up
|
||||
END
|
||||
44
Task/Animation/Icon/animation-1.icon
Normal file
44
Task/Animation/Icon/animation-1.icon
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
import gui
|
||||
$include "guih.icn"
|
||||
|
||||
class WindowApp : Dialog (label, direction)
|
||||
|
||||
method rotate_left (msg)
|
||||
return msg[2:0] || msg[1]
|
||||
end
|
||||
|
||||
method rotate_right (msg)
|
||||
return msg[-1:0] || msg[1:-1]
|
||||
end
|
||||
|
||||
method reverse_direction ()
|
||||
direction := 1-direction
|
||||
end
|
||||
|
||||
# this method gets called by the ticker, and updates the label
|
||||
method tick ()
|
||||
static msg := "Hello World! "
|
||||
if direction = 0
|
||||
then msg := rotate_left (msg)
|
||||
else msg := rotate_right (msg)
|
||||
label.set_label(msg)
|
||||
end
|
||||
|
||||
method component_setup ()
|
||||
direction := 1 # start off rotating to the right
|
||||
label := Label("label=Hello World! ", "pos=0,0")
|
||||
# respond to a mouse click on the label
|
||||
label.connect (self, "reverse_direction", MOUSE_RELEASE_EVENT)
|
||||
add (label)
|
||||
|
||||
connect (self, "dispose", CLOSE_BUTTON_EVENT)
|
||||
# tick every 100ms
|
||||
self.set_ticker (100)
|
||||
end
|
||||
end
|
||||
|
||||
# create and show the window
|
||||
procedure main ()
|
||||
w := WindowApp ()
|
||||
w.show_modal ()
|
||||
end
|
||||
21
Task/Animation/Icon/animation-2.icon
Normal file
21
Task/Animation/Icon/animation-2.icon
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
link graphics
|
||||
|
||||
procedure main()
|
||||
s := "Hello World! "
|
||||
WOpen("size=640,400", "label=Animation")
|
||||
Font("typewriter,60,bold")
|
||||
direction := 1
|
||||
w := TextWidth(s)
|
||||
h := WAttrib("fheight")
|
||||
x := (WAttrib("width") - w) / 2
|
||||
y := (WAttrib("height") - 20 + h) / 2
|
||||
|
||||
repeat
|
||||
{ if *Pending() > 0 then if (Event() = &lrelease) & (x < &x < x + w) & (y > &y > y-h) then direction := ixor(direction, 1)
|
||||
s := s[2 - 3 * direction:0] || s[1:2 - 3 * direction]
|
||||
EraseArea(x, y, w, -h)
|
||||
DrawString(x,y - WAttrib("descent")-1,s)
|
||||
WFlush()
|
||||
delay(250)
|
||||
}
|
||||
end
|
||||
7
Task/Animation/ZX-Spectrum-Basic/animation.zx
Normal file
7
Task/Animation/ZX-Spectrum-Basic/animation.zx
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
10 LET t$="Hello world! ": LET lt=LEN t$
|
||||
20 LET direction=1
|
||||
30 PRINT AT 0,0;t$
|
||||
40 IF direction THEN LET t$=t$(2 TO )+t$(1): GO TO 60
|
||||
50 LET t$=t$(lt)+t$( TO lt-1)
|
||||
60 IF INKEY$<>"" THEN LET direction=NOT direction
|
||||
70 PAUSE 5: GO TO 30
|
||||
Loading…
Add table
Add a link
Reference in a new issue