レベルエンター山本大のブログ

面白いプログラミング教育を若い人たちに

BLOCKVROCKリファレンス目次はこちら

JavaScriptコードモードを使って物体をアニメーションさせる

BLOCKVROCKには、コードモードという機能があります。 コードモードでは、JavaScriptを使ったプログラミングが可能です。

BLOCKVROCKで作った物体や世界は、Webで使われるHTMLとJavaScriptで出来上がっているためJavaScriptを使うことで自由に操作することができます。

以下のサンプルでは物体に回転のアニメーションをつけています。

[公式]JavaScriptコードモードで物体にアニメーションをつける

BLOCKモードでシーンスタートと直方体だけを用意しておきます。

f:id:iad_otomamay:20191213094754p:plain
JavaScriptを使って物体をアニメーションさせる

コードタブに以下のプログラムを記述します。 //の部分はコメントなので記述する必要はありません。

let box1 = document.getElementById("block1");
// roには{x:"xの回転",y:"yの回転",z:"zの回転"}が取れる
let ro = box1.getAttribute("rotation");
forever(()=>{
    ro.y += 1;
    let roString = `${ro.x} ${ro.y} ${ro.z}`;
    box1.setAttribute("rotation", roString);
});

1行目のdocument.getElementById()は、HTMLで書かれた要素をJavaScriptの変数に取り込むための記述です。 これにより、box1という変数にid"block1"の物体が取り込まれます。

box1.getAttribute("rotation")は、id"block1"の物体の回転属性を取り出します。これもroという変数に取り込んでいます。

forever()という機能は、BLOCKVROCK特有の機能です。 ループを表すのですが、ループしている間もユーザー操作を止めないようになっています。

このforever()で属性値を変えると、徐々に値が変化するように見えるため物体がアニメーションします。

foreverの処理の内側では、yの回転を 1づつ増やして物体にセットし直しています。 rotationの属性は、"x y z"というスペース区切りで3軸の回転値を持つ文字列であり、値を組み立てなくてはいけません。

「`」(グレイヴ・アクセント)という記号で括られた文字列には、${}で変数を埋め込めます。これをつかって"x y z"になるような文字を組み立てています。

NodeからRDSの接続で SSL/TLSの証明書を rds-ca-2019に更新する

RDS のCA証明書が2019になるとアナウンスがあって、最終警告っぽいメールがきてたので慌てて対応。

 

そのメールのタイトルはこちら。

重要なお知らせ:2020年2月5日までにお客様のAmazon RDS SSL/TLS証明書の更新を行ってください | Important Reminder: Update Your Amazon RDS SSL/TLS Certificates by February 5, 2020

 

 

ドキュメントを見て、証明書をダウンロードして、

https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html

 

クライアントからテストしてみたらここまではスムーズに通る

mysql -h myinstance.c9akciq32.rds-us-east-1.amazonaws.com
--ssl-ca=[full path]rds-combined-ca-bundle.pem --ssl-mode=REQUIRED

 

しかし nodejsのプロジェクトからmysql2を利用したDBアクセスが疎通しない。

 なんとか動かしてみられたので、原因を記録

 

原因1:中間証明書を含むpemをつかっていない

原因2:Node v12以降は、TLSv1.0が使えない

 

対処1:中間証明書とRoot証明書を含むpemを使う

https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html

 

対処2:(暫定対処)

Node v11を使う

(最新が使いたいので、Connection のオプションに以下などとしてみたが疎通しない。)

暫定対処で、v11を使うことにした。 

nを使ってNodeのバージョンを切り替えられるようにする

// インストール

npm i -g n

// リストアップ

sudo n list 

// バージョンのインストールと利用(11.x.xが入って有効になる)

sudo  n v11 

// バージョン確認

node -v

 

 

恒久対処に向けて覚書

Nodeのバージョンをあげたい。TLSv1.3を使ってセキュアにDBアクセスしたい。

mysql2のConnection生成時に以下を書いてみたが、Node11なら通る。Node13なら通らない。

,ssl : {
ca: fs.readFileSync( [Caのパス] )
,rejectUnauthorized: false
,maxVersion: 'TLSv1.3'
,minVersion: 'TLSv1.3'
}

 

 

 

物体の位置

物体の位置は、3つの軸で決定します(X軸、Y軸、Z軸)

Xは左右(プラスになるほど 右)

Yは上下(プラスになるほど 上)

Zは奥行き(プラスになるほど 手前)

を表します。

 

以下のサンプルプログラムでは

赤い物体を左右に

青い物体を上下に

黄色い物体は、奥と手前(カメラ初期位置から見ると後ろ)

に配置しています。

 

f:id:iad_otomamay:20191211135258p:plain

物体の位置

 

 

 

[公式]物体の位置

物体を受け止める土台を作る

動きのあるブロックは、重力を受けるようになるのでそのままでは落下していきます。

「静止した物体」属性をつけたブロックは、動きのある物体に対して衝突判定があります。

静止した物体の大きさのXとZ方向を広くすれば、重力のある物体を受け止める土台として機能します。

 

以下のプログラムでは青色のブロックが土台となります。

f:id:iad_otomamay:20191203191025p:plain

ブロックを受け止める

 

[公式]ブロックを受け止める

物理エンジンで物体に重さをつける

BLOCKVROCKでは、物理法則をコンピュータで計算再現して、物体に重さや衝突の判定を設定することができます。 ブロックに「動きのある物体」の属性を繋げましょう。

Y座標を少し上にセットしておくと分かりやすいです。

 

f:id:iad_otomamay:20191202180155p:plain

物理エンジンで重力をつける

 実行すると物体が、上からしたに落ちていく様子がみられます。

重力を発生させたのですが、これだけではあっという間に落ちてしまいます。

 

 

[公式]物理エンジンで重力をつける

物体の回転(Z軸)

Z軸は奥行きを表しますので、物体の中心を手前から奥に向かって通る軸を中心に回転します。

Z軸による回転は、カメラの目線が回転軸と平行になるため、時計回りであることがわかりやすいですね。

 

f:id:iad_otomamay:20191129170435p:plain

物体の回転(Z軸)

 

[公式]z軸60,90,135回転

物体の回転(Y軸)

Y軸での回転は、物体の中心に縦の軸を通してそれを中心に回転するということです。

やはり+になるほど時計回りに回転し、マイナスになるほど反時計回りに回ります。

 

今回は、マイナスの回転もやってみます。

f:id:iad_otomamay:20191129164956p:plain

y軸90,45,-45回転

[公式]y軸90,45,-45回転