aboutsummaryrefslogtreecommitdiff
path: root/examples/sdlevents.tcl
diff options
context:
space:
mode:
authorSteve Bennett <steveb@workware.net.au>2021-01-01 16:13:50 +1000
committerSteve Bennett <steveb@workware.net.au>2021-01-01 16:59:24 +1000
commit93d825954866e782ed953834a7b4de972e83a8f4 (patch)
treee3ff4feb478d7175062cfd378679893dede38348 /examples/sdlevents.tcl
parentfd2930c32005fceebf244e5027e72f21dc728c72 (diff)
downloadjimtcl-93d825954866e782ed953834a7b4de972e83a8f4.zip
jimtcl-93d825954866e782ed953834a7b4de972e83a8f4.tar.gz
jimtcl-93d825954866e782ed953834a7b4de972e83a8f4.tar.bz2
sdl: Add basic text support
Requires a truetype font file Signed-off-by: Steve Bennett <steveb@workware.net.au>
Diffstat (limited to 'examples/sdlevents.tcl')
-rw-r--r--examples/sdlevents.tcl40
1 files changed, 30 insertions, 10 deletions
diff --git a/examples/sdlevents.tcl b/examples/sdlevents.tcl
index e9f37d8..e4dcf92 100644
--- a/examples/sdlevents.tcl
+++ b/examples/sdlevents.tcl
@@ -22,10 +22,14 @@ class ball {
res {x 512 y 512}
delta {x 3 y 3}
radius 40
+ havetext 1
}
ball method draw {s} {
$s fcircle $pos(x) $pos(y) $radius {*}$color
+ if {$havetext} {
+ $s text "($pos(x),$pos(y))" $pos(x)-25 $pos(y)-5 0 0 0
+ }
foreach xy {x y} {
incr pos($xy) $delta($xy)
if {$pos($xy) <= $radius + $delta($xy) || $pos($xy) >= $res($xy) - $radius - $delta($xy) || [rand 50] == 1} {
@@ -35,19 +39,31 @@ ball method draw {s} {
}
}
+ball method setvar {name_ value_} {
+ set $name_ $value_
+}
+
+try {
+ $s font [file dirname [info script]]/FreeSans.ttf 12
+ set havetext 1
+} on error msg {
+ puts $msg
+ set havetext 0
+}
+
foreach c [dict keys $col] {
set b [ball]
- $b eval [list set name $c]
- $b eval [list set res(x) $xres]
- $b eval [list set res(y) $yres]
- $b eval [list set pos(x) $($xres/2)]
- $b eval [list set pos(y) $($yres/2)]
- $b eval [list set color [list {*}$col($c) 150]]
+ $b setvar name $c
+ $b setvar res(x) $xres
+ $b setvar res(y) $yres
+ $b setvar pos(x) $($xres/2)
+ $b setvar pos(y) $($yres/2)
+ $b setvar color [list {*}$col($c) 150]
+ $b setvar havetext $havetext
lappend balls $b
}
proc draw {balls} {s} {
- global x y dx dy xres yres
$s clear {*}$::grey
foreach ball $balls {
$ball draw $s
@@ -65,12 +81,16 @@ proc heartbeat {} {
after 250 heartbeat
}
+set t1 [clock millis]
draw $balls
heartbeat
$s poll {
- # 16ms = 60 frames/second
- # Could take into account the drawing time
- after 16
draw $balls
update
+ set t2 [clock millis]
+ # 33ms = 30 frames/second
+ if {$t2 - $t1 < 33} {
+ after $(33 - ($t2 - $t1))
+ }
+ set t1 $t2
}