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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 30.10.2010, 07:23
medvedya2 вне форума Посмотреть профиль Отправить личное сообщение для medvedya2 Найти все сообщения от medvedya2
  № 1  
Ответить с цитированием
medvedya2

Регистрация: Mar 2010
Сообщений: 128
По умолчанию После срабатывания gc, ENTER_FRAME некорректно работает

У меня в приложение память потихоньку растет наступает определённый момент и gc срабатывает и очищает всю память, если перед моментом срабатывание gc происходят сложные много занимающие в памяти процессы то после gc ENTER_FRAME ведет себя некорректно работает в 2 раз реже, FPS(50) не падает, Wmode=gpu , проверял на 3 компьютерах, уже 3 день бьюсь над это проблемой.
Если не указать Wmode=gpu или Wmode=derect то ENTER_FRAME всегда работает мелено
Код AS3:
package 
{
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.events.TimerEvent;
	import flash.geom.Matrix;
	import flash.geom.Rectangle;
	import flash.utils.Timer;
 
 
 
 
 
 
	public class GameScreen extends Sprite
	{
		public static var monsters:Sprite = new Sprite; 
		public static var buildings:Sprite = new Sprite;
		public static var corpsesData:BitmapData = new BitmapData(Config.mapSizeX,Config.mapSizeY ,true,0);;
		public static var corpses:Bitmap= new Bitmap(corpsesData);
		public static var mBitmapData:BitmapData= new BitmapData(Config.mapSizeX,Config.mapSizeY);
		public static var mBitmap:Bitmap= new Bitmap(mBitmapData);
		public static var background:Sprite = new Sprite();
		public static var backgroundUp:Sprite = new Sprite();
		public static var mines:Sprite= new Sprite();
		public static var turrets:Sprite = new Sprite();
		public static var ofhs:Sprite = new Sprite();
		public static var pointForBot:Img_pointForBot = new Img_pointForBot;
		public static var corpsesBot:Sprite= new Sprite;
		private var tick:int;
		private var xForB:uint;
		private var yForB:uint;
		private var cForB:uint;
		public static var recForClean:Rectangle = new Rectangle(0,0,Config.mapSizeX,Config.mapSizeY);
		public static var nextLevel:Sprite= new Sprite;
		private var testmc:Sprite= new Sprite;
		private var matrix:Matrix = new Matrix;
		public function GameScreen()
		{
 
		}
		public function start():void
		{
			this.addEventListener(Event.ENTER_FRAME,onFrame);
			this.addChild(background);
			this.addChild(backgroundUp);
			this.addChild(corpses);
			this.addChild(corpsesBot);
			this.addChild(mines);
			this.addChild(turrets);
			this.addChild(Repository.hero);
			this.addChild(ofhs);
			this.addChild(mBitmap);
			this.addChild(buildings);
			buildings.mouseChildren=false;
			buildings.mouseEnabled=false;
			buildings.cacheAsBitmap=true;
			this.addEventListener(MouseEvent.MOUSE_DOWN,KeyboardControl.onMouseDown);
			this.addEventListener(MouseEvent.MOUSE_UP,KeyboardControl.onMouseUP);
			this.addChild(testmc);
			this.addChild(pointForBot);
			this.addChild(nextLevel);
			pointForBot.visible=false;
			//mBitmapData.fillRect(recForClean,0);
 
		}
		private function onFrame(e:Event):void
		{
 
 
			var i1:int;
			var i2:int;
 
			for each(var obj:Monster in Monster.monsters)
			{
				obj.onFrame();
			}
			for each(var obj2:Mine in Mine.mines)
			{
				obj2.onFrame();
			}
			for each(var obj3:Bullet in Bullet.bullets)
			{
				obj3.onFrame();
			}
			for each(var obj4:Turret in Turret.turrets)
			{
				obj4.onFrame();
			}
 
			for each(var obj6:HeroBuillding in HeroBuillding.heroBuilldings)
			{
				obj6.onFrame();
			}
			for each(var obj7:Bot in Bot.bots)
			{
				obj7.onFrame();
			}
 
			for each(var obj8:NextLevel in NextLevel.nextLevels)
			{
				obj8.onFrame();
			}
			for each(var obj5:Ofh in Ofh.ofhs)
			{
			obj5.onFrame();
			}
			obj=null;
			obj2=null;
			obj3=null;
			obj4=null;
			obj5=null;
			obj6=null;
			obj7=null;
			obj8=null;
			FactorSpeed.onFrame();
			if(1==2)//дебаг сетки
			{
				testmc.alpha=0.5;
				testmc.graphics.clear();
				testmc.graphics.beginFill(0);
				testmc.mouseEnabled=false;
				testmc.mouseChildren=false;
				for(i1=0;i1<30;i1++)
					for(i2=0;i2<30;i2++)
					{
						if(Repository.gridMonsters[i1][i2].length>0)
						{
							//trace(i1+" "+i2);
							testmc.graphics.drawRect(i1*Config.gridSize,i2*Config.gridSize,Config.gridSize,Config.gridSize);
						}
					}		
 
			}
			if(Hero.X<=Config.mapSizeX-800/2&&Hero.X>=800/2)
			{
				x-=int(Hero.X+x-800/2);
 
			}
			if(Hero.Y<=Config.mapSizeY-600/2&&Hero.Y>=600/2)
			{
				y-=int(Hero.Y+y-600/2);
 
			}	
			tick++;
 
			if(tick%3==0){
				mBitmapData.lock();
				recForClean.x=int(x*-1)-Hero.SPEED*3;
				recForClean.y=int(y*-1)-Hero.SPEED*3;
				recForClean.height=stage.stageHeight+Hero.SPEED*2*3;
				recForClean.width=stage.stageWidth+Hero.SPEED*2*3;
 
				mBitmapData.fillRect(recForClean,0);
				var o2:Bot;
				for each (o2 in Bot.bots)
				{
					if(o2.draw&&(Math.abs(int(-1*x+800/2)-o2.x-o2.size)<900/2)&&(Math.abs(int(-1*y+600/2)-o2.y-o2.size)<700/2))
					{
						matrix.identity();
						matrix.rotate(o2.rotation);
						matrix.translate(o2.x, o2.y);
						mBitmapData.draw(o2.graphicBot,matrix);
 
					}		
				}
 
				o2=null;
				for each (var o:Monster in Monster.monsters)
				{
					if((Math.abs(int(-1*x+800/2)-o.x-o.size)<900/2)&&(Math.abs(int(-1*y+600/2)-o.y-o.size)<700/2))
					{
						matrix.identity();
						matrix.rotate(o.rotation);
						matrix.translate(o.x, o.y);
						mBitmapData.draw(o.graphicMonster,matrix);
 
					}		
				}
 
				o=null;
				mBitmapData.unlock();
			}
 
			//e.updateAfterEvent();
		}
		public static function pointMapSize(x1:int,y1:int):Boolean
		{
			return x1<=Config.mapSizeX&&y1<=Config.mapSizeY&&x1>0&&y1>0;	
		}
	}
}


Последний раз редактировалось medvedya2; 30.10.2010 в 07:41.
Создать новую тему   Часовой пояс GMT +4, время: 08:11.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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