PIXI.js でレイヤを扱うための改造方法

前回に引き続き、今回も PIXI.js に関するお話です。
今回はバージョン 1.5.1 の pixi.dev.js に対して、レイヤを扱うための改造方法をご紹介します。

PIXI.js ではモノの位置を position で管理します。
二次元なので position.x と position.y で位置を表します。
そこに position.z を加えて前後関係を表すことにします。

そのためには以下のように書かれている行を探して
※バーション 1.5.1 では 1410行目


PIXI.DisplayObjectContainer.prototype._renderWebGL = function(renderSession)
{

以下のように書き換えて下さい。


PIXI.DisplayObjectContainer.prototype._renderWebGL = function(renderSession)
{
this.children.sort(
function(a,b){
var aZ = a.position.z;
var bZ = b.position.z;
if( aZ < bZ ) return -1; if( aZ > bZ ) return 1;
}
);

これで、position.z に基づいて表示順序を変更できます。

ただし、position.z が同じ値のモノが重なると、お互いの表示順序が1フレームごとに入れ替わって、チカチカとフリッカーを起こしてしまいます。
もしも、position.z が同じ値になる可能性があるならば、以下のように書き換えて下さい。


PIXI.DisplayObjectContainer.prototype._renderWebGL = function(renderSession)
{
this.children.sort(
function(a,b){
var aZ = a.position.z;
var bZ = b.position.z;
if( aZ < bZ ) return -1; if( aZ > bZ ) return 1;

if (aZ == bZ) {
var aY = a.position.y;
var bY = b.position.y;
if( aY < bY ) return 1; if( aY > bY ) return -1;
if (aY == aY) {
var aX = a.position.x;
var bX = b.position.x;
if( aX < bX ) return 1; if( aX > bX ) return -1;
return 0;
}
}
}
);

position.z の値が同じ場合には position.x や position.y で表示の優先度を決めます。
これで大抵の場合はチカチカすることはありません。

以上、ウェブサイトにアニメーションを組み込む際のお役に立てば幸いです。

お問い合わせについて

業務として技術コンサルティングやシステム設計・開発を行っております。
気になることがありましたらご相談下さい。
ご相談のみで完結する場合、コンサルティング費用の目安は
内容によりますが1時間で5千円〜1万円ていどです。
コンサルティングや開発を検討されるその前に、
まずはお気軽にコメントやメールでご連絡下さい。
※ご契約前のコメントやメールでのやりとりは無料です。

お問い合わせフォーム

お急ぎの場合など、ただちに業務対応が必要な場合は、こちらのお問い合わせフォームをご利用ください。かきしちカンパニーお客様窓口が直ちに対応いたします。
※窓口へのお問い合わせ、お見積もりは無料です。


お名前 (必須)

メールアドレス (必須)

題名

メッセージ本文 (必須)

Share

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*