![]() |
|
||||||||||
|
|||||
|
Народ, я написал флеш-программу, но она ооочень жрет проц. мощь, так вот, может быть есть метод, узнать в какой момент какие переменные засоряют процессор, что-б оптимизировать код.
Спасибо... З.Ы. исходник не буду выстовлять, т.к. никто не обязан разбираться в моем бордаке, а вот сам swf на всякий, пожарный :-)
__________________
The truth is out there... |
|
|||||
|
коментируешь часть кода и смотришь на загрузку процессора
![]() |
|
|||||
|
и все?
![]()
__________________
The truth is out there... |
|
|||||
|
Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
|
как посоветовать способ оптимизации кода, не имея его?
есть базовые принципы, но их описание - довольно большой объем инфы. нужно смотреть на конкретный код, чтобы дать конкретные советы. |
|
|||||
|
Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
|
добрый ты.
дал бы еще ссылку на твою файловую систему - нет таких прав говорит |
|
|||||
|
Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
|
а.. нет
ссылка была с пробелом удалил пробел, скачалось. |
|
|||||
|
Наверное можно еще что нибудь выжать.
но я старался ![]() |
|
|||||
|
Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
|
да, на этот раз полегчало, но даже если убрать один из обходов:
for (var i = 1; i<=col; i++) {
for (var j = 1; j<=col; j++) {
var sx, sy, mc, mc2;
mc = field['p'+i+' '+j];
mc.sx = mc.sy=0;
if (mc.left) {
mc2=mc.left
sx = (mc._x-mc2._x+dist)/frict;
sy = (mc._y-mc2._y)/frict;
mc.sx += sx;
mc2.sx -= sx;
mc.sy += sy;
mc2.sy -= sy;
}
if (mc.top) {
mc2=mc.top
sx = (mc._x-mc2._x)/frict;
sy = (mc._y-mc2._y+dist)/frict;
mc.sx += sx;
mc2.sx -= sx;
mc.sy += sy;
mc2.sy -= sy;
}
}
}
// */
for (var i = 1; i<=col; i++) {
for (var j = 1; j<=col; j++) {
mc = field['p'+i+' '+j];
if (!mc.dragged) {
mc._x -= mc.sx;
mc._y -= mc.sy;
}
}
}
// */
field.clear();
field.lineStyle(1, 0, 100);
for (var i = 1; i<=col; i++) {
var mc = field['p'+i+' 1'];
field.moveTo(mc._x, mc._y);
while (mc) {
field.lineTo(mc._x, mc._y);
mc = mc.bottom;
}
var mc = field['p1 '+i];
field.moveTo(mc._x, mc._y);
while (mc) {
field.lineTo(mc._x, mc._y);
mc = mc.right;
}
}
смысл в том, что все эти переходы по кадрам - вчерашний день. И не юзабельны и оч трудно читаются. Я на твоем месте сделал бы класс, тогда все быстро встает на свои места. Не совсем то, что тебе нужно, потому как вникать в детали поведения твоего исходника влом, (ну нетрезв.. прости ), но принцип, думаю, будет понятен:
#initclip
this.setPointClass = function() {
var PointClass = function () {
arguments.callee.addListener(this);
if (PointClass._listeners[0] == this) {
this.first = true;
}
};
var tmp = PointClass.prototype=new MovieClip();
var centerPoint = {_x:0, _y:0};
tmp.onLoad = function() {
if (this.first) {
centerPoint._x = centerPoint._y=0;
this.onMessage("onCalcCenter", centerPoint);
}
this.x=this._x-centerPoint._x, this.y=this._y-centerPoint._y;
var d = Math.sqrt(this.x*this.x+this.y*this.y);
this.fric = .1-d/1000;
};
Object.registerClass("point_mc", PointClass);
AsBroadcaster.initialize(PointClass);
tmp.onMessage = function() {
PointClass.broadcastMessage.apply(PointClass, arguments);
};
tmp.onPress = function() {
this.onEnterFrame = this.recalcCenterPoint;
var p = this._parent, x, y;
this.onMouseMove = function() {
x=this._x=p._xmouse, y=this._y=p._ymouse;
this.onMessage("onChangeTarget", x-this.x, y-this.y), updateAfterEvent();
};
this.onMouseUp = function() {
this.recalcCenterPoint();
this.onMessage("onChangeTarget", x+this.x, y+this.y);
delete this.onMouseMove, delete this.onMouseUp, delete this.onEnterFrame;
};
};
tmp.recalcCenterPoint = function() {
centerPoint._x = centerPoint._y=0;
this.onMessage("onCalcCenter", centerPoint);
};
tmp.onCalcCenter = function(pt) {
var len = PointClass._listeners.length;
pt._x += this._x/len, pt._y += this._y/len;
};
tmp.onChangeTarget = function(x, y) {
this.xt=x-this.x, this.yt=y-this.y;
};
tmp.onEnterFrame = function() {
var x = centerPoint._x+this.x, y = centerPoint._y+this.y;
this._x += this.xst += (x-this._x)*this.fric, this._y += this.yst += (y-this._y)*this.fric;
this.xst *= .8, this.yst *= .8;
if (PointClass._listeners[0] == this) {
recalcCenterPoint;
}
};
var rm = MovieClip.prototype.removeMovieClip;
tmp.removeMovieClip = function() {
PointClass.removeListener(this), rm.apply(this);
};
};
this.setPointClass();
delete this.setPointClass;
#endinitclip
эээ ... залинкуй point_mc и накидай их на сцену несколько штук... не важно куда а код пихни в этот point_mc. всех благафф |
|
|||||
|
Код изначально не мой был...
так что я постарался оставить стиль автора ведь задача оптимизировать, а не написать красиво про первый цикл действительно тормознул. он совершенно не нужен.. ну а в остальном... мне кажется если заставить точки думать "за себя" то это будет конечно 'красивше'... но почти наверняка медленнее. Это как С++ и С. Конечно, гораздо приятнее делать код объектно ориентированным. Но если ты хочешь что бы код работал быстро про С++ можно забыть. В данном случае, например, в лучае точки-объекта придется просчитать для каждой точки все 4 связи. А если это делать в цикле по порядку то достаточно просчитывать только две связи из-за симетрии Но вообще интересно попробовать.. омжет действительно быстрее будет? |
![]() |
Часовой пояс GMT +4, время: 21:58. |
|
|
« Предыдущая тема | Следующая тема » |
|
|