页面

2010年5月26日星期三

bitmap类型九宫格应用

用flash创作客户端界面时,我们常常要用到显示对象的九宫格属性,然而...

问题:bitmap无法应用scale9Grid

原因:设置DisplayObjiect.scale9grid时,flash仍会正常缩放所有文本和填充(包括位图、视频和渐变),即便这些文本和填充在九宫格中心区域以外.

解决办法:
1 将位图(渐变、文本)打散,按照九宫格划分九个区域,然后将他们ctrl+G到九个不同组中,这样flash会认为他们不再是文本和填充,而导致scale9Grid起作用.
a.如果你只是在水平方向需要scale9grid,可以划三条竖直线,分三组即可.垂直方向亦如此。
而如果水平、垂直方向都需要scale9grid,就需要分成9组了。

b.一旦旋转显示对象,则会忽略 scale9Grid属性。

2使用流传的BitmapScale9Grid 类
package
{
import flash.display.Sprite;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.geom.Rectangle;
import flash.geom.Point;

public class BitmapScale9Grid extends Sprite
{
private var source : Bitmap;
private var scaleGridTop : Number;
private var scaleGridBottom : Number;
private var scaleGridLeft : Number;
private var scaleGridRight : Number;

private var leftUp : Bitmap;
private var leftCenter : Bitmap;
private var leftBottom : Bitmap;
private var centerUp : Bitmap;
private var center : Bitmap;
private var centerBottom : Bitmap;
private var rightUp : Bitmap;
private var rightCenter : Bitmap;
private var rightBottom : Bitmap;

private var _width : Number;
private var _height : Number;

private var minWidth : Number;
private var minHeight : Number;

public function BitmapScale9Grid(source:Bitmap, scaleGridTop:Number, scaleGridBottom:Number, scaleGridLeft:Number, scaleGridRight:Number )
{
this.source = source;
this.scaleGridTop = scaleGridTop;
this.scaleGridBottom = scaleGridBottom;
this.scaleGridLeft = scaleGridLeft;
this.scaleGridRight = scaleGridRight;
init();

}

private function init() : void {
_width = source.width;
_height = source.height;

leftUp = getBitmap(0, 0, scaleGridLeft, scaleGridTop);
this.addChild(leftUp);

leftCenter = getBitmap(0, scaleGridTop, scaleGridLeft, scaleGridBottom - scaleGridTop);
this.addChild(leftCenter);

leftBottom = getBitmap(0, scaleGridBottom, scaleGridLeft, source.height - scaleGridBottom);
this.addChild(leftBottom);

centerUp = getBitmap(scaleGridLeft, 0, scaleGridRight - scaleGridLeft, scaleGridTop);
this.addChild(centerUp);

center = getBitmap(scaleGridLeft, scaleGridTop, scaleGridRight - scaleGridLeft, scaleGridBottom - scaleGridTop);
this.addChild(center);

centerBottom = getBitmap(scaleGridLeft, scaleGridBottom, scaleGridRight - scaleGridLeft, source.height - scaleGridBottom);
this.addChild(centerBottom);

rightUp = getBitmap(scaleGridRight, 0, source.width - scaleGridRight, scaleGridTop);
this.addChild(rightUp);

rightCenter = getBitmap(scaleGridRight, scaleGridTop, source.width - scaleGridRight, scaleGridBottom - scaleGridTop);
this.addChild(rightCenter);

rightBottom = getBitmap(scaleGridRight, scaleGridBottom, source.width - scaleGridRight, source.height - scaleGridBottom);
this.addChild(rightBottom);

minWidth = leftUp.width + rightBottom.width;
minHeight = leftBottom.height + rightBottom.height;
}

private function getBitmap(x:Number, y:Number, w:Number, h:Number) : Bitmap {
var bit:BitmapData = new BitmapData(w, h);
bit.copyPixels(source.bitmapData, new Rectangle(x, y, w, h), new Point(0, 0));
var bitMap:Bitmap = new Bitmap(bit);
bitMap.x = x;
bitMap.y = y;
return bitMap;
}

override public function set width(w : Number) : void {
if(w < minWidth) {
w = minWidth;
}
_width = w;
refurbishSize();
}

override public function set height(h : Number) : void {
if(h < minHeight) {
h = minHeight;
}
_height = h;
refurbishSize();
}

private function refurbishSize() : void {
leftCenter.height = _height - leftUp.height - leftBottom.height;
leftBottom.y = _height - leftBottom.height;
centerUp.width = _width - leftUp.width - rightUp.width;
center.width = centerUp.width;
center.height = leftCenter.height;
centerBottom.width = center.width;
centerBottom.y = leftBottom.y;
rightUp.x = _width - rightUp.width;
rightCenter.x = rightUp.x;
rightCenter.height = center.height;
rightBottom.x = rightUp.x;
rightBottom.y = leftBottom.y;
}
}
}

2010年5月5日星期三

游戏行业的新趋势

1)在网页游戏利润率下降的情况下,赚钱只能依靠规模效益。这也意味着,网页游戏公司对于构建平台和用户驻留的渴求进一步加强。
2)史玉柱选择了让游戏时间和道具全部免费,而采取交易收费模式,依靠从玩家之间的交易中收 取手续费而盈利。付费玩家充值之后要从其他玩家手中购买虚拟物品,而巨人不再出售虚拟道具,只靠收取手续费盈利。

2010年5月4日星期二

秃驴!竟敢跟贫道抢师太完整版本

小说要求:   
1、要同时涉及3大门派   
2、要包含江湖门派间多年恩怨情仇,又要打破世俗伦理。   
3、同时情节还要扣人心悬,大有血雨腥风呼之欲来。令人极为期待该小说之续集,同时留下n多悬念。   
4、越短越好      

第2天,有人来投稿,全文只有十个字:   

秃驴,竟敢跟贫道抢师太 !      

编辑复语:恩怨情仇,血雨腥风确有,且短小精悍,n多悬念,但侠骨有余,柔情不足。虽江湖儿女,但也有柔情万种。      

第3天,修改稿:   

师太,你就放弃秃驴从了贫道吧!   

编辑又语:江湖儿女,柔情尽显,缠绵悱恻。但仍拘泥世俗伦理。   

第4天,第三稿:   

师太,你竟敢跟贫道抢秃驴!   

编辑三思,语:打破世俗伦理之作,血雨腥风也呼之欲来,扣人心弦,悬念n多,但总是少点什么。。。      

第5天,终结稿:
  
和尚:"师太,你从了和尚吧!"   
道长:"秃驴,竟敢跟贫道抢师太!"   
师太:"和尚、道长你们一起上吧,我赶时间。"      

编辑兴奋ing,语:前无古人,后无来者之完美杰作。既有难以理清的多年门派恩怨,大有血雨腥风呼之欲来之势;又有纠葛的侠骨柔情,  既打破世俗伦理,又尽显江湖儿女不拘小节之豪气干云。旷世巨制!!

2010年5月2日星期日

程序如练功

    程序如练功,也分为内功和外功,这些话似乎已经老生长谈了,在很多书籍里都可以看到,但看到归看到,得理解这句话的意思,不然有什么用?
    软件开发中什么是内功什么是外功呢?我的理解,内功不仅仅是有些书所说的面向对象编程思想,那在面向对象思想出来之前我们的IT人们就不开发软件了?当然不是这样了,所以内功是一种不依赖于语言的东西,是种放之任何项目皆准的东西,有了这样的能力,就知道什么样的项目什么什么样的语言更合适,什么样的项目采用什么样的架构更合适,而且能够掌握一个平衡,没有完美的方式,只有合适的方式,不是所有的项目都需要去找出一种很优雅很完美的架构方式,而且是合适的,先是能用的东西,才有更好的东西,扯得有点远了。另外,内功还包括一些保持软件随时可以发布、合理审查代码、写清晰的代码等良好的习惯。外功仅仅是如何利用语言特性写出更高效,更易懂的代码。
    说下项目吧!项目采取一个倒树的结构方式,最大的容器里有两个容器,再下面又分出很多的容器,通信采取事件的方式,每个模块只处理自己能处理的功能,与自己无关的直接向上层抛事件出去,
这样的模式有几个好处:1)利于模块的独立,互不干涉,拔插容易;2)不需要前期长时间的架构,适于需要马上进入代码的情况;3)整体项目不会被个别模块牵制而不能发布。
当然也有缺点:1)会有数据重复的情况,为了模块的独立,每个模块单独处理自己的功能,就最好不要利用单独的数据层,不然有可能会被数据层所牵制,但各模块难免会出现功能重复的情况;2)效率应该不是很高,总没有直达的快嘛!用接口设计架构可以实现消息直达。
具体到具体的功能编码中,这种思考方式同样会用到,城内功能也是分出地图层啦,建筑层啦,格子层啦,效果层啦,操作层啦等,新建建筑拖动建筑时建筑层和操作层各负责各的东西,由最大的容器统一调用,两者不共同持有 一个东西,如:建筑MC不会从建筑层给传到操作层去,而是在操作层生成一个新的表现。还有类要保持类的功能单一、内聚,不出现冗余的类出来,类接口也要清晰,专用,精练。