[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Java3Djp:01275] Re: Billboard2



┏━◇━ みんなのこころがつながるよ【メーリングリストならDNS】 ◇━┓

 ◆ 参加するのは簡単だけど自分で作るとなるとちょっと不安。。
  ◇ 
   ◆ 2年以上の実績/みんなが使える簡単なシステム/あったかサポート
    ◇                       ここならたぶん大丈夫

┗━◇━ デジタルだけどあったかい ◇━ http://www.dns-ml.co.jp/ ━◇━┛

えんどうです。ぜんぜん追試してませんが、

> import java.awt.event.*;
> import java.util.Enumeration;
> import javax.media.j3d.*;
> import javax.vecmath.*;
> 
> public class ChangeTexBehavior extends Behavior{
>   
>   private Billboard bill;
>   private TransformGroup rotate;
> 
>   private Transform3D t3d = new Transform3D();
>   private Matrix3f rot = new Matrix3f();
> 
>   private int angle;
> 
>   ChangeTexBehavior(Billboard bill,TransformGroup rotate){
>     this.bill = bill;
>     this.rotate= rotate;
>     System.out.println("called const");
> 
>   }

コンストラクター引数である Billboard を使って、
コンストラクター内(またはinitialize)で
WakeupOnBehaviorPost をひとつ生成してしまえば良いのではないでしょうか。

そのためには WakeupOnBehaviorPost 型のフィールドを持ちます。

 public class ChangeTexBehavior extends Behavior{
   private WakeupOnBehaviorPost wakeup = null;   

>   public void initialize(){
> 
>     wakeupOn(new WakeupOnBehaviorPost(bill,0));

この箇所は生成してさきほどのフィールドに代入しておきます。

  this.wakeup = new WakeupOnBehaviorPost(bull, .. );

>     System.out.println("called ini");
>     
> 
>  }
> 
>   public void processStimulus(Enumeration criteria){
> 
>     System.out.println("called process");
> 
>     rotate.setTransform(t3d);
>     t3d.getRotationScale(rot);
> 
>     angle = (int)Math.acos(rot.m00);
> 
>     System.out.println(angle);
> 
>     wakeupOn(new WakeupOnBehaviorPost(bill,0));

ここでは毎回生成せずに、initialize() で保存したものを使う方が良いのでは。

  wakeupOn(this.wakeup);

> 
>   }
> }

これで動くかどうかはわかりません。やってみてください。

---
ENDO Yasuyuki <yasuyuki@xxxxxxxxxx>
http://www.javaopen.org/jfriends/index.html (Japanese Only)