📄 web3dpanel.java
字号:
package web3d;import shout3d.*;import shout3d.core.*;import java.util.*;public class Web3DPanel extends Shout3DPanel{ public float speed = 100; //pocetna brzina - slider na sredini /** * Konstruktor koji kreira panel velicine cijelog appleta. * U ovoj metodi ne treba nista mijenjati. * * @param applet */ public Web3DPanel (Shout3DApplet applet){ super(applet); } /** * Konstruktor koji kreira panel velicine width x height. * U ovoj metodi ne treba nista mijenjati. * * @param applet * @param width * @param height */ public Web3DPanel (Shout3DApplet applet, int width, int height){ super(applet,width, height); } /** * Metoda koja se zove odmah posto je ucitana scena. */ public void customInitialize() { /***************** Ovo je metoda u kojoj treba ostvariti animaciju planeta. Da biste to mogli, prvi je korak dobiti referencu na cvorove scene. Koristite metodu getNodeByName(). Tim cvorovima mozete lako mijenjati polozaj i rotaciju. Primjerice: Transform SuncevSustav=(Transform)getNodeByName("SuncevSustav"); SuncevSustav.rotation.setValueByString("1.0 0.0 0.0 1.57"); Ako cete za rotaciju koristiti klase Timer i TimerTask, potrebno je instancirati timer i metodom schedule() dodati mu novi objekt klase TimerTask. Buduci je TimerTask apstraktna klasa, potrebno ju je ili a) naslijediti i definirati bitnu metodu run(); b) instancirati anonimnu klasu (lakse ali manje elegantno rijesenje). ****************/ int framesPerSecond_Period = 50; // svakih 50 milisekundi jedna slika, 1000ms/50ms -> 20slika/s Timer timer = new Timer(true); timer.schedule(new TimerTask() { Transform ZemljinSustav = (Transform)getNodeByName("ZemljinSustav"); // referenca na cvor Transform ZemljinSustav Transform SuncevSustav=(Transform)getNodeByName("SuncevSustav"); // referenca na cvor Transform SuncevSustav float earthRotation = 0; float moonRotation = 0; public void run() { moonRotation += 2* Math.PI*(speed/100) / 92.2; //20sl./s*4.61s=92.2 slike, 2PI/92.2 - zemljinsustav earthRotation += 2* Math.PI*(speed/100) / 1200; //20 sl.*60s=1200 sl./min, 2PI/1200 - suncevsustav ZemljinSustav.rotation.setValueByString("0.0 1.0 0.0 " + moonRotation); //mjesec bi trebao nakon 4.61s napraviti puni krug(2*PI) oko zemlje //tj. svakih 50ms zarotirati se oko zemlje za 2PI/92.2 SuncevSustav.rotation.setValueByString("0.0 1.0 0.0 " + earthRotation); //zemlja bi trebala nakon 60 sekundi napraviti puni krug(2*PI) oko sunca //tj. svakih 50ms tarotirati se za 2PI/1200=2PI/(20*60) oko sunca } }, 0, framesPerSecond_Period); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -