Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flash/AS2:向下滚动越远,应用程序速度越慢_Flash_Actionscript_Actionscript 2 - Fatal编程技术网

Flash/AS2:向下滚动越远,应用程序速度越慢

Flash/AS2:向下滚动越远,应用程序速度越慢,flash,actionscript,actionscript-2,Flash,Actionscript,Actionscript 2,我在flash中构建了一个应用程序,它是一个运行非常平稳的大型应用程序,但是它是一个比应用程序窗口运行得更远的图形列表,所以我使用垂直滚动条和遮罩来显示它们 问题是你向下滚动的越远,所有的东西都会变得不稳定,任何二者之间的移动和帧速率都会降低很多 当你到达底部时,它是无法忍受的,尽管在整个卷轴中有相同数量的电影唇和相同数量的细节,所以我不明白为什么会有如此巨大的性能下降了一点 有人知道是什么导致了这一切吗 根据要求,以下是我构建图表的代码部分: var local_data = SharedOb

我在flash中构建了一个应用程序,它是一个运行非常平稳的大型应用程序,但是它是一个比应用程序窗口运行得更远的图形列表,所以我使用垂直滚动条和遮罩来显示它们

问题是你向下滚动的越远,所有的东西都会变得不稳定,任何二者之间的移动和帧速率都会降低很多

当你到达底部时,它是无法忍受的,尽管在整个卷轴中有相同数量的电影唇和相同数量的细节,所以我不明白为什么会有如此巨大的性能下降了一点

有人知道是什么导致了这一切吗

根据要求,以下是我构建图表的代码部分:

var local_data = SharedObject.getLocal("user_data");
Slide_Tracker = local_data.data.user_data;
var timespan:MovieClip = this.timescale.span;
for (i=0; i<Slide_Tracker.length; i++) {
    var current_date = new Date(Slide_Tracker[i].date_int);
    var date_int:Number = Slide_Tracker[i].date_int;
    var x_range:Number = 30;
    var sorted_date:Object = new Object(sortDate(Slide_Tracker[i].date_int));
    var date_string:String = sorted_date.string;
    var startX:Number = 0;
    date_nav.push(Slide_Tracker[i].date_int);
    if (i == 0) {
        for (s=0; s<Graphs.length; s++) {
            var Chart:MovieClip = Graphs[s].chartArea.createEmptyMovieClip("chart", 10);
            Chart._x = 0;
            Chart._y = 0;
            Charts.push(Chart);
            Chart._parent.dotSpace.index = s;
            Chart._parent.dotSpace.onRollOver = function() {
                this.followDot._visible = true;
                this.followDot.enabled = false;
                this.onMouseMove = function() {
                    if(this._parent.chart.viewPortRatio == undefined) {
                        var viewPortRatio:Number = 1;
                    }
                    else {
                        var viewPortRatio:Number = this._parent.chart.viewPortRatio;
                    }
                    var xMouse:Number = this._xmouse;
                    var xToArray:Number = Math.round(((xMouse-this._parent.chart._x)*viewPortRatio));
                    this.followDot._y = lineArray[this.index][xToArray].y;
                    trace(xToArray);
                    this.followDot._x = xMouse;
                };
            };
            Chart._parent.dotSpace.onRollOut = function() {
                this.followDot._visible = false;
                delete this.onMouseMove;
            };
        }
    } else if (i>0) {
        var past_date:Date = new Date(Slide_Tracker[i-1].date_int);
        var date_diff:Number = Math.round((current_date-past_date)/86400000);
    }
    for (s=0; s<Slide_Tracker[i].val_arr.length; s++) {
        var Slide_y:Number = 100-Slide_Tracker[i].val_arr[s];
        var Chart:MovieClip = Graphs[s].chartArea.chart;
        with (Chart) {
            beginFill(0x000066,15);
            lineStyle(2,0x000066,80);
            if (i == 0) {
                moveTo(startX,Slide_y);
                Xcoords[s].push(startX);
                Ycoords[s].push(Slide_y);
            } else if (i>0) {
                var index:Number = Xcoords[s].length-1;
                var prevX:Number = Xcoords[s][index];
                var prevY:Number = Ycoords[s][index];
                moveTo(prevX,prevY);
                var newX:Number = prevX+(date_diff*(895.9/x_range));
                var newY:Number = Slide_y;
                lineTo(newX,newY);
                lineStyle(6,0x000066,0);
                lineTo(newX,100);
                lineTo(prevX,100);
                lineTo(prevX,prevY);
                convertLineToArray(s,prevX,newX,prevY,newY);
                Xcoords[s].push(newX);
                Ycoords[s].push(newY);
            }
            endFill();
            lineStyle(0,0x000066,80);
            with (Graphs[s].chartArea.timescale.span) {
                var barName:String = Slide_Tracker[i].date_int;
                var thisBar:MovieClip = attachMovie("bar", barName, this.getNextHighestDepth()+i);
                if (Slide_y != 100) {
                    var barY:Number = 100-Slide_y;
                } else {
                    var barY:Number = 0;
                }
                if (i == 0) {
                    thisBar._x = 1;
                    thisbar._height = barY/4;
                    spanXcoords[s].push(1);
                    spanYcoords[s].push(barY/4);
                } else if (i>0) {
                    var index:Number = spanXcoords[s].length-1;
                    var spanPrevX:Number = spanXcoords[s][index];
                    var spanPrevY:Number = spanYcoords[s][index];
                    var spanNewX:Number = spanPrevX+(date_diff*3);
                    var spanNewY:Number = barY/4;
                    thisBar._x = spanNewX;
                    thisBar._height = barY/4;
                    spanXcoords[s].push(spanNewX);
                    spanYcoords[s].push(spanNewY);
                }
                thisBar._y += 25;
                selector_bars[s].push(thisBar);
            }
        }
        Chart.setMask(Chart._parent.chart_mask);
        var dot_name:String = new String(Graphs[s]._name+"_dot"+i);
        var dotObj:Object = new Object();
        if (prevX != undefined) {
            dotObj._x = newX;
        } else {
            dotObj._x = startX;
        }
        dotObj._y = Slide_y;
        Chart._parent.dotArea.attachMovie("graph_dot",dot_name,Graphs[s].chartArea.dotArea.getNextHighestDepth(),dotObj);
        Chart._parent.dotArea.swapDepths(99999);
        var thisDot:MovieClip = eval(Graphs[s]+".chartArea.dotArea."+dot_name);
        Graphs_dots[s].push(thisDot);
        thisDot.date_string = date_string;
        thisDot.date_int = date_int;
        thisDot.percent = Slide_Tracker[i].val_arr[s];
        thisDot.onRollOver = function() {
            this.gotoAndStop("over");
            var dot_Coords:Object = {x:this._x, y:this._y};
            var viewPortRatio:Number = this._parent._parent.chart.viewPortRatio;
            var offsetX:Number = this._parent._parent.chart.offsetX;
            if (viewPortRatio == undefined) {
                viewPortRatio = 1;
            }
            if (offsetX == undefined) {
                offsetX = 0;
            }
            var text_x:Number = (dot_Coords.x/viewPortRatio)+offsetX;
            var text_y:Number = dot_Coords.y;
            if (dot_Coords.y<50) {
                text_y += 60;
            } else {
                text_y -= 20;
            }
            var Textbox:Object = {name:"dot_info", container:this._parent._parent._parent, x:text_x, y:text_y, text:this.date_string+"\n"+this.percent+"%"};
            var dotText:TextField = generateTextbox(Textbox);
            if (dotText._x>448) {
                dotText._x -= dotText._width;
            }


        };
        thisDot.onRollOut = thisDot.onReleaseOutside=function () {
            this.gotoAndStop("norm");
            killTxt(this._parent._parent._parent.dot_info);
            delete dot_Coords;
        };

    }
    chartsWidth = Chart._width;
}
var local_data=SharedObject.getLocal(“用户_数据”);
Slide_Tracker=本地_data.data.user_数据;
var timespan:MovieClip=this.timescale.span;
对于(i=0;i0){
变量索引:Number=spanXcoords[s]。长度-1;
var spanPrevX:Number=spanXcoords[s][index];
var spanPrevY:Number=spanYcoords[s][index];
变量span wx:Number=spanPrevX+(日期差异*3);
var SPANWY:编号=barY/4;
此杆。_x=扳手wx;
该杆的高度=barY/4;
spanXcoords[s]。推送(Spanwx);
spanYcoords[s]。推送(Spanwy);
}
该条_y+=25;
选择器_条[s]。推动(此条);
}
}
图表.设置掩码(图表.父.图表.掩码);
var dot_name:String=新字符串(图[s]。_name+“_dot”+i);
var dotObj:Object=新对象();
if(prevX!=未定义){
dotObj._x=newX;
}否则{
dotObj._x=startX;
}
dotObj._y=幻灯片_y;
Chart.\u parent.dotArea.attachMovie(“graph\u dot”,dot\u名称,Graphs[s].chartArea.dotArea.getNextHighestDepth(),dotObj);
图表_parent.dotArea.swapDepths(99999);
var thisDot:MovieClip=eval(图[s]+.chartArea.dotArea.+dot_名称);
图点[s]。推送(此点);
thisDot.date\u字符串=日期\u字符串;
thisDot.date\u int=date\u int;
thisDot.percent=Slide_Tracker[i].val_arr[s];
thisDot.onRollOver=函数(){
这个。停止(“结束”);
var dot_Coords:Object={x:this.\ux,y:this.\uy};
var viewPortRatio:Number=this.\u parent.\u parent.chart.viewPortRatio;
var offsetX:Number=此。_parent._parent.chart.offsetX;
如果(viewPortRatio==未定义){
视窗比率=1;
}
if(offsetX==未定义){
offsetX=0;
}
var text_x:Number=(dot_Coords.x/viewPortRatio)+offsetX;
变量text_y:Number=dot_Coords.y;
如果(dot_Coords.y448){
点文本。_x-=点文本。_宽度;
}
};
thisDot.onRollOut=thisDot.onReleaseOutside=函数(){
本节为“gotoAndStop”(“norm”);
killTxt(this.\u parent.\u parent.\u parent.dot\u info);
删除点坐标;
};
}
图表宽度=图表宽度;
}
这是我的滚动条代码:

scrolling = function () { 
var scrollHeight:Number = scrollTrack._height - btnUp._height - btnDown._height; 
var contentHeight:Number = contentMain._height; 
var scrollFaceHeight:Number = scrollFace._height; 
var maskHeight:Number = maskedView._height; 
var initPosition:Number = scrollFace._y=scrollTrack._y + btnUp._height; 
var initContentPos:Number = contentMain._y; 
var finalContentPos:Number = maskHeight-contentHeight+initContentPos; 
var left:Number = scrollTrack._x + (scrollTrack._width - scrollFace._width)/2.4; 
var top:Number = scrollTrack._y + btnUp._height; 
var right:Number = scrollTrack._x + (scrollTrack._width - scrollFace._width)/2.4; 
var bottom:Number = (scrollTrack._height-scrollFaceHeight+scrollTrack._y) - btnDown._height; 
var dy:Number = 0; 
var speed:Number = 10; 
var moveVal:Number = (contentHeight-maskHeight)/(scrollHeight-scrollFaceHeight); 

scrollFace.onPress = function() { 
var currPos:Number = this._y; 
startDrag(this, false, left, top, right, bottom); 
this.onMouseMove = function() { 
dy = Math.abs(initPosition-this._y); 
contentMain._y = Math.round(dy*-1*moveVal+initContentPos);
};
}; 
scrollFace.onMouseUp = function() { 
stopDrag(); 
delete this.onMouseMove;
}; 
btnUp.onPress = function() { 
this.onEnterFrame = function() { 
if (contentMain._y+speed<maskedView._y) { 
if (scrollFace._y<=top) { 
scrollFace._y = top;
} else { 
scrollFace._y -= speed/moveVal;
} 
contentMain._y += speed;
} else { 
scrollFace._y = top; 
contentMain._y = maskedView._y; 
delete this.onEnterFrame;
}
};
}; 
btnUp.onDragOut = function() { 
delete this.onEnterFrame;
}; 
btnUp.onRollOut = function() { 
delete this.onEnterFrame;
}; 
btnDown.onPress = function() { 
this.onEnterFrame = function() { 
if (contentMain._y-speed>finalContentPos) { 
if (scrollFace._y>=bottom) { 
scrollFace._y = bottom;
} else { 
scrollFace._y += speed/moveVal;
} 
contentMain._y -= speed;
} else { 
scrollFace._y = bottom; 
contentMain._y = finalContentPos; 
delete this.onEnterFrame;
}
};
}; 
btnDown.onRelease = function() { 
delete this.onEnterFrame;
}; 
btnDown.onDragOut = function() { 
delete this.onEnterFrame;
}; 
var mouseListener = new Object();
mouseListener.onMouseWheel = function( wheelMotion )
{
if (wheelMotion < 0) {
if (contentMain._y-speed>finalContentPos) { 
if (scrollFace._y>=bottom) { 
scrollFace._y = bottom;
} else { scrollFace._y += speed/moveVal;
} 
contentMain._y -= speed;
} else { 
scrollFace._y = bottom; 
contentMain._y = finalContentPos; 
}
}
if (wheelMotion > 0) {
if (contentMain._y+speed<maskedView._y) { 
if (scrollFace._y<=top) { 
scrollFace._y = top;
} else { 
scrollFace._y -= speed/moveVal;
} 
contentMain._y += speed;
} else { 
scrollFace._y = top; 
contentMain._y = maskedView._y; 
}
}
}

Mouse.addListener( mouseListener );



if (contentHeight<maskHeight) { 
scrollFace._visible = false; 
btnUp.enabled = false; 
btnDown.enabled = false;
btnUp.gotoAndStop(2);
btnDown.gotoAndStop(2);
} else { 
scrollFace._visible = true; 
btnUp.enabled = true; 
btnDown.enabled = true;
btnUp.gotoAndStop(1);
btnDown.gotoAndStop(1);
}
}; 
scrolling();
scrolling=function(){
变量scrollHeight:Number=scrollTrack.\u height-btnUp.\u height-btnDown.\u height;
变量contentHeight:Number=contentMain.\u高度;
变量scrollFaceHeight:Number=scrollFace.\u高度;
var maskHeight:编号=maskedView.\u高度;
变量initPosition:Number=滚动面。_y=滚动轨迹。_y+btnUp._高度;
var initContentPos:Number=contentMain.\u y;
var finalContentPos:Number=maskHeight contentHeight+initContentPos;
变量left:Number=scrollTrack.x+(scrollTrack.width-scrollFace.width)/2.4;
变量顶部:数字=滚动轨迹。_y+btnUp。_高度;
右侧变量:数字=滚动轨迹。x+(滚动轨迹。width-滚动面。width)/2.4;
变量底部:数字=(scrollTrack.\u高度-scrollFaceHeight+scrollTrack.\u y)-btnDown.\u高度;
变量dy:Number=0;
var速度:数字=10;
var moveVal:Number=(contentHeight maskHeight)/(scrollHeight scrollFaceHeight);
scrollFace.onPress=函数(){
var currPos:Number=此项;
startDrag(此、假、左、上、右、下);
this.onMouseMove=函数(){
dy=Math.abs(初始位置为该值);
contentMain._y=Math.round(dy*-1*moveVal+initContentPos);
};
}; 
scrollFace.onMouseUp=函数(){
停止拖动();
删除此.onMouseMove;
}; 
btnUp.onPress=函数(){
this.onEnterFrame=函数(){
如果(contentMain._y+速度=底部){
滚动面。_y=底部;
}否则{
滚动面。_y+=速度/移动值;
} 
contentMain._y-=速度;
}否则{
滚动面。_y=底部;
contentMain.\u y=最终内容;
删除此.onEnterFrame;
}
};
}; 
btnDown.onRelease=函数(){
删除此.onEnterFrame;
}; 
btnDown.onDragOut=函数(){
删除此.onEnterFrame;
}; 
var mouseListener=新对象();
mouseListener.onMouseWheel=功能(车轮运动)
{
if(车轮运动<0){
如果(contentMain.\u y-speed>finalContentPos){
如果(滚动面._y>=底部){
滚动面。_y=底部;
}else{scrollFace._y+=速度/移动值;
} 
contentMain._y-=速度;
}否则{
滚动面。_y=底部;
contentMain.\u y=最终内容;
}
}
如果(车轮运动>0){

如果(contentMain._y+speed我今天解决了这个问题,这真是一种解脱,我刚刚遇到了
scrollRect()
函数,它只渲染在其边界内可查看的数据,只要它是位图缓存的(无论是否可查看,向量对象仍将完全渲染)

尽管我允许用户修改图形的_scaleX并将其缓存为位图,但现在我仍然看到,自从使用可滚动矩形替换遮罩以来,性能得到了绝对巨大的提高,因为在获得足够的数据后,这些图形的宽度超过20000。尽管它们的大小巨大,但一切都可以流畅地工作