我正在Starling中构建大型应用程序,我的主要问题之一是我应该首先布局:父母还是孩子?
默认情况下,Sprite会在他们的孩子加入舞台后根据他的孩子获得他的身材。
如果我想根据父级布局孩子怎么办?例如:如果我想将其中一个孩子设置在距离底部20像素的位置,如底部菜单,该怎么办?
在这种情况下,我应该:
但情况并非如此,有时你想根据他的孩子布置父母。如果其中一个孩子是父母背景的常见示例。在这种情况下,你应该:
但如果我同时收到这两个案子怎么办?如果其中一个父母是背景而另一个是底层菜单?如果底部菜单有自己的背景和其他需要根据父母进行布局的孩子会怎么样?
可以使用什么解决方案,这样我就不会迷失在所有这些内容中,Gazman SDK可以在这里提供帮助吗?
答案 0 :(得分:-1)
您需要的是在所有组件之间创建布局依赖关系。每个Sprite都应该有一个事件告诉我们布局何时完成。
现在,如果在父级内部有一些布局逻辑,在其后台子级完成布局之前无法启动,则应在背景和父级之间创建依赖关系。父级应该从后台监听LayoutComplete事件,然后他可以自己布局,当他完成布局时,他可以调度LayoutComplete事件,现在它的子菜单可以自己布局。
您可以自己实施或使用完全相同的Gazman-SDK。如果您选择 Gazman-SDK ,您的代码将如下所示:
public class ParentClass extends Group
{
private var background:Background = new Background();
private var bottomMenu:BottomMenu = new BottomMenu();
override protected function initialize():void
{
// check if not already added to stage
if(!background.parent){
addChild(background);
addChild(bottomMenu);
}
// Create dependency for background. If background have not
// been initialized yet the subscription will succeed
// And this.initialize() will be called again once
// background initialize is complete
if (subscribeForInitilize(background)){
return;
}
// do layouting logic here
}
}
public class BottomMenu extends Group
{
override protected function initialize():void
{
// Create dependency for parent. If parent have not
// been initialized yet the subscription will succeed
// And this.initialize() will be called again once
// parent initialize is complete
if (subscribeForInitilize(parent as Group)){
return;
}
// do layouting logic here
}
}