首页 > 代码库 > 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
_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基础知识