Tetris3D再び
Tetris3Dを一応それなりにゲームぽい形にしてwonderflに移植しました。
しばらくPV3Dもjiglibflashも触ってなかったので、コード的には古いのかもしれません。
jiglibflashにFP10版があったので、そこの変更に伴う修正だけはしてあります。
ブロックの判定が最下段1段だけなのは相変わらずなので誰か弄って下さい。
Tetris3Dを一応それなりにゲームぽい形にしてwonderflに移植しました。
しばらくPV3Dもjiglibflashも触ってなかったので、コード的には古いのかもしれません。
jiglibflashにFP10版があったので、そこの変更に伴う修正だけはしてあります。
ブロックの判定が最下段1段だけなのは相変わらずなので誰か弄って下さい。
おそらく自分用になっているであろうDO3DControllerです。
久しぶりにPV3D触っているので利用していたのですが、使いにくいところがあったので機能追加しました。
Profileの表示の更新タイミングがsetしたときか、キー操作したときだったのですが、ENTER_FRAME回して更新するようにしました。
なるべく処理的に負荷をかけたくなかったので、ENTER_FRAME使っていなかったのですが、tweenさせたときとかに更新されないのは不便ですよね。
つまらないものですが、お役に立ちそうでしたら下記よりどうぞ。
miniASでお話ししようと思っていたけど、できなかったものです。
自分の環境だと何度やっても、Cubeが絶妙な停止を見せるのですが、いかがでしょうか?
この時、床と接しているように見えるのですが、 collisionsプロパティには何も入っていません。
床の情報が入っていてもよさそうなんすけど。
WCAN mini ActionScript Vol.11でお話しさせて頂いた時のものをとりあえずアップしておきます。
I : ブロックを奥へ移動(Z+)
M : ブロック手前へ移動(Z-)
L : ブロックを右へ移動(X+)
J : ブロックを左へ移動(X-)十字キー : 全体を回転
コツはIMLJキーのちょい押しで落下位置を調整しつつ、落下したら完全にCubeが停止する前に地面に散らかってるCubeを落下してきたCubeで整頓するという感じです。
現状、最下段(1列目)の5×5のみ消去判定しています。
1マス40ピクセルの範囲内にCubeの中心点が入っていればとりあえず収まっていると判定しているのである程度はばらばらでも5個並んでいれば消えます。
勉強会ではjiglibflashに関してまとめるつもりがないのでメモった方がいいかもとかいいながら、お話しのかなりはじめの方で話す順番を間違えてしまい、少々焦ってグダグダになった感じなので、その穴埋めにでもBlogに”まとめる”とまではいかなくても、エントリ残すつもりです。しました。
先日のちょい絶Vol.8に参加させていただき、ちょいとこちらの完結編っぽいものについてお話しをさせて頂きました。
まぁ、話し終わった後の何ともいえない雰囲気は忘れるとして、その時に、PV3DのDisplayObject3D(または継承したオブジェクト)オブジェクトにキーイベントを設定して操作できるようにするクラスを作りましたと少し紹介したんですが、connect.to.blog()の人に配布しないのですか?と聞かれたので配布します。
Papervision3DのDisplayObject3Dクラスのメソッド、localRotation(X|Y|Z)とrotation{X|Y|Z)に関して、違いがわからなかったので調べてみました。
まず、サンプルのSWFを見ていただくとすぐにわかりますが、回転の方向が逆です。
文章での説明が難しく、localRotationのほうはいまいち掴み切れていないところもあるのですが、回転のベースとなる回転軸ごと回転されている感じ(わかるかな・・・)です。
なので、localRotation(X|Y|Z)の各プロパティに値を代入する順番が重要になります。
上のサンプルではX→Yですが、これを逆にすると同じ値を指定しても見え方が変わります。
また、lookAtを使うとlocalRotationの値は”0″になるようです。
rotation(X|Y|Z)は軸がぶれない!ので、各プロパティへの代入順序も関係ない。
個人的にはrotationのほうがわかりやすいです。どのような状況でlocalRotationと使い分けるのか浮かばないです。
以下、サンプルのコード。
サイトで利用しているPV3Dを2.0 Beta1にしました。
多分前はRevision629あたり。
この間、Camera3Dの変更などあったので、さすがにライブラリをアップデートするだけってのではいくはずがないので、変更した点をメモ。
旧Camera3Dクラスと同じ使い方を新Camera3Dクラスで実現するには、
camera.target = DisplayObject3D.ZERO;
とするだけですが、zoomプロパティの値も少し変わっていました。
ここの場合は11から10にしただけです。
(BasicViewを利用する場合、上記コードはたぶん必要ないです。)
Cameraクラス以外では、rotationXの向きというか方向が変わってる。
指定そのままだと、Cubeに表示されているコンテンツのテクスチャがおかしかったので、最初MaterialListが変更されたのかと思った。
rotationYに関しては変更がないです。
rotationZは利用していないので不明。