您的位置:首页 > 产品设计 > UI/UE

[feather]StarlingUi框架——初识feather、界面启动及Ui加载

2013-10-25 22:30 260 查看
这个星期六星期天,一是完结上周遗留下来的事情,也就是用feather来做一个应用;二是将这周的3D知识好好的记录和汇总一下。

feather初识:

这是一个基于Starling的Ui框架集,Starling的效率让人毋庸置疑很适合移动平台,并且现在Starling的官方包也都默认整合feather的包下载,wiki百科上也能看到一些信息和教程。但是富于案例性质的整合案例没有,只有基本的组件代码示例,并且有些资料还都在给的example的源代码里面,以及最近汇总的很零散的别人的博客空间里面,官方教程上也没有很好的更新。上一周做了一个应用,涉及到了List,ScrollContainer,tabBar,Screen,ScreenNavigator,这些常用组件的使用,并且不可避免的得应用到渲染器,所以将这一个项目碰到的一些知识点,好好的总结一下,以备后用。

feather知识点:

最近总结下来,发现如果在学习一套新的Ui框架,有几个点是回避不了得,这是我自己总结的方面。希望能被多发现一些问题,以待后面补充学习。

1、界面启动及资源加载

2、Screen及Panel

3、组件库使用及渲染器

4、事件机制

5、自定义组件

6、自定义皮肤

feather界面启动及资源加载:(详参官方压缩包里面自带的example,与官方命名规则略有不同)

因为feather是基于Starling的,所以最初初始化参数信息做屏幕自适应等都与Starling一致,但是由于资源加载以及本身的机制造成MVC的脱离,有自己的一套结构。

由于Starling在启动的时候,得等到资源全部加载完毕才会进入相应的界面。这一段加载资源的空白,是不能够留给用户的,所以在Main.as的启动时,就应当异步加载资源,先放一个默认界面。

1、Main.as

//欢迎页面背景
[Embed(source="res/welcome.jpg")] public static var WelcomePic:Class;

public function Main()
{

//调整对齐方式
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
//初始化宽高
Constant.STAGE_WIDTH = stage.fullScreenWidth;
Constant.STAGE_HEIGHT = stage.fullScreenHeight;
//设置资源管理
var assetsManager:AssetManager = new AssetManager();

//EmbeddedAsstes为所有图片资源通过Embed加载资源集合类
assetsManager.enqueue(EmbeddedAsstes);
var s:Starling = new Starling(Assets,stage);
//设置长宽
s.stage.stageWidth = Constant.STAGE_WIDTH;
s.stage.stageHeight = Constant.STAGE_HEIGHT;
//关闭多点触控
s.simulateMultitouch = false;
//Stage3D渲染方法是否报告发生错误
s.enableErrorChecking = false;
//抗锯齿1~16 差别不大
s.antiAliasing = 1;
//显示FPS
s.showStats = true;
//调整帧率
stage.frameRate = 60;

var background:Bitmap = new WelcomePic();
background.width  = Constant.STAGE_WIDTH;
background.height = Constant.STAGE_HEIGHT;
background.smoothing = true;
addChild(background);

//启动Assets类加载资源,在启动前先放一个默认页面background
s.addEventListener(starling.events.Event.ROOT_CREATED,
function onRootCreated(event:Object, app:Assets):void
{
//将监听移除,并将默认页面移除,并置空
s.removeEventListener(starling.events.Event.ROOT_CREATED, onRootCreated);
removeChild(background);
background = null;

var bgTexture:Texture = Texture.fromEmbeddedAsset(WelcomePic);

app.start(bgTexture,assetsManager);

s.start();
});
}


显示资源加载过程当中的默认页面,并且异步启动Assets资源加载代码如下,当完成资源加载之后再跳转到其他的界面。

2、Assets.as

private static var _mAssets:AssetManager;

private var mActiveScene:Sprite;

public function Assets(){}

public function start(background:Texture,tassets:AssetManager):void{

_mAssets = tassets;

var image:Image = new Image(background);
image.width = Constant.STAGE_WIDTH;
image.height = Constant.STAGE_HEIGHT;
this.addChild(image);

tassets.loadQueue(function onProgress(ratio:Number):void
{

if (ratio == 1)
Starling.juggler.delayCall(function():void{
image.removeFromParent(true);
showScene(Controller);

// 官方例子推荐,最佳清理时间!

System.pauseForGCIfCollectionImminent(0);
System.gc();
}, 3);//后一个参数3,为该函数执行的延迟时间也就是什么时候欢迎页结束
});
}
//用于屏幕切换
private function showScene(screen:Class):void
{
if (mActiveScene) mActiveScene.removeFromParent(true);
mActiveScene = new screen();
this.addChild(mActiveScene);
}

//获取mAssets,因为是静态的
public static function get mAssets():AssetManager
{
return _mAssets;
}


如果你看到这一个函数了,那么欢迎页的代码算是完成了,并且资源也就加载完毕了,至于欢迎页结束进入的Controller.as这个类,则是我们的整个控制层,负责哪一个页面的展现和调配,一会儿再总结吧。

上面并不是将自己的资源管理器定义为公开的静态函数,因为start方法,我们需要调用但是又不想将此函数静态的公开访问,通过get方法来在start函数中使用,这样也是一种有效的保护。感觉挺使用的一种方式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: