初心者の質問です。famo.us アプリを立ち上げようとしています。これまでのところ、簡単な実験で良い結果が得られました。
アプリが成長しているので、「画面」間を移動できるようにしたい: ランディング画面 -> 情報画面 -> ランディング画面に戻る -> など.
私の「スクリーン」にはView()
、View() に追加されたサーフェス、修飾子などが含まれています。
私は、その機能と機能を使用RenderController()
して、画面を切り替えるために使用します。hide()
show()
問題は、以前に使用した画面に戻ると、サーフェスが表示されなくなることです。
コード :
var app_render_controller = new RenderController();
app_render_controller.show(landing_screen); // ok
app_render_controller.hide(landing_screen); // ok
app_render_controller.show(info_screen); // ok
app_render_controller.hide(info_screen); // ok
app_render_controller.show(landing_screen); // NOK -> I only see my background surface !
DOM を調べると、サーフェスがあるべき場所にサーフェスのアウトラインが表示されますが、それらは隠されています。バックグラウンド サーフェスがコンテンツ サーフェス (ScrollView) の前にあるようです。背景を非表示にすると、Scrollview が再び表示されます。
要素のオーバーラップは、レンダリング ツリーに追加された順序に対応していると読みました。したがって、View() ベースの「画面」の下のツリーは変更されていないため、Scrollview は 1 回目のように背景の上に描画する必要がありますか?
これは期待されていますか?私は何か間違っていますか?私は何かが足りないのですか?
- - - - 編集 - - -
私のコード(おおよそ):
var main_context = Engine.createContext();
var root_render_controller = new RenderController();
main_context.add(root_render_controller);
var landing_screen = new View();
landing_screen.add(new Surface(...background texture...));
var scrollview = new Scrollview();
landing_screen.add(scrollview);
// (add stuff to the scrollview)
var info_screen = new View();
info_screen.add(new Surface(...background texture...));
info_screen.add(new Surface(...some message...));
root_render_controller.show(landing_screen);
// display is fine
root_render_controller.hide(landing_screen);
root_render_controller.show(info_screen);
// display is fine
root_render_controller.hide(info_screen);
root_render_controller.show(landing_screen); // again
// display is wrecked : the background surface is now hiding the scrollview !
DOM を見ると、フリップが表示されます。