爱Flash、爱游戏 人因梦想而伟大!!!
百度首页 | 百度空间
 
文章列表
 
2008-12-30 10:48

在类中使用this可以取得当前类实例的引用,AS3中有一个取得某函数引用的方法,暂时还不知道这个东西具体可以应用在什么地方。

类:arguments -->Object

function test()
{

    trace(arguments.callee)//这里输出 test函数的引用。

}

完整例子:

package {
    import flash.display.Sprite;
   
    public class ArgumentsExample extends Sprite {
        private var count:int = 1;
       
        public function ArgumentsExample() {
            firstFunction(true);
        }

        public function firstFunction(callSecond:Boolean) {
            trace(count + ": firstFunction");
            if(callSecond) {
                secondFunction(arguments.callee);   //把自己的引用作为secondFunction的参数
            }
            else {
                trace("CALLS STOPPED");
            }
        }

        public function secondFunction(caller:Function) {
            trace(count + ": secondFunction\n");
            count++;
            caller(false); //这里执行的其实还是firstFunction
        }       
    }
}

 
2008-12-21 15:51

一群疯狂的企鹅为了拯救自己的同胞和北极熊之间展开了战斗。

他们用自己的肉体当成炮弹攻击可恶的北极熊。

http://www.4399.com/flash/9865_2.htm?800

抛物线游戏见过很多,不过这个游戏在设计上别具新财。

 
2008-12-20 10:30
先占个位置
 
2008-12-19 01:45
作者:闪刀浪子 来自:www.iflashigame.com

YangPuXiao的这个帖子里提了一个关于立体小方格拼图的游戏
http://bbs.actionscript3.cn/thread-17085-1-1.html

这里给出一个基本实现的思路,以及程序流程和演示。

先来看一下实现后的效果(点击这里),因为是临时做得所以代码不规范也没有做吸附算法,所有的东西也都是写在时间轴上面的。


还是按照我的惯例通过图文讲解主要环节的考虑,形象大使的还是我们的“葡萄MM“

讲解
1、基本思路
小方格拼图由于他的每一个拼图外形都不会是规则的,可能是L型,可能是T型,所以我们无法把每一个部件作为独立的物体来处理遮挡关系。但是因为他的基本型是小方块,如果我们排序通过小方块来处理,那么一起都会非常简单了。可以用N中方法来处理小方块基本型的排序。

    排序解决了那么我们解决拖动问题?我们需要拖动的不是一个小方块而是由许多小方块拼起来的拼图部件。想想我们在Flash cs3中经常用到的Ctrl+G群组功能,我们只要把不同的拼图部件作为一个组,拖动组里面的任何一个方块都将移动这个群组里面的所有小方块,然后在松开鼠标的时候解除群组。按照上面说得小方块来做一次遍历排序不就行了?

   2、群组的实现
    我们给每一个拼图部件设置一个拼图数组数组里面的每一个元素记录这一个小方格的编号。同时,每一个小方格也都有一个属性记录了自己在哪一个组里面。这里例子里面用到了5个部件,所以我定义了5个数组来保存


3、拖放群组任意一个成员移动群组的实现
这个其实很简单,一说就能明白了。我们定义了一个空的Sprite始终在场景的最上层,当我们拖动群组中某个成员的时候把这个群组中所有的对象都加入到这个空的Sprite里面。让这个Sprite跟着鼠标拖动就好了。停止拖动的时候,我们在把放到Sprite里面的这些对象取出来(相当于取消群组)再放回到场景里面,再把Sprite重新放在场景最上层。

    因为刚刚拖动的是sprite,所以只有Sprite的坐标变化了,释放的时候需要把群组里面每一个对象的坐标调整到新坐标,同时重新把Sprite的坐标置为0,0.
复制内容到剪贴板
代码:
[b]这是拖放的关键代码:[/b]
function group(index:int)
{
//见下面的完整代码
}
function ungroup(index:int)
{
//见下面的完整代码
}

this.addEventListener(MouseEvent.MOUSE_DOWN,onmouseDown);
this.addEventListener(MouseEvent.MOUSE_UP,onmouseUp);

function onmouseDown(evt:MouseEvent)
{
clickGroupIndex=evt.target.name.substr(5);
group(int(clickGroupIndex));
sprite.startDrag();
alpha=0.5;
}
function onmouseUp(evt:MouseEvent)
{
      ungroup(int(clickGroupIndex));
sprite.stopDrag();
}


4、深度排序的实现
考虑到这只是个简单的例子,所以我通过这种方式来确定每个小方块的层级应该在上面还是下面。
规则:方块的屏幕y值越大则层级越高,如果Y值相等则X值越大层级越高。
我们先遍历一下场景中所有的方块都记录在同一个数组里面,然后为每个方块增加一个deep属性,最后通过数组的sort方法,根据deep属性排一次顺序。最后从第一个开始把排好序的数组中的每一个方块重新addChild一遍就OK了。
复制内容到剪贴板
代码:
function sortDeep(a,b)
{
if(a.deep>b.deep)
return 1;
else if(a.deep<b.deep)
return -1;
else
return 0;
}
function checkDeep()
{
var childList=new Array();
for(var k=0;k<numChildren-1;k++)
{
var deep=getChildAt(k).y*1000+getChildAt(k).x;
(getChildAt(k) as MovieClip).deep=deep;
childList.push(getChildAt(k));
}
childList.sort(sortDeep);
for(k=0;k<numChildren-1;k++)
{
addChildAt(childList[k],k);
}
}
============================================================================================================================
以下是完整的代码了
============================================================================================================================
复制内容到剪贴板
代码:
var group1:Array=[1,2,3,4]
var group2:Array=[5]
var group3:Array=[6,7,8,9]
var group4:Array=[10,11,12]
var group5:Array=[13,14,15,16];
var clickGroupIndex:int;   //记录点击的是那个群组
var sprite=new Sprite(); //用来移动群组方块的容器
addChild(sprite);

block1.group=1;
block2.group=1;
block3.group=1;
block4.group=1;
block5.group=2;
block6.group=3;
block7.group=3;
block8.group=3;
block9.group=3;
block10.group=4;
block11.group=4;
block12.group=4;
block13.group=5;
block14.group=5;
block15.group=5;
block16.group=5;

this.addEventListener(MouseEvent.MOUSE_DOWN,onmouseDown);
this.addEventListener(MouseEvent.MOUSE_UP,onmouseUp);
checkDeep();

function onmouseDown(evt:MouseEvent)
{
clickGroupIndex=evt.target.name.substr(5);
group(int(clickGroupIndex));
sprite.startDrag();
alpha=0.5;

}
function onmouseUp(evt:MouseEvent)
{
ungroup(int(clickGroupIndex));
sprite.stopDrag();
alpha=1;
checkDeep();
}
function sortDeep(a,b)
{
if(a.deep>b.deep)
return 1;
else if(a.deep<b.deep)
return -1;
else
return 0;
}
function checkDeep()
{
var childList=new Array();
for(var k=0;k<numChildren-1;k++)
{
var deep=getChildAt(k).y*1000+getChildAt(k).x;
(getChildAt(k) as MovieClip).deep=deep;
childList.push(getChildAt(k));
}
childList.sort(sortDeep);
for(k=0;k<numChildren-1;k++)
{
addChildAt(childList[k],k);
}
}
function group(index:int)
{
var groupIndex=this["block"+index].group
for(var i=0;i<this["group"+groupIndex].length;i++)
{
sprite.addChild(this["block"+this["group"+groupIndex][i]]);
}
}
function ungroup(index:int)
{
var groupIndex=this["block"+index].group
for(var i=0;i<this["group"+groupIndex].length;i++)
{
addChild(this["block"+this["group"+groupIndex][i]]);
this["block"+this["group"+groupIndex][i]].x+=sprite.x;
this["block"+this["group"+groupIndex][i]].y+=sprite.y;
}
sprite.x=0;
sprite.y=0;
this.setChildIndex(sprite,numChildren-1);
}
 
2008-12-16 19:18
    除了本类游戏的标志性特性――竭力完善角色以外,角色扮演游戏类新也同时具有其他七种比较重要的特性。有时候我们在其他游戏类型中也会发现这些特性,但是在创建经典角色扮演游戏过程中,这其中每一种特性都发挥了十分重要的作用。也许其他设计者还主张加入其他特性,但是在我看来,对一个伟大的角色扮演游戏来说,绝对不能够缺少这七种特性。

1.     探险
    电视节目Star Trek的开场白包含了最优秀的角色扮演游戏所应该具备所有核心和灵魂:大胆地去尝试前人未做过的事情。不论我们将玩家送入恐龙世界或是由恐怖机器人统治的遥远的未来,对角色扮演游戏来说,让玩家具有这种转移到完全崭新世界的感觉是最重要的。其次就是有关角色成长的问题,角色扮演游戏迷们希望自己扮演的角色处于一个令人难忘的、令人注目的、错综复杂并且具有内在一致性的世界中。玩家在游戏中遇见的每个角色和每一件事都应尽量真实,而不仅是为了剧情的发展。

2.     史诗般的故事
奇异的场景只能吸引玩家一时,除非游戏中发生的某些事情同玩家具有联系并可以激起他们的兴趣,否则玩家们没有原因继续呆在游戏世界里。在单人游戏中应该具备让玩家采取行动的重大原因以及能够吸引玩家英雄式回应的威胁。这并不是说整个游戏世界都应该充满险情,但是应该具有对角色产生一定影响的事件以便玩家采取行动,比如一个朋友已经被绑架,或者玩家角色的家或名誉受到了威胁。无论游戏中为玩家角色设计了什么大型剧情,我们一定要让玩家感受到游戏需要他们的参与才能解决出现的那些问题。

    事实上,我们随便翻看对一款角色扮演游戏的评论,无非就是有关故事情节、搜寻、分支情节和故事线索这四方面。而看起来玩家们最关心的事情是他们可以去什么地方,在什么时间可以去以及他们对游戏中发生的事件具有多大的影响,玩家们不喜欢好像被一根绳子牵着去做一些(游戏设计者们)预先设计好的事情。角色扮演游戏的故事情节应该是被邀请、激起或者鼓舞出来的,但是我们应该把这些动作留给玩家。

3.     战斗
    在角色设计完美的角色扮演游戏中,在玩家们看来,角色们都具有足够的自信和活力,这种情况下最能够激起玩家兴趣的方法就是威胁他们扮演角色的生命。如果到了生死攸关的情况,玩家们就不得不做出反应以便自卫。
一个令人兴奋、直觉、快节奏的战斗界面和角色扮演游戏中的其他因素一样,对游戏的成功是很重要的。在很多情况下,您的游戏就是靠这个去吸引某些玩家,如果游戏中战斗是主要部分的话尤其如此。

4.     临时任务
    拯救世界需要花费很多时间。玩家平均花费在每个角色扮演游戏上的时间大约为100到200小时,所以设计者应该在中途为玩家提供一些小型临时任务或搜索,无论这些小任务与玩家要完成的最终目标有没有关系。(在多数多玩家游戏中,设计者就是为玩家们分发设计了这些小型任务,这让所有的玩家对游戏都很重要。)临时搜索任务可以像一个老人让玩家去查清被弄错的神像的那么简单,也可以复杂一些,比如联盟总统命令玩家去摧毁一个停泊着护航舰队的星际基地。
无论任务的规模如何,游戏中都应该设置适当的机制让玩家愿意放下正在做的事情后去执行临时任务。比如,完成任务后奖励玩家钱、物品项目、资源或者答应在以后玩家需要任何的地方帮他一个忙。临时搜索是一种安抚角色的方式,让他们去成功完成某些事情会让玩家心情非常畅快。即使现在玩家距离游戏最终目标还很遥远,这些小的临时任务会让玩家们不断地重新开始,以便可以尝试各种方法。

5.     搜索财宝
    探索角色扮演游戏世界应该感觉有点像令人狂欢的探宝。玩家们对他们可以在盒子、桶、板条箱或者书箱里发现的东西非常好奇。任何看起来有可能包含宝贝的容器都会引起玩家的注意力,而正是我们游戏者决定他们过去会找到什么东西,我们可以为玩家提供武器、弹药、具有魔力的物品、珠宝,甚至一种新衣服,不论提供什么,在玩家以后的游戏经历中这些物品应该可以派上用场。要注意尽量避免创建无用储藏。以某种物品作为一个搜寻的目标很不错,但是玩家一旦拥有,便应该可以利用它去做点事情。

无用储藏:一个物品对玩家来说完全没有用,但是为了完成某个任务还必须使用它。这正好是“郁闷储藏”(指的是可以在容器或杀死的敌人身体上得到随机的普通物品)的反义。

玩角色扮演游戏最主要的乐趣之一就是去搜索新的物品,然后给角色装备上。有了这些新的物品之后,玩家角色应该可以变得移动更快、更灵活、更加坚强或者对他们将要完成的事情变得更加娴熟。永远不要低估玩家们以搜索的宝贝去装备自己角色所带来的乐趣。

6.     资源管理
    自从角色扮演游戏诞生以来,资源管理就是游戏的主要部分。这通常会要求玩家代表他们的角色管理一些琐碎的事务,比如保证角色具有足够吃的,保证角色具有足够睡眠,甚至要保证玩家所有的武器处于战斗状态。近年来,为了让整个游戏更加的流畅,角色扮演游戏开始逐渐减少游戏过程中这些琐碎的事务。
即使在这种简化的趋势下,多数角色扮演游戏仍然要求玩家具有一定的策略,以便管理他们不断增多的资源。由于在游戏中某些物品稀少或者难以获得,所以玩家需要仔细考虑使用电池、弓箭、子弹、血瓶、魔力药瓶或者超自然力量(施加咒语时要使用的一种力量)。角色扮演游戏通常也会让玩家自己去思考如何去花手头的钱,比如是花钱去购买更好的武器还是去贿赂那些惹事的城堡卫兵。

7.     解决问题
    角色扮演游戏最后一个代表性特点就是玩家在游戏过程中要面临多种类型的挑战。在战斗中,随着遇到更加厉害的怪物,玩家需要不断掌握新的、不同的策略。玩家偶尔会在黑暗的地下城和狂人住宅中遇到考验智力的难题和恼人的陷阱,在这种更加抽象的等级上,玩家应该确定相信那些NPCs以及哪些路是走向毁灭的。以手头上现有的资源和信息去确定最好的行动方案占角色扮演游戏中很大一部分,比如如何安排组织行军顺序才能在突然袭击的情况下保证他们的生存。
记住,一个仅是设计好的角色扮演游戏只会让大家短时间内感到兴奋,但是那些可以持续流行的杰出角色扮演游戏总是会不断地出现新的、不同的挑战,因此玩家们就不得不动脑去思考。永远,永远,永远,永远不要让玩家对你游戏产生“一样的材料,不同的等级”这样的印象。
 
2008-12-16 19:14

让玩家具有独特的功能对游戏的成功而言至关重要,因为MMP游戏的流行并不仅仅因为它是一个可以和其他玩家一起历险的社交场所。很少有人愿意为了和一堆多边形聊天而每月支付费用。相反,MMP游戏成功的核心原因是,它们可以让玩家不必花费很多时间就获得成就感。人们参与MMP游戏是因为这些游戏可以使他们获得成功,而所花费的时间往往比真实世界中所需要的短得多。玩家只需要付出几百个小时的努力就可以变得强壮、富有、闻名、博学、性感或是其他他所想要的结果。从心理学角度来说,这非常有吸引力。


         这个基本概念非常容易把握,不过需要注意的是,不同的个性类型对于成功的定义差别很大,如果游戏设计人员假定玩家与他们有类似的喜好或厌恶,他们就必须为这个假定承担风险。类似于“玩家不喜欢X”(“玩家们不喜欢PVP”是这些说法中较常见的一种)之类的说法对于成功的游戏设计来说是极为危险的。如果游戏设计人员常常有这样的假设,那应该改变这个习惯。要知道,不存在这样的“玩家们”。


         某些游戏潜在用户会因为他们的角色变得更加富有而感到成功,有些则对通过提升技能和等级来完善他们的角色更为有趣,有些渴望名望,还有一些仅仅期望那种被别人需要的感觉。 和现实生活中一样,MMP游戏中,成功的定义非常的多,为了吸引更多的潜在玩家,设计人员必须建立各种不同的方法使玩家可以在游戏中实现价值。要达到这个目的,最好的方法就是让玩家具有独特的功能,每一个功能都可以用来满足一类基本的个性化需求,并且必须有助于满足其他玩家的需求。


         在MMP中,玩家作为角色来说他的作用是由游戏赋予他的能力决定的。在《无尽的任务》(EverQuest)中,一个具有“假死”技能的僧人是一个“诱捕者”,他可以诱使怪物离开安全的群体从而被一起冒险的伙伴杀死。巫师则是“远程攻击者”,这种角色在远处就可以造成大量的伤害。在很多虚幻MMP游戏中,牧师是“复活者”,这类玩家可以使无法继续游戏的玩家复活。从这些例子可以简单地看到玩家使怎样把角色和它们的功能联系在一起的:玩家用角色所具有的功能来定义它。

ps:职业的或者玩家个性的设置必须要让他有实际的合作价值。

 
2008-12-16 19:12

       游戏中应该包含多少合作游戏的成分?这一问题常常会激起MMP设计小组成员之间的争论,尤其是在讨论是否需要强制玩家进行合作时,争论会变得更为激烈。小组中一部分成员(通常时那些比较外向的设计人员)希望让合作游戏占据主导地位,而剩下的成员(通常是比较内向的)虽然也支持合作游戏,但是他们希望能够确保玩家也可以单独进行游戏。然而,没有一个游戏可以让玩家无论是独立游戏还是和别人合作都可以用完全相同的方式来进行。在所有其他条件都相同的情况下,相对于独立游戏而言,与其他玩家合作不仅需要付出更多的努力,还会面临更多的麻烦,因此玩家总会选择单独进行游戏。如果游戏设计人员希望玩家在任何行动中都和别人互相合作,就必须让合作游戏在大多数情况下可以比独立游戏获得更多的回报且更为有趣。

        然而,千万不要错误地在游戏中去掉所有单独进行游戏的机会。网络游戏中有很多内向的人,他们在游戏中所占的比重甚至比在真实世界中还要高。内向的人需要可以独立进行的行动,除非他们做好了和别人交互的准备。如果一个MMP游戏要求玩家持续不断地与他人合作,内向的玩家就会很快感到疲倦,他们会觉得在游戏世界中历险不像是在娱乐,而更像是工作。这会使他们转而选择竞争者的产品,如果他们能在产品中找到快乐并且不被强迫地进行大量合作的话。在线游戏的固定成本很高,因此需要很大的订阅数来维持一个成本,如果一个游戏需要玩家不停地交互,这将是致命的。

        可能读者会觉得上面的说法是自相矛盾的,怎样才能对一个游戏进行平衡使得它在支持合作游戏的同时也让独立游戏变得可行呢?答案很简单:与其试图让游戏模式中的每一方面都同样地适合于独立游戏和合作游戏,还不如创建一系列不同的任务,它们中一部分适合独立游戏,另一部分适合玩家间的合作,这些任务最终提供了一个合作性的社会环境。

        《网络创世纪》(Ultima Online,UO)是上述思想在实践中一个很好的例子。这个游戏中的许多职业本质上就是个体户,尤其是在手工业模式中。譬如说,玩家可以从事矿工、樵夫、炼金术士、厨师以及其他职业,这些职业主要的任务就是搜集资源并提供用于历险的物品。这些任务不需要别人的合作就可以完成。一个希望独立地伐木或者制作药水的玩家在进行他们的工作时通常不必担心会收到伤害。UO中的手工业系统是内向玩家的天堂。

        这些职业通过游戏世界中的市场来与其他玩家进行合作。UO中的玩家不断地需要药水、盔甲以及其他用于历险的物品。只有那些手工业大师才能制造出最高质量的物品,UO中的手工业者向那些参与历险的玩家们源源不断地提供产品。这的确是合作游戏,即使不是在同一地点进行。然而,事实上,使用现金来交换物品的交易通常发生在这两个参与交易的玩家不同时在线的时候,出售物品的玩家把他的物品交给一个站在他房子外面的由计算机控制的NPC(Non-Player Character,游戏中的非玩家角色)商人,这个商人对于手工业者的顾客来说,就像一个自动售货机。这样层次上的交互对于一个比较内向、倾向于独立进行游戏的玩家来说是最好不过了,他可以在游戏社会中起到独特而重要的作用,但不必为了销售他的物品而和其他玩家面对面地讨价还价。

http://hi.baidu.com/storm1986/blog/item/c586f88866a32595a5c27205.html

 
2008-12-16 19:00

在过去的几年里,有一个观点已被广泛接受,那就是构筑社区(Builing Community)的思想是MMP游戏成功的关键。尽管支持这一观点的严谨的统计数据并不多,但是有3个合乎常识的理由让游戏鼓励玩家之间的合作。

第一个理由是,玩家间的合作可以降低系统的开销。让用户共享游戏资源可以增加单个服务器能够处理的并发玩家数量,还可以降低为单个用户支出的硬件开销,从而提高利润。假设每个服务器预计最多可以承受3000个并发玩家的负荷,并且每个玩家都可以安全地和一个怪物独立作战,这样一来,游戏服务器就必须能够同时对付3000个怪物(当然,根据游戏设计的不同,实际的数字可能有所不同)进行AI调用、碰撞处理以及各种其他任务。如果3个玩家才能打败一个敌人,那只需提供1000个并发敌人就可以了。

第二个理由是,合作进行游戏不仅可以使游戏内容更加富于变化,还可以让玩家花费更多的时间来完成所有预先创建的游戏内容,并且可以降低他们对游戏产生厌倦的可能性。换句话说,如果可以制作一个游戏使玩家能够自行创造快乐,他们完成所有游戏内容的速度就会变慢。他们订阅游戏的时间越长,所产生的利润就越高,还会将更多的朋友和家庭成员带入游戏世界来与他们一起分享快乐。

第三个理由是,玩家之间的合作可以使他们建立起牢固的社会关系,从而不愿停止游戏。虽然有时候玩家在游戏中的社会关系会转移到游戏以外,但是如果他们的在线身份与他们在游戏中的社会关系紧密地结合在一起,他们将不愿意放弃这个身份。如果一个玩家停止参与某个MMP游戏,虽然他仍然可以保持和朋友之间的关系,但是他通常会担心失去在在线社会中的地位。

上面的理由都被极大地简化了,并且它们也不适用于所有类型的MMP游戏。但是,这篇文章假定它们是正确的。本文的目的是为成长中的MMP开发者提供一些实用的建议,而不是创建一个理论性的作品。本文中的大多数讨论都会以“传统的”MMP模式为重点。在这种游戏模式中,玩家操纵他们的角色在一个假想的虚拟环境中进行游戏。然而,细心的读者会发现本文所提供的设计策略可以应用于任何需要多个玩家协作的情况。

来自:http://hi.baidu.com/storm1986/blog/item/b21ec911fd74d4c7a6ef3f04.html

 
2008-12-16 18:48
Jon Radoff在Gamasutra上的一篇文章很有意思,题目是Five Prescriptions for Viral Games (让游戏传染的五个配方)。所谓“传染型”游戏就是那些不用广告和宣传,自己就能在玩家中间快速传播。看来这是个省钱的法门,先总结下作者的五个配方,给策划们作个参考:

一、让游戏自我推销
作者在文中举了个例子叫Magic the Gathering,本人不晓得这是个啥东西,但意思是说让玩家在人多的地方也能玩,以便引起更多人注意。一个建议是考虑支持手机,在哪里都能玩。另一个建议是允许镜头回放。玩家自己体验完了就没了多可惜,如果他把自己杀怪的录像放到YouTube上,肯定能诱惑一些人。

二、考虑fan sites(粉丝网站)
支持好你的扇子们(本人不喜欢粉丝这个词),他们会为你煽风。对扇子们的支持不能只停留在市场层面,而是要在设计时就考虑,让更多的内容对他们开放,让他们有更多吸引其他人的佐料。比如,可以把游戏世界一些数据开放为Web Service,扇子网站用程序取到任意显示给他们的用户。

三、支持行会
当个行会领袖不容易,为这些能人提供更好的管理手段很重要。大的行会还拥有自己的网站,让他们的网页与游戏内容挂接上很有意义。这样,游戏与现实世界的界限变得模糊了。你想到过吗?以后年轻人的个人简历中会包括:从某年到某年,在某某游戏中任某某帮会的会长。而且雇主真的很看重这个呢。

四、支持玩家建造
现在很多游戏都允许modding(模顶)。你提供了模顶接口,玩家就更容易为你打造游戏内容。可以让玩家模顶的元素包括:用户界面、皮肤、地图、人物与道具、动画、规则等等。“模顶师”们打造完了会干什么?到处宣传呗。

五、避免关卡隔离
比如说一个团队的成员,有骨灰,也有菜鸟,他们要一起玩,游戏不能为他们设置障碍,而是应该想办法让他们都能满意。这个好像不容易呢。

保守的策划们也许会说:没有诊断是否有病,就乱下药方,真是有病了。我想这些配方还是很有参考价值的,不仅用于网络游戏的开发,对其它网络应用的开发也是适用的。
 
2008-12-16 11:55
从我知道有AMF格式开始,就一直有个印象,AMF是压缩过的字节流。而且很多地方对于AMF格式的中文化文档都是这么说。
引用:
Action Message Format (AMF) is a compact binary format that is used to serialize ActionScript object graphs. Once serialized an AMF encoded object graph may be used to persist and retrieve the public state of an application across sessions or allow two endpoints to communicate through the exchange of strongly typed data.

AMF(Action Message Format 动作信息格式)是用来序列化AS(ActionScript 动作脚本)实例对象(object graphs)的压缩的二进制格式。序列化的AMF编码的实例对象可用来持久化,并且在不同的会话中获得应用的公共状态,或者允许在两个端点(比如客户端和服务器端 --译者注)通过强类型数据交换进行通信
我一直习惯writeObject(myObject),以为AMF3会自己压缩。
直到前几天偶尔一次测试才发现原来AMF3根本没有进行压缩,只是做了一个序列化。

原文中Action Message Format (AMF) is a compact binary format 这个compact虽然单词有压缩的含义,但这里并不是压缩的意思,而是排列紧凑的意思。意思是相对原来的xml传输,AMF3格式通过序列化了,自然比xml那些方式要小。

所以如果需要压缩还是必须先用byteArray.compress()来处理。
 
     
 
 
个人档案
 
mr_ziqiang

上次登录:
8天前
加为好友
 
   
 
文章分类
 
 
 
 
 
 
 
 
 
 
 
 
 
     
 
最新评论
 
     
 
我的好友
 
   
 
好友最新文章
 
     
 
最近访客
 
 

mklp98999

sun11086

凌伽

ojnoncek

fleox

sundayeleven

xsharecn

从九开始
     
 
其它
 
已有人次访问本空间
 
订阅RSS  什么是RSS?

您也想拥有这样的空间?请点此申请。
     


©2009 Baidu