ShareObject 实现Replay功能


有了ShareObject 这个利器,我们可以实现比存档更为强大的功能--录像回放
(当然,是指能够保存下来的录像,ShareObject 本身只是用来存储数据的,录像的实现本身与ShareObject 无关)为此我做了一个简单的例子:
说明:
用户可以随意托动小球,点击record开始录像(状态栏显示为“录制”),此期间用户仍可随意托动小球,请记住自己托动过的路线,要结束录像请再点击record,(录像时间为60秒)超时自动结束录制。点击replay观看刚才的录像(在录制状态直接点击replay也可)再次点击replay结束重播。
一下是全部代码:
frame 1:
var isRecording=0;
var isReplaying=0;
var i=0;
var j=0;
var condition="无";
myLSO=SharedObject.getLocal("record_1");
if(myLSO.data.statu == undefined)
{
statu=new Array();
myLSO.data.statu=statu;
}
player.onPress=function()
{
 if(!isReplaying)
 this.startDrag(true);
 }
player.onRelease=function()
{
 if(!isReplaying) 
 stopDrag();
 }
 
function Record()
{
 isRecording=!isRecording;
 isReplaying=0;
 if(i!=0)
  for(;i=1200)
     {i=0;  isRecording=0; condition="无"}
    }
  if(isReplaying)
   {   condition="重放";
    if(myLSO.data.statu[j]!=undefined)
  {  player._x=myLSO.data.statu[j];
     player._y=myLSO.data.statu[j+1];
     j+=2;
     if(j>=1200)
      {j=0;  isReplaying=0; condition="无";}
    }
   else{j=0;  isReplaying=0; condition="无";}
  }
 }
值得注意的是,上面这种储存录像的方法只适用于简单录像的存储,因为它实际上是用一种
储存每时刻状态
的方式,对上面的例子而言,小球的状态只有它的坐标,因此可以轻松的实现。
但是,对于比较复杂的动画,例如一个射击游戏,采取这样的方式是不现实的因为状态量十分之多,比如,我方战机的HP,得分,位置,敌方战机的位置甚至是双方发出的每一颗子弹的位置,都是状态量,记录如此之多的状态是极其复杂的也会占据大量的空间。因此,我想可以改以一种
存储每时刻操作
的方式,即:记录每一时刻用户对player的操作,例如鼠标点击,方向键的按下等等,这样,在回放的时候,将数组中弹出的操作指令作用于player之上。相当于是让计算机替用户操作,这种基于原游戏机制的方法可以节省大量的空间。例如,某一时刻用户的操作为“按下up键”和“按下空格键(开火)”,只要让player在重放过程中得到这两个指令,就可以向玩家手动控制一样,做出相应的前进和射击的反应。但是,这种方法有一个局限性,就是必须从头开始录制,因为每一个状态都是从前一状态中递推出来的。我现在只有这样一个想法,还没有来得及实现,希望大家能对此发表自己的看法。
本文转自:http://www.5uflash.com/flashjiaocheng/Flashyingyongkaifa/261.html

你可能感兴趣的:(游戏,J#,UP,HP)