andengine シーンで実行時にスプライトのレイヤーを変更するにはどうすればよいですか?
2 に答える
私は最近、この問題に取り組んでいます。特にレイヤー (シーン エンティティ) の配置が複雑な場合、sortChidren と setZOrder を使用してスプライトの zorder を維持するのは面倒です。
このオーバーライドをすべてのエンティティ派生レイヤーに追加することがわかりました。
@Override
protected void onDrawChildren(GL10 pGL, Camera pCamera) {
getParent().sortChildren();
super.onDrawChildren(pGL, pCamera);
}
これにより、Z オーダー sprite.setZOrder(order++) を設定でき、少なくとも設定したスプライト順序でエンティティが描画されることが保証されます。
これによりかなりのオーバーヘッドが追加されると思いますが、Galaxy ace では気になりません。(まだプロファイリングを試みていません)
問題は、setZOrder(...) を呼び出すときに、親に追加されたすべての後続のスプライト/エンティティをアタッチした後に sortChildren を呼び出す必要があることです。そうしないと、setZOrder が実際に設定されないため、新しく追加されたエンティティによってより高い zorder エンティティが描画されます。 3D オブジェクトの z 軸。オブジェクトが描画される順序のみ。(エンティティの mZIndex 値に関係なく、すべての andengine オブジェクトは同じ z 軸値を持ちます) したがって、新しいエンティティが親エンティティに追加されるたびに、子を並べ替える必要があります。
これは私がこれまでに持っているものです。私が間違っているか、より良い解決策がある場合は、私を修正してください。