Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 28.08.2008, 16:25
darkvam вне форума Посмотреть профиль Отправить личное сообщение для darkvam Найти все сообщения от darkvam
  № 1  
Ответить с цитированием
darkvam
[+1 20.08.08]

Регистрация: Aug 2008
Сообщений: 52
По умолчанию торможение ролика по истечении времени

Здравствуйте, после некоторого количества времени проигрывания ролик начинает оочень сильно тормозить. В скриптах выполняются команды по очистке созданных мувиков, поэтому мне непонятна причина этих лагов. есть ли какая либо операция в AS2 которая позволяет "освободить память" или что-нибудь подобное этому?

Старый 28.08.2008, 17:10
MrPoma вне форума Посмотреть профиль Отправить личное сообщение для MrPoma Посетить домашнюю страницу MrPoma Найти все сообщения от MrPoma
  № 2  
Ответить с цитированием
MrPoma
 
Аватар для MrPoma

Регистрация: Jul 2006
Адрес: Питер
Сообщений: 2,083
Отправить сообщение для MrPoma с помощью Skype™
Надо код посмотреть.
__________________
жж | твттр | гглплс | фсбк | вкнткт | гтхб

Старый 28.08.2008, 18:39
chingachgoog вне форума Посмотреть профиль Найти все сообщения от chingachgoog
  № 3  
Ответить с цитированием
chingachgoog
Banned
[+4 01.02.09]
[+1 01.02.09]
 
Аватар для chingachgoog

блогер
Регистрация: Nov 2006
Адрес: Moscow
Сообщений: 2,145
Записей в блоге: 7
посмотрите поиском про протечки памяти - может поможет.

Старый 28.08.2008, 20:09
darkvam вне форума Посмотреть профиль Отправить личное сообщение для darkvam Найти все сообщения от darkvam
  № 4  
Ответить с цитированием
darkvam
[+1 20.08.08]

Регистрация: Aug 2008
Сообщений: 52
MrPoma
весь код показать? там строк 280.
вот такой тип функции меня настораживает. дело в том что для такого рода клипа не работает WITH()

Код:
_root["PlazmaShip2"+plazmanum].onEnterFrame = function()
chingachgoog
поиск не помог. там у большинства проблемы с памятью в AS3 где такая проблемма может быть решена. у мня AS2.

и сразу чтоб не создавать тему такая проблема:
Код:
attachMovie("PlazmaShipbrake", "plazmaShipbrake", this.getNextHighestDepth());
attachMovie("PlazmaShipbrake", "plazmaShipbrake2", this.getNextHighestDepth());
не создаётся два отдельных клипа, а уничтожается прошлый. в чём причина?

Старый 28.08.2008, 20:32
MrPoma вне форума Посмотреть профиль Отправить личное сообщение для MrPoma Посетить домашнюю страницу MrPoma Найти все сообщения от MrPoma
  № 5  
Ответить с цитированием
MrPoma
 
Аватар для MrPoma

Регистрация: Jul 2006
Адрес: Питер
Сообщений: 2,083
Отправить сообщение для MrPoma с помощью Skype™
Код:
_root["PlazmaShip2"+plazmanum].onEnterFrame = function()
Наверняка Вы не удаляете отработавшие onEnterFrame'ы.
__________________
жж | твттр | гглплс | фсбк | вкнткт | гтхб

Старый 28.08.2008, 20:58
darkvam вне форума Посмотреть профиль Отправить личное сообщение для darkvam Найти все сообщения от darkvam
  № 6  
Ответить с цитированием
darkvam
[+1 20.08.08]

Регистрация: Aug 2008
Сообщений: 52
MrPoma
ЭЭэ.. нет. если пуля улитает за границы экра я делаю так:
Код:
_root["PlazmaShip2"+plazmanum].removeMovieClip()
и остаюсь доволен. подскажите пожалуйста как наряду с этим уничтожить и отработавшую функцию?

Старый 29.08.2008, 02:49
dirigableNorge вне форума Посмотреть профиль Отправить личное сообщение для dirigableNorge Найти все сообщения от dirigableNorge
  № 7  
Ответить с цитированием
dirigableNorge

Регистрация: May 2008
Сообщений: 16
Самый простой способ
Код:
_root["PlazmaShip2"+plazmanum].onEnterFrame = undefined;
По поводу attachMovie - проверь трэйсом this.getNextHighestDepth() - у меня он плохо работает при многократных вызовах. Поэтому я делаю так:
Код:
var depth:Number = this.getNextHighestDepth();
attachMovie("PlazmaShipbrake", "plazmaShipbrake", depth);
depth++;
attachMovie("PlazmaShipbrake", "plazmaShipbrake2", depth);
depth++;
А не создается потому, что аттачаться мувики на одну глубину.

Старый 29.08.2008, 02:56
Molecula вне форума Посмотреть профиль Отправить личное сообщение для Molecula Найти все сообщения от Molecula
  № 8  
Ответить с цитированием
Molecula
 
Аватар для Molecula

Регистрация: Apr 2007
Сообщений: 1,369
Код:
onEnterFrame = null;
280 - это очень не много.
__________________
john

Старый 29.08.2008, 08:12
darkvam вне форума Посмотреть профиль Отправить личное сообщение для darkvam Найти все сообщения от darkvam
  № 9  
Ответить с цитированием
darkvam
[+1 20.08.08]

Регистрация: Aug 2008
Сообщений: 52
dirigableNorge
спасибо большое за помощь
Molecula
спасибо! 280 - немного. но это только начало)))

Старый 29.08.2008, 09:12
darkvam вне форума Посмотреть профиль Отправить личное сообщение для darkvam Найти все сообщения от darkvam
  № 10  
Ответить с цитированием
darkvam
[+1 20.08.08]

Регистрация: Aug 2008
Сообщений: 52
dirigableNorge
Molecula
непомогает...(((

вот код. может попробуете найти протечку. знаю код не совершенен, но делаю всё что могу...

Код:
stop();
import flash.filters.DropShadowFilter;
var dropShadowOut:DropShadowFilter = new DropShadowFilter(5, 135, 0x000000, 1, 7, 7, 1.5, 1, false);
//массив пушек для уровня
for (i=0; i<1; i++) {
	attachMovie("Gun", "gun"+i, i+100, {_x:700, _y:_root.asteroidlvl._y+2670});
}
var gunElements:Array = [gun0];
for (l=0; l<gunElements.length; l++) {
	gunElements[l].GunGround.filters = [dropShadowOut];
}
var ArrSmoke:Array = [];
//переменная глубины
depth = this.getNextHighestDepth();
//переменная времени для определения закрытия OpenMediaOption------------
w = 0;
//устанавливаем качество изображения-------------------------------------
_quality = "LOW";
//хз---------------------------------------------------------------------
timeshoot = 30;
//Звуковые файлы
var voice1:Sound = new Sound();
_global.voice1 = voice1;
_global.voice1.attachSound("voice1");
//текст для MediaTextWindow----------
m = 0;
tt2 = "Обнаружены вражеские корабли численностью в 22 единицы.";
//Скорость перезарядки орудий корабля
_global.shootreload = 10;
shootreload = 10;
//количество плазмо-пуль
plazmanum = 0;
//уровень корябля выше дыма делаем на слое 100
tank.swapDepths(100);
//масссив дыма, который будет создавать
var ArrSmoke:Array = [];
//переменная счетчик дыма, сколько создали копий
var trailNum:Number = 0;
stopping = false;
var speed = _global.speedTank;
// скорость танка
var speedRot = _global.rotationTank;
// скорость кручения
onEnterFrame = function () {
	WaitOpenMediaOption();
	MediaText();
	ramkiMoving();
	shipMoving();
	_global.speedTank = speed;
	SnegLvlMov._y -= speed*0.45*Math.sin(tank._rotation*(Math.PI/180));
	asteroidlvl._y -= speed*1.8*Math.sin(tank._rotation*(Math.PI/180));
	//Всё для пушек
	for (k=0; k<gunElements.length; k++) {
		gunElements[k]._y = _root.asteroidlvl._y+2670;
		if (tank._y<gunElements[k]._y+600) {
			_root.attachMovie("PlazmaGun", "plazmaGun", depth);
			depth++;
			_root.plazmaGun._x = gunElements[k]._x;
			_root.plazmaGun._y = gunElements[k]._y;
			_root.plazmaGun.play();
			gunElements[k].GunTower.play();
			gunElements[k].GunTower._rotation = Math.atan2(gunElements[k]._y-tank._y, gunElements[k]._x-tank._x)/(Math.PI/180);
			if (_root.plazmaGun._currentframe<5) {
				_root.plazmaGun._rotation = gunElements[k].GunTower._rotation;
			}
		}
	}
	tank._x += speed*Math.cos(tank._rotation*(Math.PI/180));
	// управление-------------------------------------;  
	//Стрельба;
	if (Key.isDown(Key.SPACE)) {
		shootreload++;
		if (shootreload>=_global.shootreload) {
			plazmanum += 1;
			_root.attachMovie("PlazmaShip", "PlazmaShip"+plazmanum, depth, {_x:tank._x, _y:tank._y});
			depth++;
			_root.attachMovie("PlazmaShip2", "PlazmaShip2"+plazmanum, depth, {_x:tank._x, _y:tank._y});
			depth++;
			_root["PlazmaShip"+plazmanum]._rotation = tank._rotation;
			_root["PlazmaShip"+plazmanum].gotoAndPlay(2);
			_root["PlazmaShip2"+plazmanum]._rotation = tank._rotation;
			_root["PlazmaShip2"+plazmanum].gotoAndPlay(2);
			_root["PlazmaShip"+plazmanum].lasttankrot = tank._rotation;
			_root["PlazmaShip2"+plazmanum].lasttankrot = tank._rotation;
			shootreload = 0;
		}
	} else {
		shootreload = 10;
	}
	//покадрово для каждой из двух пуль
	//-------------1---------------------
	_root["PlazmaShip"+plazmanum].onEnterFrame = function() {
		if (this.hitTest(gun0.GunTower)) {
			attachMovie("PlazmaShipbrake", "plazmaShipbrake", depth);
			depth++;
			plazmaShipbrake._xscale = 60;
			plazmaShipbrake._yscale = 60;
			plazmaShipbrake._x = this._x;
			plazmaShipbrake._y = this._y-10;
			plazmaShipbrake._rotation = this._rotation-180;
			plazmaShipbrake.gotoAndPlay(2);
			this.removeMovieClip();
			this.onEnterFrame = null;
		}
		if (this._currentframe<5) {
			this._rotation = tank._rotation;
			this._x = tank._x;
			this._y = tank._y;
		} else {
			this._x += 15*Math.cos(this.lasttankrot*(Math.PI/180));
			this._y += 15*Math.sin(this.lasttankrot*(Math.PI/180));
			if (this._x>1024 || this._x<0 || this._y>678 || this._y<0) {
				this._alpha = 0;
			}
			if (this._x>1524 || this._x<-500 || this._y>1178 || this._y<-500) {
				this.removeMovieClip();
				this.onEnterFrame = null;
			}
		}
	};
	//----------------2--------------------
	_root["PlazmaShip2"+plazmanum].onEnterFrame = function() {
		if (this.hitTest(gun0.GunTower)) {
			attachMovie("PlazmaShipbrake", "plazmaShipbrake2", depth);
			depth++;
			plazmaShipbrake2._xscale = 60;
			plazmaShipbrake2._yscale = 60;
			plazmaShipbrake2._x = this._x;
			plazmaShipbrake2._y = this._y+10;
			plazmaShipbrake2._rotation = this._rotation-180;
			plazmaShipbrake2.gotoAndPlay(2);
			this.removeMovieClip();
			this.onEnterFrame = null;
		}
		if (this._currentframe<5) {
			this._rotation = tank._rotation;
			this._x = tank._x;
			this._y = tank._y;
		} else {
			this._x += 15*Math.cos(this.lasttankrot*(Math.PI/180));
			this._y += 15*Math.sin(this.lasttankrot*(Math.PI/180));
			if (this._x>1024 || this._x<0 || this._y>678 || this._y<0) {
				this._alpha = 0;
			}
			if (this._x>1524 || this._x<-500 || this._y>1178 || this._y<-500) {
				this.removeMovieClip();
				this.onEnterFrame = null;
			}
		}
	};
	//------------------------------------------------------------------------------
	//влево танк;                                                                                              
	if ((Key.isDown(65)) || (Key.isDown(37))) {
		_global.speedTank = _global.speedTank-4;
		tank._rotation -= speedRot;
	}
	if ((Key.isDown(68)) || (Key.isDown(39))) {
		// вправо;
		_global.speedTank = _global.speedTank-4;
		tank._rotation += speedRot;
	}
	if ((Key.isDown(87)) || (Key.isDown(38))) {
		// впепед;
		if (tank._currentframe == 1) {
			tank.gotoAndPlay(2);
		}
		stopping = false;
		if (speed<4) {
			speed += 0.1;
		}
		if (speedRot>4) {
			speedRot -= 0.5;
		}
		tank._x += speed*Math.cos(tank._rotation*(Math.PI/180));
	} else {
		if (tank._currentframe == 20) {
			tank.gotoAndPlay(21);
		}
		if (speed != 0.5) {
			stopping = true;
		}
	}
	if ((Key.isDown(83)) || (Key.isDown(40))) {
		// назад;
		if (speed>0.5) {
			speed -= 0.1;
		}
		if (speedRot<6) {
			speedRot += 0.5;
		}
	}
	if (stopping == true) {
		if (speed>0.5) {
			speed -= 0.05;
			if (speedRot<6) {
				speedRot += 0.5;
			}
			tank._x += speed*Math.cos(tank._rotation*(Math.PI/180));
		}
	}
};
_global.speedTank = speed;
function ramkiMoving() {
	//выставляем рамки движения и динамическую камеру
	//динамо камера
	if (tank._rotation>=0 && tank._rotation<=180) {
		if (tank._y>200) {
			tank._y -= speed;
			SnegLvlMov._y -= speed/4;
			asteroidlvl._y -= speed;
			for (var i = ArrSmoke.length-1; i>=0; i--) {
				ArrSmoke[i]._y -= Math.sin(tank._rotation*(Math.PI/180))+speed;
			}
		}
	} else {
		if (tank._y<500) {
			tank._y += speed;
			SnegLvlMov._y += speed/4;
			asteroidlvl._y += speed;
			for (var i = ArrSmoke.length-1; i>=0; i--) {
				ArrSmoke[i]._y += Math.sin(tank._rotation*(Math.PI/180))+speed;
			}
		}
	}
	//Рамки по иксу   
	if (tank._x<=50) {
		if (tank._rotation>=0 && tank._rotation<=180) {
			tank._x = 494.5;
			tank._y = 200;
		} else {
			tank._x = 494.5;
			tank._y = 500;
		}
	}
	if (tank._x>=974) {
		if (tank._rotation>=0 && tank._rotation<=180) {
			tank._x = 494.5;
			tank._y = 200;
		} else {
			tank._x = 494.5;
			tank._y = 500;
		}
	}
}
function shipMoving() {
	//добавляем новые копии дыма в массив
	ArrSmoke.push(smoke.duplicateMovieClip("smoke"+trailNum, trailNum));
	//устанавливает координаты корабля для дыма
	_root["smoke"+trailNum]._x = tank._x;
	_root["smoke"+trailNum]._y = tank._y;
	_root["smoke"+trailNum]._rotation = tank._rotation;
	//увеличиваем счетчик
	trailNum++;
	//если ставить очень большое число, до будет тормрзить движение
	if (trailNum>10) {
		trailNum = 0;
	}
	//смотрим на массив с конца                                                                                                                                                                                                                                                                     
	for (var i = ArrSmoke.length-1; i>=0; i--) {
		//уменьшаем прозрачность и увеличиваем копии дыма
		ArrSmoke[i]._y -= speed*1.8*Math.sin(tank._rotation*(Math.PI/180));
		ArrSmoke[i]._alpha -= speed*4;
		ArrSmoke[i]._xscale += speed;
		ArrSmoke[i]._yscale += speed;
		//если дым невидим удаляем из массива и удаляем клип
		if (ArrSmoke[i]._alpha<=0) {
			ArrSmoke.splice(0, 1);
			ArrSmoke[i].removeMovieClip();
			//trace(trailNum);
		}
	}
}
//Функция для текстовых предупреждений для окна MediaTextWindow-----------------------
function MediaText() {
	//*****печатная машинка****
	if (_root.MediaTextWindow._currentFrame == 42) {
		m++;
		_root.MediaTextWindow.MediaWindowText.text = substring(tt2, 0, m/2)+"_";
		if (m == 1) {
			_global.voice1.start();
		}
	}
	//*****печатная машинка****                                                                         
}
//Функция проверки времени до автоматического закрытия OpenMediaOption----------------
function WaitOpenMediaOption() {
	if (_root.OpenMediaOption._currentFrame == 35) {
		if (!_root.OpenMediaOption.hitTest(_root.mouse)) {
			w++;
			if (w == 50) {
				_root.OpenMediaOption.play();
			}
		} else {
			w = 0;
		}
	}
}

Создать новую тему Ответ Часовой пояс GMT +4, время: 10:24.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 10:24.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.