[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Java3Djp:00500] Re: about Behavior
==================================
★★★柏市・我孫子市にお住まいの皆様へ ★★★
今、話題のケーブルモデムによる高速インターネットサービス
△△△ タイタス ALLNET △△△
=========== http://www.ALLNET.ne.jp ===========
>ですが、ユーザが任意に作成したイベントに対応してオブジェクトの状態を
>変化させることができるのでしょうか?
>例えばこのような例です。
>
>class AAA extends ... imprements runnable{
> public void init(){
> //オブジェクトの作成
> }
> public void start{ ...}
> public void stop{...}
> public void run{
> while(true){
> //オブジェクトの回転角度を指定
> }
> }
>}
私はこれに類したことをやってしまいました。
Behaviorを書いたのですがうまく行かなくて、
自分で書いたThreadからTransformGroupを操作していました。
これは、マウスプレスの際にプレスし続けるとズーム(物体のz軸方向への移動)
するという機能を実現したものです。
このときはSceneGraphにはaddChild()せずに、独立してコーディングしました。
納期前に1〜2日で書いた悪いコードで、バグもあるのでここには書かないでおきます。
>
>APIリファレンスにフレーム数をイベントにしてBehaviorを
>起動する等の記述があるのを見つけましたが、これが使
>えるのかどうか良く分かりませんでした。
>
>ご存知の方がいらっしゃいましたら、ご教授お願いいたします。
Java 3D API Specification に以下の記述があります。
> 9.1.3 WakeupCriterion Object
>
> Java 3D provides a rich set of wakeup criteria that Behavior objects can
> use in specifying a complex WakeupCondition. These wakeup criteria can
> cause Java 3D's behavior scheduler to invoke a behavior's
> processStimulus method whenever
>
> The center of a ViewPlatform enters a specified region
>
> The center of a ViewPlatform exits a specified region
>
> A behavior is activated
>
> A behavior is deactivated
>
> A specified TransformGroup node's transform changes
>
> Collision is detected between a specified Shape3D node's Geometry
> object and any other object
>
> Movement occurs between a specified Shape3D node's Geometry object
> and any other object with which it collides
>
> A specified Shape3D node's Geometry object no longer collides with
> any other object
>
> A specified Behavior object posts a specific event
>
> A specified AWT event occurs
>
> A specified time interval elapses
>
> A specified number of frames have been drawn
>
> The center of a specified Sensor enters a specified region
>
> The center of a specified Sensor exits a specified region
>
> A Behavior object constructs a WakeupCriterion by constructing the
> appropriate criterion object. The Behavior object must provide the
> appropriate arguments (usually a reference to some scene graph object
> and possibly a region of interest). Thus, to specify a
> WakeupOnViewPlatformEntry, a behavior would specify the region that will
> cause the behavior to execute if a ViewPlatform enters it.
time interval というのが謎ですが、
その次にある number of frame has been drawn というのが、後の方にあるこれです。
> 9.5.3.5 WakeupOnElapsedFrames
>
> This WakeupCriterion object specifies that Java 3D should awaken this
> behavior after it has rendered the specified number of frames. A value
> of 0 implies that Java 3D will awaken this behavior at the next frame.
>
> Constructors
>
> public WakeupOnElapsedFrames(int frameCount)
>
> This constructor creates a WakeupOnElapsedFrames object that informs the
> Java 3D scheduler to wake up the specified Behavior object after it has
> drawn frameCount frames. A frameCount value of 0 means wake up at the
> next frame.
>
> Methods
>
> public int getElapsedFrameCount()
>
> This method returns the frame count used in creating this
> WakeupCriterion.
>
> 9.5.3.6 WakeupOnElapsedTime
>
> This WakeupCriterion object specifies that Java 3D should awaken this
> behavior after an elapsed number of milliseconds.
>
> Constructors
>
> public WakeupOnElapsedTime(long milliseconds)
>
> This constructor creates a WakeupOnElapsedTime object that informs the
> Java 3D scheduler to wake up the specified Behavior object after the
> specified number of milliseconds.
>
>
> Note: The Java 3D scheduler will schedule the object after the
> specified number of milliseconds have elapsed, not before. However, the
> elapsed time may actually be slightly greater than the time specified.
>
>
> Methods
>
> public long getElapsedFrameTime()
>
> This method returns the WakeupCriterion's elapsed time value in
> milliseconds.
具体的には、自分で書いた Behavior の initialize() の中で WakeupCriterion を
セットするときに WakeupOnElapsedFrames を使用することになると思います。
私は Behavior を書いて失敗したので、以下を参考にしてください。
com.sun.j3d.utils.behaviors.mouse パッケージのソース
com.sun.j3d.utils.behaviors.picking パッケージのソース
「Java3DTips Behaviorを作ろう」
http://www.ipc-tokai.or.jp/~atusi/java3d/particulars/behavior.html
------------------------------------------------------------------
遠藤靖之 (えんどう やすゆき) <yasuyuki@xxxxxxxxxx>
http://www.javaopen.org/jfriends/ (Java互助会ホームページ)
株式会社タイムインターメディア 情報通信サービス部 TEL 03-5362-9009
〒162-0065 新宿区住吉町3-11 新宿スパイアビル FAX 03-5362-9008