先声明一下,那程序作者可不是我,呵呵我把大致的内容贴出来吧
使用的是自创的的“交点法寻径”,在js上表现不错,可以一次性给十几个单位寻径;在as中不行,只能给一个单位寻径,距离远了还很慢,可见js的运算效率是高于as的现在改用flash开发星际online后,遇到了与js同样的问题,在多人同时移动时速度成几何级下降。这就是用脚本开发此类游戏的最大问题,cpu占用率奇高,其实cpu只用一小部分用于脚本的运算,大部分资源都消耗在图形的绘制上了,这个问题很难解决也很难回避啊本来以为flash表现会好些,还是一样,郁闷死了,没有心情再扩展游戏功能了。如果哪位兄台有这方面的好方法,可一定得告诉我一声哦
我这几天也在反思这个问题,并做了些试验1.在flash中,平缓移动一张800*600的大位图,cpu占用率立刻升到100%,而在js中,只会升到60%左右2.如果位图移动出屏幕之外,两者cpu占用率很快降到5%以内以下的试验只针对js:3.如果该位图是普通彩图,cpu占用率如上所述有60%左右;而如果该位图为纯黑块,cpu占用率只有5%以下,可见cpu占用率和图片色彩或图片复杂度有绝对关联4.多个位图同时移动,即使位图都很小(10*10以下),cpu占用率也会大幅增加。所以窗口重绘cpu占有率与重绘数量也有很大关系。结论是:不管在js中还是在flash中,都需要合理分配动画,尽量不移动大背景,避免同时移动多个物体,使用卡通图形减少图片复杂程度,减小显示区尺寸,都可以有效降低cpu占用率,保证动画的流畅程度只是这个结论也决定了,用脚本做星际,虽然编程方法已经实现,但是我们还必须在以下方法中选择:要不大大减小显示区尺寸,要不使用activex控件,要不干脆等到html支持directx加速的那一天

解决方案 »

  1.   

    想看看造成瓶颈的代码,帖出来大家想想有没有更快的实现。flash试过了,applet试过没有呢?
      

  2.   


    -----最新推出:星际争霸online-----
    http://starcraft.51ym.com/sc/-----JS游戏开发基地-----
    http://starcraft.51ym.com/home/星际争霸online源代码(希望大家尊重幻宇的劳动成果)
    http://starcraft.51ym.com/download/jssc_online.rar
      

  3.   

    js的运算效率是高于asp?你是想说js脚本比vbs脚本速度快吧?
    不可能!
    是你的代码没写好而已。差别最大的就是数组,你用循环写10万长度的数组测试一下,vbs比js快n百倍
      

  4.   

    以下是关于幻宇今天在无忧的发贴奉劝大家在关键运算处,千万不要使用类,js星际最大失败之处在于此偶然做了个实验,结果另人大吃一惊,终于揭开了js星际效率低下的内幕,根本原因就是因为使用了类!!!以下是循环20000次的使用点类赋值的代码,顺便说一下,点类是一个较简单的类
    <script>
    var d=new Date(),d1=d.valueOf()
    var a=new Array(),p=new pt()
    for(i=0;i<20000;i++){
        //a.x=3
        //a.y=4
        p.setv("3,2")
    }
    var d=new Date(),d2=d.valueOf()
    alert("使用点类赋值,耗时"+(d2-d1)+"ms")function pt(x,y){
        this.setv=function(x,y){
            if(y!=null){
                this.x=parseInt(x)
                this.y=parseInt(y)
            }
            else{
                var a=x.split(",")
                this.x=parseInt(a[0])
                this.y=parseInt(a[1])
            }
            this.v=this.x+","+this.y
        }
        if(x!=null)
            this.setv(x,y)
    }</script>作为比效,这是普通数组赋值,达到同样功能的代码
    <script>
    var d=new Date(),d1=d.valueOf()
    var a=new Array(),p=new pt()
    for(i=0;i<20000;i++){
        a.x=3
        a.y=4
        //p.setv(3,2)
    }
    var d=new Date(),d2=d.valueOf()
    alert("使用数组赋值,耗时"+(d2-d1)+"ms")function pt(x,y){
        this.setv=function(x,y){
            if(y!=null){
                this.x=parseInt(x)
                this.y=parseInt(y)
            }
            else{
                var a=x.split(",")
                this.x=parseInt(a[0])
                this.y=parseInt(a[1])
            }
            this.v=this.x+","+this.y
        }
        if(x!=null)
            this.setv(x,y)
    }</script>
    看到了吧,同样的功能,使用类耗时巨大
      

  5.   

    http://www.adr.gov.cn/download/panyuguang/xq/vml.asp人生,是大写的,签字,呜,嗷,UP!~~~~~        ___               __      __       
           / __ \   __    __ /\ \    /\ \          
          / /_/\ \ /\ \  /\ \\ \ \   \ \ \   
         /\ \ \ \ \\ \ \ \ \ \\ \ \   \ \ \ 
         \ \ \_\_\ \\ \ \_\_\ \\ \ \___\ \ \___
          \ \_______\\ \_______\\ \____\\ \____       \/_______/ \/_______/ \/____/ \/____/
               __    ___ ____            __      ________
              /\ \  |\ \|   _\  _______ /\ \    /\  _____          \ \ \ \|  \\\ \/ /\  ___ \\ \ \   \ \  \___/_
               \ \ \ |   \\\ \ \ \ \_/\ \\ \ \   \ \   ____\ 
                \ \ \| |\ \/  \ \ \ \\_\ \\ \ \__ \ \  \___/      
                 \ \___|\\___/|  \ \______\\ \____\\ \___\           
                  \|___| |___|/   \/______/ \/____/ \/___/       
                  
      

  6.   

    http://220.134.133.114/operation_studio/studiogame.html 
      

  7.   

    xvlv(xvlv) ( ) 兄,以后贴代码的时候要检查一下!你那两段比较的程序怎么是一模一样的啊??还是我太外行了?