首页 > 代码库 > Feathers基础知识

Feathers基础知识

12.a>>1 等效于a/2
13.如果一个显示对象被scale,bitmapdata.draw的时候并不是使用它缩放后的内容。需要这么做:_local4.draw(_local3,_fadeOutMatrix);
14。mask最好addChild到容器里。因为如果不addChild,parent缩放的时候,只缩放了MC,而没有缩放mask

1.Category是类别的意思

//设置鼠标移出移入时设设置样式
var touch:Touch = e.getTouch(e.target as DisplayObject, TouchPhase.HOVER);
if (touch) {
Mouse.cursor = MouseCursor.HAND; //手掌型样式。
} else {
Mouse.cursor = MouseCursor.AUTO;
}

2.json简单说就是javascript中的对象和数组,所以这两种结构就是对象和数组两种结构,通过这两种结构可以表示各种复杂的结构

1、对象:对象在js中表示为“{}”扩起来的内容,数据结构为 {key:value,key:value,…}的键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值,所以很容易理解,取值方法为 对象.key 获取属性值,这个属性值的类型可以是 数字、字符串、数组、对象几种。

2、数组:数组在js中是中括号“[]”扩起来的内容,数据结构为 [“java”,”javascript”,”vb”,…],取值方式和所有语言中一样,使用索引获取,字段值的类型可以是 数字、字符串、数组、对象几种。

3.服务器数据通信采用JSON的格式

4、Assets工程包括了所有游戏素材

5、DisplayUtil中copyPixelArea可以把纯色背景的图片剪裁成最小区域

6、LayerManager是管理游戏显示层的类。一共有三层,从低往高分别是:

_mapLevel:地图层

_appLevel:用来装UI界面的

_noticeLevel:系统通知层

它们都是Starling的sprite

7.animation.FrameSprite是一个基于Starling的动画类

8.org.ly.manager.GeneralResourceManager是一个用于资源加载的类

9.GeneralResourceManager.getResource(_url,onComHandler,””,ResourceLevel.LEVEL_2);可以加载未存在的资源

10.AssetsManager主要是提供一些方法取到已有资源

11.AttributeManager管理人物、怪物、物品的属性

12、animation.MoveSprite 提供一个方法让显示对象从一个位置移动到目标位置,移动完成后会自动把它从显示列表删除

13、取得舞台的宽度:StarlingManager.stageWidth

14、NoticeManager.showAlert:显示上移的文字提示(技能冷却中)

15、AnimationManager调用Starling.current.juggler.add(starling.display.MovieClip)播放动画,它被FrameSprite调用

16、org.ly.loader.BinaryLoader二进制类型加载器

17、flash.display.BitmapData.setPixels(rect:Rectangle, inputByteArray:ByteArray):void

将字节数组转换为像素数据的矩形区域。对于每个像素,将调用 ByteArray.readUnsignedInt() 方法并将返回值写入像素。如果字节数组在写入整个矩形之前结束,将返回函数。字节数组中的数据应该是 32 位 ARGB 像素值。在读取像素之前或之后,不会对字节数组执行搜索。

18、用户的flash player 未启用硬件加速:_stage3d.context3D.driverInfo.indexOf(“Software Hw_disabled=userDisabled”) != -1

19、由于 Starling 中的全部 DisplayObject 都具有 pivotX 及 pivotY 属性,我们可以非常便捷地在

运行时改变其注册点

20、Starling 中的 DisplayObject 的 rotation 属性是以弧度为单位的,而非原生

Flash 中的以角度为单位

将角度转换为弧度:sprite.rotation = deg2rad(Math.random()*360);

21、Starling中,即使将对象从显示列表中移除了,它的事件侦听器依然残留着。为了更加安全、彻底

地移除一个对象,我们需要给 removeChild 方法设置其第二个参数 dispose 为 true

removeChild(clicked, true);

22、flatten: 如果你想尽可能地提高存在大量嵌套的Sprite对象的话,调用此方法可以让你

达到满意效果,它和 cacheAsBitmap的效果一样

23、Starling中的Button类是DisplayObjectContainer类的子类,

一个 Button 对象将会在你点击它的时候派发一个特殊的事件:Event.TRIGGERED

24、Staring 只会创建一个原生 TextField 对象作为文字源,该文字源将为多个

starling.text.TextField 对 象 提 供 文 字 纹 理

25、Quad(width:Number, height:Number, color:uint = 0xffffff, premultipliedAlpha:Boolean = true)

根据指定的尺寸和颜色创建一个四边形。 最后一个参数决定是否在渲染的时候预乘透明度值,从而影响混合输出的颜色值,大多数情况下可以使用默认值。

26、要调用starling.start();后才会响应事件

27、触摸结束判断:if(touch.phase != TouchPhase.ENDED)return;

1.popups包下有三个类一个接口,对来实现弹出层

2.CalloutPopUpContentManager 比较简单,open方法里直接使用Callout.show(content, source)进行弹出

3.Callout控件功能类似于tip。它能弹出一个带箭头的指向指定displayobject的tip,并且你可以设置它的指向方向。好像会自动在舞台能显示的范围内调整位置.callout.show方法其实也是调用PopUpManager.addPopUp()来弹出提示的

4.PopUpManager在feathers.core包下。这个包里其实是具体控件的接口和管理类

5.PopUpManager.addPopUp方法不需设置弹出的显示对象的parent,因为它直接stage.addChild到顶层

6.VerticalCenteredPopUpContentManager用于居中弹出,它的open(content:DisplayObject, source:DisplayObject):void方法中的source没有被用到。就是说弹出的层的parent直接是stage

7.app.xml中的landscape是让应用横向

8.DropDownPopUpContentManager是在指定的displayobject的上方或下方弹出一个层。它会根据displayobject的Y坐标来决定是在上还是在下。和Callout类似。但它没没箭头

9.PickerList相当于一下拉选择控件。它包含了一个button和一个List,点击按钮,popup弹出list让你选择。至于用哪种popup方式,是由当前的主题设置的

10.9.PickerList的labelField用于设置button的文本值用的是dataProvider item的哪个键

11.9.PickerList.listProperties.@itemRendererProperties.labelField = “text”;用于设置list中item的文本值用的是dataProvider item的哪个键

12.自定义list的itemrender要新建 一个类,继承自DefaultListItemRenderer然后this._list.itemRendererType = TestItemRender;

13.需要在Main(Game)里new 一个主题进行初始化,这是必须的,主题里会设置list的DefaultListItemRenderer

14.FeathersControl.validate会触发重绘draw

  1. _btn.upSkin =new Image( upTexture );正常状态

    _btn.hoverSkin = new Image( downTexture );鼠标经过

    _btn.downSkin = new Image( upTexture );鼠标按下

1.starling textfield 水平、垂直对齐方式设置:

tf.vAlign = VAlign.TOP;

tf.hAlign = HAlign.LEFT;

2、feathers的textInput是一个starling对象,但是它里边的TextField是flash.text.TextField的。

所以就算你把它放到其它Starling显示对象的下面,文字还是不会在下面的

但这个TextField会随着textInput的移动而移动

3、feathers的Panel是一个可以设置标题、布局的,带滚动条的面板。

设置标题:panel.headerProperties.title = “Is it time to party?”;

设置布局:var layout:VerticalLayout = new VerticalLayout();

layout.gap = 20;

layout.padding = 20;

panel.layout = layout;

4.Panel—〉ScrollContainer—〉Scroller—〉FeathersControl—〉starling.display.Sprite

5.Panel不启用水平滚动条:panel.horizontalScrollPolicy = Panel.SCROLL_POLICY_OFF;

Panel.SCROLL_POLICY_AUTO和Panel.SCROLL_POLICY_ON:启用
6、panel.scrollBarDisplayMode = Panel.SCROLL_BAR_DISPLAY_MODE_FIXED;一直显示滚动条

panel.scrollBarDisplayMode = SCROLL_BAR_DISPLAY_MODE_FLOAT;拖动的时候才显示滚动条

panel.scrollBarDisplayMode = SCROLL_BAR_DISPLAY_MODE_NONE不显示滚动条,但仍可以拖动

7、想使用滚动条,用ScrollContainer就可以了,没有必要用Panel,Panel只是加了标题标尾的功能
8、panel滚动条是不可以拖动的,可能拖动里面的内容。滚动条滚动方向和手势方向相反。适合在手机上用
ScrollContainer则和网页上的普通滚动条一样
9.ScrollContainer的滚动条不会超出你设置的width

10、设置label的属性:

container.addChild(label);

label.textRendererProperties.textFormat = new TextFormat( “宋体”, 20, 0xff0000 );

label.text = “I am the feathers label!”
当Feathers的Label被添加到舞台上的时候会对Label进行默认的字体设置,啊哦——所以大家都明白是怎么回事了吧,把顺序换一下就可以起作用了

label.textRendererProperties.textFormat,.textFormat其实是label类里textRenderer实例的属性:

const factory:Function = this._textRendererFactory != null ? this._textRendererFactory : FeathersControl.defaultTextRendererFactory;

this.textRenderer = ITextRenderer(factory());

1.由于aeonDesktopTheme主题中有代码:

protected static function textRendererFactory():ITextRenderer

{

return new TextFieldTextRenderer();

}

所以调用label.textRendererProperties=……后最终会调用label.refreshTextRendererStyles

最终会设置textRenderer的属性(textRenderer即TextFieldTextRenderer),从而达到改变label文字属性的作用

2、thickness 厚度

measure 测量

3、feathers的label设置HTML格式字体:starling的textField不支持HTML格式

label.text=”I am the feathers label!“;

label.textRendererProperties.isHTML = true;

4、label.textRendererProperties.wordWrap = true;让文本自动换行

label.textRendererProperties.background = true;显示文本背景

label.textRendererProperties.border = true;显示边框

label.textRendererProperties.displayAsPassword = true;作为密码文本

5、ScrollText是一个自带滚动条的文本组件。它的textfield不是starling的,所以会一直在starling显示对象的下面。label的textfield默认是starling的

6、textinput适合单行输入,textarea自带滚动条适合多行输入

7、buttonGroup.buttonFactory可以设置ButtonGroup中生成的按钮,但类型只能是Button

buttonGroup.buttonInitializer = function(btn:Button,data:Object):void{

btn.width = 200;

};可以对每个按钮在初始化时进行一些操作

8、ButtonGroup使用buttonFactory后,就不能在dataProvider的数据中设置triggered点击事件响应函数了

9、PageIndicator是一个单纯的页数显示的控件

pageIndicator.pageCount = 3;

pageIndicator.selectedIndex = 2;//显示当前是第3页。从0开始

pageIndicator.normalSymbolFactory设置页码未被选中的显示对象

pageIndicator.selectedSymbolFactory设置页码已被选中的显示对象

10、pickerList就是一个 combobox:下拉选择菜单

11、PickerList是由一个有特殊皮肤的Button+List组成,List的弹出由DropDownPopUpContentManager弹出

12、更换一个按钮皮肤:

var btn:Button = new Button();

btn.nameList.add(NumericStepper.DEFAULT_CHILD_NAME_INCREMENT_BUTTON);

container.addChild(btn);

13、自定义一个按钮皮肤:

(1)_theme.setInitializerForClass( Button, myCustomButtonInitializer, “my-custom-button” ;

private function myCustomButtonInitializer( button:Button ):void

{

button.defaultSkin = new Image( upTexture );

button.downSkin = new Image( downTexture );

button.hoverSkin = new Image( hoverTexture );

button.defaultLabelProperties.textFormat = new TextFormat( “fontName”, 18, 0xffffff );

}

(2)var btn:Button = new Button();

btn.nameList.add(“my-custom-button”);

container.addChild(btn);

14、和starling的image一样,feathers的imageloader上存在一个 color 属性值得大家记住,该属性允许你为一个图片指定一个颜

色值。在 Image 对象中,每个像素的颜色值都是由其纹理的颜色值和你指定的 color 颜色值

混合的结果。

15、在函数内部写侦听函数时,要注意先定义函数数再侦听,否则为空

16、当你用一个imageLoader作为一个Button的皮肤时,只有此按钮的状态对应,才会去加载这个图片

17、starling.textures.RenderTexture API 允许开发者在 Starling 中实现无损绘画功能

mRenderTexture = new RenderTexture(stage.stageWidth, stage.stageHeight);

var canvas:Image = new Image(mRenderTexture);

addChild(canvas);

mRenderTexture.draw(DisplayObject);

18、当自定义按钮皮肤时,myCustomButtonInitializer函数里,btn.defaultSkin不能=imgageLoader。因为这样的话,会导致鼠标移上去不会切换到hover状态,只能用一个已存在的图片。

各种状态也是不能用未完成加载的imgageLoader

19、Callout 的使用:

Callout 是在一个目标显示对象的周围弹出一个自定义的显示对象,但它的弹出位置只是固定上下左右,不会随着鼠标动而动

btn.addEventListener(TouchEvent.TOUCH,function(e:Event):void{

var callout:Callout = Callout.show(tip,btn);

callout.disposeContent = false;// 不写这句,弹出一次第二次就不见了

});

1.ButtonGroup
var group:ButtonGroup = new ButtonGroup();
addChild(group);
group.gap = 50; //必须要放在addChild()方法后面才生效
group.lastGap = 100; //可不放在addChild()方法之後

2.Starling.juggler.add(dc);
add函数里有这行代码:
if (dispatcher)
dispatcher.addEventListener(Event.REMOVE_FROM_JUGGLER, onRemove);
所以只要dc dispatchEventWith(Event.REMOVE_FROM_JUGGLER);就可以将动画停止

3.AppModuleManager管理所有模块的加载
AppModule,加载和表示一个模块(一个SWF)

4.结Feathers 输入文本设置焦点:_ui.textUserName.setFocus();

5.FeathersControl的name属性有特别的地方
它用一个_nameList:TokenList 来保存组件的名字,所以一个组件可以有多个名
增加名字:feathersControl.nameList.add(“btn_name_2”);
但feathersControl.name = “XX”;会清空之前的nameList
nameList和组件的皮肤有很大关系

6.Sector是一个flash.displayobject.sprite的子类。它可以画任意百分比的圆用于技能冷却效果

7.var resultCls:Class = getDefinitionByName(“skill.result.Result_”+skillId) as Class;
动态取得一个类

8.技巧:取得一个元素也可以通过删除它来取得:
var index:int = uint((e.currentTarget as RadioButton).name.split(“_”).pop());

9.AIR文件拖放:

this.addEventListener(NativeDragEvent.NATIVE_DRAG_ENTER,onDragIn);//拖动的文件被拖到目标上的时候触发

this.addEventListener(NativeDragEvent.NATIVE_DRAG_DROP,onDrop);//拖动的文件在拖到目标上,并且松开的时候触发

this.addEventListener(NativeDragEvent.NATIVE_DRAG_EXIT,onDragExit);//拖动的文件离开目标的时候触发

获取被拖进来的文件:

public function onDrop(e:NativeDragEvent):void
{
var dropfiles:Array = e.clipboard.getData(ClipboardFormats.FILE_LIST_FORMAT) as Array;
if(dropfiles.length > 0)
{
var file:File = dropfiles[0] as File;
}
}

10.flash.filesystem.File.separator():String

[只读] 主机操作系统的路径组件分隔符。

在 Mac OS 和 Linux 中,这是正斜杠 (/) 字符。在 Windows 中,它是反斜杠 () 字符。
注意:当在字符串中使用反斜杠时,请记住键入该字符两次(例如“directory\file.ext”)

11.GeneralResourceManager也可以加载本地文件(AIR中),它都是以二进制的形式进行加载的

12.打包工具把XML、图片、JSON都写成一个二进制文件。并进行压缩:

flash.utils.ByteArray.compress(algorithm:String=”zlib”):void

压缩字节数组。将压缩整个字节数组。读取文件的时候,再解压

13.打包图片的规则是:

A、写入图片数据长度

B、写入图片数据

C、写入图片宽

D、写入图片高

14.BinaryLoader使用URLStream来加载文件

URLStream 类提供对下载 URL 的低级访问。数据一下载,便可随即为应用程序使用,这和使用 URLLoader 时需要等到整个文件下载完不同。并且 URLStream 类还允许在完成下载前关闭流。已下载文件的内容将作为原始二进制数据提供。

加载完成后使用public function readBytes(bytes:ByteArray, offset:uint = 0, length:uint = 0):void得到ByteArray

15.加载文件时GeneralResourceManager会

info = new GeneralResourceInfo();

info.url = url;//通过URL确定文件类型

加载完成后BinaryLoader会调用info.resource方法,判断资源类型进行对应的解析

如果资源是.fa.pa.ba的文件,就会生成BAAnimationInfo、PAAnimationInfo、FAAnimationInfo类来进行解析

11、Feathers PanelScreen一般不进行实例化,而是与ScreenNavigator配合一起使用

this._navigator = new ScreenNavigator();

this._navigator.addScreen(BUTTON, new ScreenNavigatorItem(ButtonScreen,

{

complete: MAIN_MENU,

showSettings: BUTTON_SETTINGS

}));

12、progressBar.direction = ProgressBar.DIRECTION_VERTICAL;

确定进度条填充的方向为竖直的,但是你得设置progressBar的宽高看起来像竖直的

13、feathers.core.ToggleGroup:控制选择中的两个或更多个iToggle的情况下,只有一个可被选择

14、Screen,ScreenNavigato,ScreenNavigatorItem这3个组合一起使用来实现手机页面的功能

15.Feathers ScrollBar和SimpleScrollBar的区别:

ScrollBar是一个普通的平常在网页上常见的滚动条

SimpleScrollBar是一个只有一个滑块,没有背景,没有上下按钮的滚动条,适合手机上用

Feathers Scroller

不会被作为一个独立的容器或组件。通常意味着另一个组件的超类需要支持滚动

比如ScrollText—>Scroller、ScrollContainer—>Scroller

17、直接btn.defaultSkin = new Image(Texture.fromBitmapData((new BtnClass1).bitmapData));

btn.defaultSelectedSkin = new Image(Texture.fromBitmapData((new BtnClass2).bitmapData));

给换钮换肤是不生效的。

实际上是因为Button在addChil的时候会把theme中的默认皮肤方法赋值给stateToSkinFunction,

所以要使我们设置生效的方法就是在addChild我们的button之后将stateToSkinFunction赋值为null

18、clearInitializerForClass可以清除setInitializerForClass引起的引用

19、会先执行tabBar.tabFactory函数,才执行主题中的tabInitializer,所以在tabBar.tabFactory所设置的皮肤都被覆盖无效了

CalloutPopUpContentManager其实是简单的调用封装了Callout,它的open方法不是静态方法。它可以在一个显示对象的四周弹出另一个显示对象

DropDownPopUpContentManager.open方法其实是调用PopUpManager.addPopUp(this.content, false, false);只能在一个显示对像的上方或下方弹出,并且它还侦听舞台的变化来调整在上还是在下

VerticalCenteredPopUpContentManager.open方法也是调用PopUpManager.addPopUp(this.content, true, false);来顶层居中弹出

2、feathers.core.DisplayListWatcher.setInitializerForClass(type:Class, initializer:Function, withName:String=null):void

这是主题类中要调用的方法。它的功能是为指定的类和该类指定的实例名(可选)绑定初始化函数initializer

比如,AeonDesktopTheme主题中为PickList指定了INIT函数

this.setInitializerForClass(PickerList, pickerListInitializer);

protected function pickerListInitializer(list:PickerList):void

{

list.popUpContentManager = new DropDownPopUpContentManager();

}

初始化函数为PickerList弹出下LIST的管理器为DropDownPopUpContentManager;

3、VerticalCenteredPopUpContentManager、DropDownPopUpContentManager、CalloutPopUpContentManager都继承自EventDispatcher实现了IPopUpContentManager接口

4、Callout弹出的显示对像会默认有背景。PopUpManager.addPopUp则没有

5、dropDownPopUpContentManager.open两次同一个tip会出错。可以先close再open;

6、PopUpManager与VerticalCenteredPopUpContentManager的区别:PopUpManager弹出的显示对像不会自动关闭,而VerticalCenteredPopUpContentManager会

7、Check—>Button—>FeathersControl—>starling.display.Sprite

Check就是一个Button,一个isToggle的Button。只是它的皮肤变了

8、GroupedList是一个可分组的LLIS类似日历界面“今日可做今日已做”模块

9、var list:Vector. = new Vector.();

list.push(backBtn);

可以简写为: list = new [backBtn];

10、Header是一个手机屏幕页导航。有一个居中的标题和可以放在左右两边的按钮集合

11、List需要的dataProvider是一个ListCollection。默认数据中的label为LIST中显示的文本,iconSource为显示的图标

如果要改需要写代码:

list.itemRendererFactory = function():IListItemRenderer

{

var renderer:DefaultListItemRenderer = new DefaultListItemRenderer();

renderer.labelField = “text”;

renderer.iconSourceField = “thumbnail”;

return renderer;

};

12、自定义ListItemRenderer:

a.要继承FeathersControl

b.实现IListItemRenderer接口

c.override protected function draw():void

{

setSizeInternal(100,20,false);

}

Feathers基础知识