View this PageEdit this PageAttachments to this PageHistory of this PageHomeRecent ChangesSearch the SwikiHelp Guide

funfunfun20

PREV ------ ● TOP ● ------ NEXTUploaded Image: fmrph.jpg


ポイントの座標をいじってみるだす

三角形の多角形モーフ作っただけじゃつまんないんでしょ?
やっぱ各ポイントを移動させたり追加できるようになりたいじゃん。
で、ど〜すんのよ?(って誰に聞いてんだ?)ポイントは配列になってるんでそれいじりゃいいってわけね。


■インスタンス変数を追加

とにかくポイントを一箇所移動させてアニメーションさせてみるです。
アニメーションの切り替え用に「flg」ちゅうインスタンス変数を
追加するです。
--------------------------------------------
PolygonMorph subclass: #TestMorph10
	instanceVariableNames: 'flg '
	classVariableNames: ''
	poolDictionaries: ''
	category: 'MyMorph'
--------------------------------------------
アクセプト。
Alt + s ( Cmd + s )

Uploaded Image: image9.jpg


■initializeを変更

初期設定に「flg」の初期設定とアニメーションをスタートさせる2行を
追加するです。
--------------------------------------------
initialize
	super initialize.
	vertices _ Array with: 0@0 with: 100@0 with: 100@100.
	borderWidth _ 1.
	color _ Color red darker.
	borderColor _ Color black.
	closed _ true.
	smoothCurve _ false.
	arrows _ #none.
	self computeBounds.

	flg _ true.
	self startStepping.
--------------------------------------------
アクセプト。
Alt + s ( Cmd + s )

Uploaded Image: image12.jpg


■stepメソッド追加(位置変更)

ポイントの座標が配列で「vertices」に設定されてるので
その座標を取り出して差し替えちゃえば良いんじゃない?
「flg」が「true」なら2番目の座標を取り出して
「pt + 100@0」と入れ替えまする。
「flg」が「flse」なら元に戻しまする。
--------------------------------------------
step
	| pt |
	pt _ self getVertices at: 2.
	flg ifTrue: [
		self vertices at: 2 put: pt + (100@0).
		flg _ false]
	ifFalse: [
		self vertices at: 2 put: pt - (100@0).
		flg _ true].
	self computeBounds.
--------------------------------------------
アクセプト。
Alt + s ( Cmd + s )

Uploaded Image: image10.jpg


■stepTimeメソッド追加

あんまり動きを速くするとなにやってんだかわかんないので
1000くらいにしてゆ〜くりとアニメするようにしたです。
--------------------------------------------
stepTime
	^ 1000.
--------------------------------------------
アクセプト。
Alt + s ( Cmd + s )

Uploaded Image: image11.jpg


どうすか?2番目のポイントが横に伸びたり縮んだりしまっしゃろ?

Uploaded Image: image13.jpg



■stepメソッド変更(ポイント追加)

今度はポイントを追加したり削除して四角形と三角形を交互に
繰り返すっていうアニメーションをやってみませう。
「step」メソッドを書き換えちゃうです。
--------------------------------------------
step
	| pt v |
	pt _ self getVertices at: 3.
	v _ self vertices asOrderedCollection.
	flg ifTrue: [
		v addLast: pt - (100@0).
		flg _ false]
	ifFalse: [
		v removeLast.
		flg _ true].
	self setVertices: (v asArray).
	self computeBounds.
--------------------------------------------
アクセプト。
Alt + s ( Cmd + s )

Uploaded Image: image14.jpg


Uploaded Image: image15.jpg


どうやら「vertices」は「Array」型らしいですな。今回は「addLast」と「removeLast」を
使いたかったんで一度「Array」を「OrderCollection」に変換してまする。
(これkenkさんのプロジェクトを見て「あ、な〜るほど」とわかったんだけど、
はじめはけっこうてまどったです。<kenkさんに感謝)


PREV ------ ● TOP ● ------ NEXT







■ MEMO ■

Links to this Page