2

私はを持っていてCircleMorph、おそらくそれを使って小さなアニメーションを作成するために、その直径を拡張したいと思います。

b := CircleMorph new.
b color: Color transparent.
b borderWidth: 2.
b extent:100 @ 100.
b openInWorld.

stepこれを行うためにループまたはメソッドを使用した場合、それは良いことでしょうか?この方法をお勧めする場合step、どうすればよいですか?

4

2 に答える 2

2

CircleMorphと呼ばれるのサブクラスを作成する場合がありGrowingCircleMorphます。次に、実装しstepます。

step
   self extent: (self extent) + 1.
   (self extent) > (200@200) ifTrue: [ self stopStepping ]

これで、新しいGrowingCircleMorphのインスタンスをワールドで開くと、201@201まで成長し始めます。

速度を変更するには、ステップ間の目的の時間をミリ秒単位で実装stepTimeして返します。

更新:中心を同じままにしたい場合は、範囲ではなく、円のモーフの境界を変更します。

step
   self bounds: ((self bounds) expandBy: 1).
   (self extent) > (200@200) ifTrue: [ self stopStepping ]
于 2012-08-29T20:26:48.107 に答える
0

そのようなことを楽しみたいのなら、それを一般的にしてください:

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 ] ] ]

ブロックは変更されたものすべてを使用できるため、それらの変更をstepメソッドに入れます。

于 2012-09-09T06:57:39.203 に答える