转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 电脑应用 >> 电脑技术 >> 正文
ShareObject 实现Replay功能         ★★★

ShareObject 实现Replay功能

作者:闵涛 文章来源:闵涛的学习笔记 点击数:1292 更新时间:2003/8/7

有了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++)
   {
  myLSO.data.statu[i]=undefined;
     myLSO.data.statu[i+1]=undefined;
    }
    i=0;
 if(!isRecording)
  condition="无";
 //trace(isRecording);
 }
function Replay()
{
 isReplaying=!isReplaying;
 isRecording=0;
 j=0;
 if(i!=0)
 for(;i<=1200;i++)
   {
    myLSO.data.statu[i]=undefined;
     myLSO.data.statu[i+1]=undefined;
    }
    i=0;
 //trace(isReplaying);
 }
 
_root.onEnterFrame=function()

  if(isRecording)
   {   condition="录制";
    myLSO.data.statu[i]=player._x;
    myLSO.data.statu[i+1]=player._y;
    i+=2;
    if(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在重放过程中得到这两个指令,就可以向玩家手动控制一样,做出相应的前进和射击的反应。但是,这种方法有一个局限性,就是必须从头开始录制,因为每一个状态都是从前一状态中递推出来的。我现在只有这样一个想法,还没有来得及实现,希望大家能对此发表自己的看法。


[电脑技术]ShareObject 实现Replay功能  
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · 电脑技术  · 操作系统
    · 磁盘工具  · 视音频技术
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台