DEF Sc Script {
eventIn SFTime set_cycleTime
eventOut SFVec3f posBall
field SFVec3f moveVec 0 0 0
url "javascript:
function initialize () {
// 赤球の進行方向をセットする。
moveVec.x = Math.random() * 2 - 1;
moveVec.y = Math.random() * 2 - 1;
moveVec.z = 0;
// 赤球のスピードを 0.05 にセットする。
moveVec = moveVec.normalize().multiply( 0.05 );
// 赤球の位置をセットする。
posBall.x = Math.random() * 2 - 1;
posBall.y = Math.random() * 2 - 1;
posBall.z = 0;
}
function set_cycleTime () {
// 赤球の新しい位置をセットする。
posBall = moveVec.add( posBall );
// もし赤球が青箱の外に出るならば、進行方向を変えて箱の内側に移す。
if ( posBall.x > 2.3 || posBall.x < -2.3 ) {
moveVec.x = -moveVec.x;
posBall.x = Math.max( -2.3, Math.min( 2.3 , posBall.x ));
}
if ( posBall.y > 2.3 || posBall.y < -2.3 ) {
moveVec.y = -moveVec.y;
posBall.y = Math.max( -2.3, Math.min( 2.3 , posBall.y ));
}
}
"
}
DEF Sc Script {
eventIn SFFloat set_fraction
eventOut SFVec3f posBall
field SFVec3f moveVec 0 0 0
field SFFloat oldF 0
url "javascript:
function initialize () {
// 赤球の進行方向をセットする。
moveVec.x = Math.random() * 2 - 1;
moveVec.y = Math.random() * 2 - 1;
moveVec.z = 0;
// 赤球のスピードを 1 にセットする。
moveVec = moveVec.normalize();
// 赤球の位置をセットする。
posBall.x = Math.random() * 2 - 1;
posBall.y = Math.random() * 2 - 1;
posBall.z = 0;
}
function set_fraction (f) {
// fraction の変化量を得る。
var df = f - oldF;
if ( df < 0 ) df++;
oldF = f;
// 赤球の新しい位置をセットする。
posBall = moveVec.multiply(df).add(posBall);
// もし赤球が青箱の外に出るならば、進行方向を変えて箱の内側に移す。
if ( posBall.x > 2.3 || posBall.x < -2.3 ) {
moveVec.x = -moveVec.x;
posBall.x = Math.max( -2.3, Math.min( 2.3 , posBall.x ));
}
if ( posBall.y > 2.3 || posBall.y < -2.3 ) {
moveVec.y = -moveVec.y;
posBall.y = Math.max( -2.3, Math.min( 2.3 , posBall.y ));
}
}
"
}
posBall = moveVec.multiply(df).add(posBall);
DEF Sc Script {
eventIn SFFloat set_fraction
eventOut SFVec3f posBall
field SFVec3f moveVec 0 0 0
field SFFloat oldF 0
url "javascript:
function initialize () {
// 赤球の進行方向をセットする。
moveVec.x = Math.random() * 2 - 1;
moveVec.y = Math.random() * 2 - 1;
moveVec.z = 0;
// 赤球のスピードを 1 にセットする。
moveVec = moveVec.normalize();
// 赤球の位置をセットする。
posBall.x = Math.random() * 2 - 1;
posBall.y = Math.random() * 2 - 1;
posBall.z = 0;
}
function set_fraction () {
// フレームレートの逆数を得る。
var fps = Browser.getCurrentFrameRate();
var spf = ( fps > 0 ) ? 1 / fps : 0;
// 赤球の新しい位置をセットする。
posBall = moveVec.multiply(spf).add(posBall);
// もし赤球が青箱の外に出るならば、進行方向を変えて箱の内側に移す。
if ( posBall.x > 2.3 || posBall.x < -2.3 ) {
moveVec.x = -moveVec.x;
posBall.x = Math.max( -2.3, Math.min( 2.3 , posBall.x ));
}
if ( posBall.y > 2.3 || posBall.y < -2.3 ) {
moveVec.y = -moveVec.y;
posBall.y = Math.max( -2.3, Math.min( 2.3 , posBall.y ));
}
}
"
}