[Squeak-ja: 3889] プログラミングの質問です

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
7 messages Options
Reply | Threaded
Open this post in threaded view
|

[Squeak-ja: 3889] プログラミングの質問です

Kondo, Fumito
今日は、ご無沙汰してます。
日本HPの近藤です。

Sound Objectというおもちゃを作ろうとしています。

ActiveWolrdの上に絵(音オブジェクト)を載せると完全四度の音程関係や、それらの間を経過する音程
のところにその絵(音オブジェクト)が収まり、いくつかの絵(音オブジェクト)がActiveWorldに乗るとある割合で、
その絵(音オブジェクト)をスキャンして、絵(音オブジェクト)の高さ(Y軸が音の高さ)に応じた音を出す。

こんなことをしたいと思っております。

絵(音オブジェクト)は、できて、とりあえず、ActiveWorldに乗せるとその高さに応じた音を出すことまでは出来たのですが、
現在は、MorphのdrawOn: aCanvasメソッドで、マウスで絵(音オブジェクト)を動かしたときに音が出るようになっています。

これをActiveWorldにあるすべての絵(音オブジェクト)をスキャンして音が出るようにしたいのですが、
どのように実現したらいいでしょうか?という質問です。

万博のときにEnvironmentというクラスを作って、そこからエージェントを生成するということをやったのですが、
今回、できる限りクラス間の依存関係のない方法でやりたいと思っております。
Environmentがまさに環境、意識しないでそこに包まれているというような関係です。

AllScriptsToolが何か可能性を感じさせてくれるのですが、何をどうしてよいやらさっぱり分かりません。

どなたかいい智慧貸していただけないでしょうか?


近藤史人
[hidden email]
コンサルタント
コンサルティング&インテグレーション統括本部
日本ヒューレット・パッカード株式会社
Fumito Kondo
Consultant
Consulting&Integration
Reply | Threaded
Open this post in threaded view
|

[Squeak-ja: 3890] Re: プログラミングの質問です

Kazuhiro ABE-3
こんにちは、阿部です。
これはSqueak Etoysではなく、Smalltalkの話ですね。

すべてのMorphは入れ子構造を持つことができ、submorphsというメッセージを送ることで子集合にアクセスできます。
ActiveWorldはPasteUpMorphのインスタンスですから、これも例外ではありません。以下の式を評価してみてください。
 
ActiveWorld submorphs.
 
この戻り値はワールドに表示されているすべてのMorphの集合です。
もし、この中の特定のクラスのインスタンスにのみ特定の処理をさせたい場合は以下のようにします。
 
ActiveWorld submorphs do: [:each |
    [each isKindOf: クラス] ifTrue: [each 特定の処理]].
 
isKindOf:は指定したクラスのサブクラスも含むので、そのクラスのインスタンスのみにしたいときは、代わりにisMemberOf:を使います。
 
//abee
--
阿部 和広  EMAIL [hidden email]
Reply | Threaded
Open this post in threaded view
|

[Squeak-ja: 3891] Re: プログラミングの質問です

Tomohiro Oda
おだです。

> ActiveWorld submorphs do: [:each |
>     [each isKindOf: クラス] ifTrue: [each 特定の処理]].

たぶん、
ActiveWorld submorphs do: [:each |
    (each isKindOf: クラス) ifTrue: [each 特定の処理]].
ですね。

> isKindOf:は指定したクラスのサブクラスも含むので、そのクラスのインスタン
> スのみにしたいときは、代わりにisMemberOf:を使います。

クラス名などを決め打ちしたくない場合には、
音を出すメッセージセレクタ名をmakeNoiseとすると、

ActiveWorld submorphsDo: [:each |
     (each respondsTo: #makeNoise) ifTrue: [each makeNoise]].

とすると、makeNoiseできるオブジェクトのみがmakeNoiseします。
(変な日本語ですね :-)
---
おだ
Reply | Threaded
Open this post in threaded view
|

[Squeak-ja: 3892] Re: プログラミングの質問です

Kondo, Fumito
阿部さん、おださん、

早速のご教示、誠にありがとうございます。

可能性が見えてきました。

早速家に帰ったら試してみます。

近藤



-----Original Message-----
From: [hidden email] [mailto:[hidden email]] On Behalf Of Tomohiro Oda
Sent: Tuesday, May 27, 2008 9:54 AM
To: Squeak discussion in Japanese
Subject: [Squeak-ja: 3891] Re: プログラミングの質問です

おだです。

> ActiveWorld submorphs do: [:each |
>     [each isKindOf: クラス] ifTrue: [each 特定の処理]].

たぶん、
ActiveWorld submorphs do: [:each |
    (each isKindOf: クラス) ifTrue: [each 特定の処理]].
ですね。

> isKindOf:は指定したクラスのサブクラスも含むので、そのクラスのインスタン
> スのみにしたいときは、代わりにisMemberOf:を使います。

クラス名などを決め打ちしたくない場合には、
音を出すメッセージセレクタ名をmakeNoiseとすると、

ActiveWorld submorphsDo: [:each |
     (each respondsTo: #makeNoise) ifTrue: [each makeNoise]].

とすると、makeNoiseできるオブジェクトのみがmakeNoiseします。
(変な日本語ですね :-)
---
おだ
Reply | Threaded
Open this post in threaded view
|

[Squeak-ja: 3893] Re: プログラミングの質問です

Kazuhiro ABE-3
In reply to this post by Tomohiro Oda
こんにちは、阿部です。
おださんの書かれたとおりです。なんかすごい焼きが回った気がします。かなりやばい。

私もrespondsTo:の方が好きです。もっとポリモフィックにするなら、Object>>makeNoiseをなにもしないメソッドとして定義すると(単にselfを返すなど)、ifTrue:がいらなくなって、each
makeNoiseだけででいけます。



--
 //abee
--
阿部 和広  EMAIL [hidden email]
Reply | Threaded
Open this post in threaded view
|

[Squeak-ja: 3894] Re: プログラミングの質問です

Kondo, Fumito
近藤です。

先ほど、ちょっとやってみたらうまくいきました。
ありがとうございました。


だんだん専門的になってきたのでついていけなくなっていますが、
respondsTo:にするとクラスで定義しているメッセージセレクター名を探しにいくということでしょうか?
例えば、makeNoiseというような。

そこでmakeNoiseで何もしなくてselfだけを返すと、音は出なくなりますよね?

近藤



-----Original Message-----
From: [hidden email] [mailto:[hidden email]] On Behalf Of [hidden email]
Sent: Tuesday, May 27, 2008 12:45 PM
To: Squeak discussion in Japanese
Subject: [Squeak-ja: 3893] Re: プログラミングの質問です

こんにちは、阿部です。
おださんの書かれたとおりです。なんかすごい焼きが回った気がします。かなりやばい。

私もrespondsTo:の方が好きです。もっとポリモフィックにするなら、Object>>makeNoiseをなにもしないメソッドとして定義すると(単にselfを返すなど)、ifTrue:がいらなくなって、each
makeNoiseだけででいけます。



--
 //abee
--
阿部 和広  EMAIL [hidden email]
Reply | Threaded
Open this post in threaded view
|

[Squeak-ja: 3895] Re: プログラミングの質問です

Tomohiro Oda
おだです。

Kondo, Fumito wrote:
> 先ほど、ちょっとやってみたらうまくいきました。
> ありがとうございました。

よかった。

> だんだん専門的になってきたのでついていけなくなっていますが、
> respondsTo:にするとクラスで定義しているメッセージセレクター名を探しにいくということでしょうか?
> 例えば、makeNoiseというような。

はい。

> そこでmakeNoiseで何もしなくてselfだけを返すと、音は出なくなりますよね?

その通りです。
---
おだ