3月 142015
 

之前也总结了一篇,关于分享到各个平台的代码。里边地址写的比较死,分享的平台也少了分享给qq好友、群、百度搜藏,还少了添加qq群。

以前的文章地址:

这里还有个缺点,所打开分享的网页,都是新开,且占满整个浏览器页面的。通过js应该可以设置分享页面的大小的。这个还待优化。

先看效果:

这里,将各个平台的分享核心抽离出来,做到动态的添加,动态的获取。对分享的内容也是动态的设置。

到了今天,分享已不再新鲜,甚至还有疲劳的感觉。微信等移动app的使用在如火如荼使用着。虽然移动的平台的方便,桌面系统还是娱乐,游戏,使用的主要平台。

源代码下载:http://pan.baidu.com/s/1c0fGORA
密码:o2uw

3月 122015
 

最近在用AMS做一个多房间的聊天室。计划先做网页端,然后用air端。无论哪个平台,都有在线功能管理。比如房间踢人,权限管理,房间设置等等。

AMS对应的服务端代码还停留在as2时代。那么,用as3的代码去和as2的代码交流,会出现啥问题呢。比如as3(client)这边call server端,传了一个类对象过去。服务端接到后,原因返回的却是一个Object对象,没办法将类返回过来。

这样使得两者交互不怎么和谐。这个不是这篇文字要记录的东西,先不管这个了。进入正题。

    nc.connect("rtmp://localhost/chatroom/311");
    nc.connect("rtmp://localhost/chatroom/5100");

这里实现的是一份服务器代码,对应许多个房间。其实,这里仅仅是在后边多添加了一个数字(可以说是房间号码)。平常,我们会去这样做。

    nc.connect("rtmp://localhost/chatroom");

虽然我们没有多加数字,服务器那边会默认有一个字符分配出来。在控制台中,你可以看的到”_definst_”。而聊天室这里要做的就是一份服务器代码对应很多个客户端。每个客户端行为各不一样,各不影响。

到了这里,可以想到游戏里边的小喇叭。有全频道喇叭和当前频道喇叭。当前频道就相当于这里所说的一个房间。那么全频道喇叭又该如何呢。这里,会有另外一个server代码与之对应,它可以统筹所有的子频道。然后广播出去。

 Posted by at 下午11:50
3月 122015
 

flash使用图文混排,textFlow是最方便,最直接的API。虽然,textFlow的功能比较强大,可是使用起来也会有麻烦。

开始时候很陌生,相关api也比较多。自己需要它,于是花时间去学习,去研究它。将遇到的一些问题以及会想法总结出来。

对于图文混排,有输入编辑类的,还有仅仅显示类的。在做聊天功能,当然,输入先排在第一步。这个时候会渐渐遇到以下问题。

1,如何停留光标的位置。
2,如何将内容(文字和图像)插入到当前光标的位置。
3,当输入内容很多的时候,如何做下拉处理。

面向对象的的其中一个特征就是封装。你管什么,你有什么功能。我就把你封装在一起。先简单了解下有关textflow比较重要的api:
Configuration:Configuration 类允许通过 textFlowInitialFormat 属性为文本流指定初始的段落和容器格式。它还可用于为链接、当前选择、滚动指定初始格式属性,以及为处理 Tab 和 Enter 键指定初始格式属性。
ContainerController:ContainerController 类定义了 TextFlow 对象与容器之间的关系。
EditManager:EditManager 类可管理对 TextFlow 进行的编辑更改。要启用文本流编辑功能,请将一个 EditManager 对象指定给 TextFlow 对象的 interactionManager 属性。
TextLayoutFormat:TextLayoutFormat 类包含所有文本布局属性。这些属性可在容器级别、段落级别和文本级别影响文本流的格式和样式。

回归到第一个问题。如何停留光标位置呢。看这个功能,设计到编辑的,就找EditManager。实际是textFlow的interactionManager对象。先selectRange,然后setFocus。

textFlow.interactionManager.selectRange(editManager.anchorPosition , editManager.activePosition);
textFlow.interactionManager.setFocus();

 

再看第二个问题。在真正解决这个问题之前,我们都会想到用addChild。也就是textFlow去addChild段落(ParagraphElement),然后用段落(ParagraphElement)去addChild 文本(spanElement)丶显示对象(InlineGraphicElement)等。然后你会遇到,我该把这些对象如何插入到光标停留的位置呢。这个时候你会发现很郁闷,插入不了。那么这个时候,如果你想到了EditManager,一句代码就解决了。

editManager.insertInlineGraphic(inputGifPlayer , width , width );
editManager.insertText("梧桐树,三更雨,不道离情正苦.一叶叶,一声声,空阶滴到明.");

 

再看最后一个问题。想做下拉条,如果对方提供相关的api也好做。当你用纯as来实现时,发现没法获得ContainerController的内容高度的API。找了下资料,发现其实是有这个api的,只是要到命名空间。

import flashx.textLayout.tlf_internal;
use namespace tlf_internal;
var textHeight:int = Math.ceil(containerController.contentHeight);

 

然后,使用:

 containerController.verticalScrollPosition = textHeight - containerController.compositionHeight;

 

就可以跑到输入的最后位置了。

 Posted by at 下午11:45
3月 092015
 

走着走着,就让数字跳起来了。最近项目中看到一个比较好看的数字滚动效果,就模仿做了一个。

还做了一些扩展。比如数字滚动方向,数字滚动速度。 最终目的:传入一个参数(是数字可以是数字的字符串或数字),然后滚到对用的数字。

细节:数字大小,颜色,字体,方向,数字的位数,数字滚动的速度,数字滚动的方向,数字的滤镜,滚动时的缓动。并,可以动态的设置这些参数。

要求:数字在垂直方向上滚动,滚动到对应的数字。

创组件:建立第一个Label对象,就是滚动的对象。这里用TextField,将0,1-9,垂直的,等间距的排在一起。本来,想用一个TextField,结果会引起间隔不均匀,移动会出现错位。所以会创建一系列的数字。
对滚动的方向,创建的数目有所不同。没有方向限制的,创建从0-9的就可以。从上到下或从下到上,需要至少创建两组数字。所以,就创建两组这样的数字。
再建立一个Direction对象,用来枚举滚动方向的。
再建立一个Mode对象,用类枚举滚动速度类型。大范围匀速,还是大范围变速。
再建立一个RollLabel对象,将label组合进来。记录当前的num,默认是0,要滚动到的num。时间。然后,找规律,写算法,找到time和坐标。滚动到就可以了。
再建立一个RollNumText对象,组合RollLabel。想做几位数字的,就组合几个RollLabel进来。
最后,创建一个文档类,来创建三种不同的RollNumText。一般,构造器函数中会带一些关键性熟悉。比如几位数字的,什么方向的,速度类型的。

有一点需要注意。比如,我们创建一个8位数字的滚动,如果传进来的数字是5位(也就是小于8位)的数字,想要滚动的好。就得对数字进行反转。这样,可以不用补位,相对代码也好写。

请看demo,new出了三个滚动方向的RollNumText:
http://www.vini123.com/demo/rollNumText.swf

 Posted by at 下午11:31
3月 062015
 

做flex项目时,对于flex组件的宽高,坐标,有时候会遇到取不正确的问题。像是被延迟后,才会得到正确的值。即使是Label也是

如果用同步异步的说法,想取到正确的值。就得到异步结束。

这样,就需要对对象进行侦听。在这里,Flex对应的有一个事件:FlexEvent.UPDATE_COMPLETE

打个比方。你创建一个Label,然后给它不断的填充text属性。然后再trace label的宽高。你会发现label的宽高有时候是不准确的。

这个时候,你对labe进行FlexEvent.UPDATE_COMPLETE侦听。在侦听器里完成label宽高的读取就是正确的。

这里只是一个例子。其他的组件也是。貌似都继承UIComponent的都有。

var label:Label = new Label();
label.addEventListener(FlexEvent.UPDATE_COMPLETE , labelUpdateCompleteHandler);
function labelUpdateCompleteHandler():void
{
      trace(label.width , label.height);
}

 Posted by at 下午12:50
网站地图