Mam CircleMorph
i chcę rozszerzyć jego średnicę, ewentualnie tworząc z nim małą animację.
b := CircleMorph new.
b color: Color transparent.
b borderWidth: 2.
b extent:100 @ 100.
b openInWorld.
Czy byłoby dobrze, gdybym użył do tego pętli lub metody step
? Jeśli polecasz metodę step
, jak mam to zrobić?
2 odpowiedzi
Możesz stworzyć podklasę CircleMorph
o nazwie GrowingCircleMorph
. Następnie zaimplementuj step
:
step
self extent: (self extent) + 1.
(self extent) > (200@200) ifTrue: [ self stopStepping ]
Teraz, jeśli otworzysz instancję swojego nowego GrowingCircleMorph w świecie, zacznie ona rosnąć do 201@201.
Aby zmienić prędkość, zaimplementuj stepTime
i zwróć żądany czas między krokami w milisekundach.
Aktualizacja: jeśli chcesz, aby środek pozostał taki sam, zmień granice przekształcenia okręgu, a nie jego zasięg:
step
self bounds: ((self bounds) expandBy: 1).
(self extent) > (200@200) ifTrue: [ self stopStepping ]
Jeśli chcesz się bawić takimi rzeczami, zrób to ogólnie:
HOCanvasMorph>>drawOn: aCanvas
super drawOn: aCanvas.
drawBlock ifNotNil: [
aCanvas
translateBy: self bounds origin
clippingTo: self bounds
during: [:canvas | drawBlock value: canvas]]
HOCanvasMorph>>drawBlock: aBlock
drawBlock := aBlock.
self changed.
HOCanvasMorph class>>example
|m|
m := HOCanvasMorph new openInWorld.
"to draw:"
m drawBlock: [:c |
c line: 10@10 to: 100@100 color: Color red
]
HOCanvasMorph class>>napperons
"Some mathematical fun"
| m |
m := HOCanvasMorph new openInWorld. "to draw:"
m
drawBlock: [ :aCanvas |
| n r t xa xc xb yc ya yb longueur nombreDeDroites |
longueur := 150.
nombreDeDroites := 30. "super drawOn: aCanvas."
xc := 200.
yc := 200.
n := 15.
r := 100.
0 to: n - 2 do: [ :i |
t := 2 * Float pi * i / n.
i + 1 to: n - 1 do: [ :j |
| tj |
tj := 2 * Float pi * j / n.
xa := xc + (r * t cos).
ya := yc + (r * t sin).
xb := xc + (r * tj cos).
yb := yc + (r * tj sin).
(aCanvas asBalloonCanvas) line: xa @ ya to: xb @ yb color: Color green ] ] ]
Ponieważ blok może używać wszystkiego, co się zmienia, umieść te zmiany w metodzie krokowej.
Podobne pytania
Nowe pytania
smalltalk
Smalltalk to jeden z najstarszych języków programowania obiektowego. Zapoczątkował wiele aspektów, które współcześni programiści uważają za oczywiste: Maszyny wirtualne (Smalltalk to język interpretowany) IDE Podejście czysto obiektowe (bez prymitywów ani słów kluczowych) Zamknięcia (zwane blokami) Obraz (tj. Język nieoparty na plikach) Zaawansowane techniki debugowania (zatrzymywanie programów w locie, inspekcja, pisanie lub modyfikowanie kodu w locie)