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

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

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

Регистрация: Mar 2010
Сообщений: 128
По умолчанию Помогите оптимизировать код: Перемещение обьекта обходя другие объекты

Делаю игру, цель игрока убить как можно больше объектов, объекты гоняться за игроком и его "кусают", на данном этапе уже при 200 объектов игра очень тормозит.
Много ресурсов уходит на перемещение объекта(даже если перемещать без расчетов), и чуть больше уходит на проверку пересечения.
Класс для этих объектов:
Код AS3:
public class Zomb extends MovieClip
	{
		private var timer:Timer = new Timer(40);
		public var ple:Pl;//ссылка на игрока
		public var hp:int = 100;
		public var rad:int = 25;
		public var speed:Number = 2;
		public var yron:int = 1
		private var starthp:int;
		public var zombs:Array;//ссылки на другие оъекты
		public function Zomb()
		{
 
		}
		public function start()
		{
 
			starthp = hp;
			timer.addEventListener(TimerEvent.TIMER, ontimer);
			timer.start();
 
		}
		public function end()
		{
			timer.stop();
			timer.removeEventListener(TimerEvent.TIMER, ontimer);
			zombs = null;
			ple = null;
 
			}
		private function ontimer(e:TimerEvent):void
		{
			var nextposX:Number;
			var nextposY:Number;
			var nextposX90:Number;
			var nextposY90:Number;
			var peresechenieP:Boolean;
			var peresechenie90P:Boolean;
			var p:Point = new Point(ple.x, ple.y);
			var pz:Point = new Point(this.x, this.y);
			this.rotation = (Math.atan2(this.y - ple.y, this.x - ple.x)) / Math.PI * 180;
			nextposX = this.x - Math.cos(this.rotation / 180 * Math.PI) * speed;
			nextposY = this.y - Math.sin(this.rotation / 180 * Math.PI) * speed;
			peresechenieP = peresechenie(nextposX, nextposY);
			if((peresechenieP==false)&&((Point.distance(p, pz) >= (rad+ple.rad)) )){
				this.x = nextposX;
				this.y = nextposY;
			}
			if (peresechenieP == true)
			{
				nextposX90 = this.x - Math.cos((this.rotation + 90) / 180 * Math.PI) * speed;
				nextposY90 = this.y - Math.sin((this.rotation +90) / 180 * Math.PI) * speed;
				peresechenie90P = peresechenie(nextposX90, nextposY90);
				if(peresechenie90P==false)
				{
					this.x = nextposX90;
					this.y = nextposY90;
				} else
				{
					nextposX90 = this.x - Math.cos((this.rotation - 90) / 180 * Math.PI) * speed;
					nextposY90 = this.y - Math.sin((this.rotation -90) / 180 * Math.PI) * speed;
					peresechenie90P = peresechenie(nextposX90, nextposY90);
					if (peresechenie90P == false)
					{
						this.x = nextposX90;
						this.y = nextposY90;
					}
				}
			}
 
			if (Point.distance(p, pz) < (rad+ple.rad)) { ple.hp -= yron; };
			ZombMcHp.height = hp / starthp * 30;
 
		}
		private function peresechenie(px,py:Number):Boolean
		{
 
			var i:int;
			var ind:int = zombs.indexOf(this);
			var iap:Point = new Point(px,py);
			var onp:Point = new Point;
			for (i = 0; i < zombs.length; i++)
			{
				if (i != ind)
				{
					onp.x = zombs[i].x;
					onp.y = zombs[i].y;
					if (Point.distance(onp, iap) <= (rad + zombs[i].rad)+speed) {
						return(true);
					}
 
				}
			}
			return(false);
		}
 
	}
Помогите оптимизировать.
Я Flash начал изучать пару недель назад. Может я что то не правильно делаю?


Последний раз редактировалось medvedya2; 14.04.2010 в 04:57.
Старый 14.04.2010, 05:04
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 2  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
тут в разделе уже очень давно прикреплена превосходная работа. тебе будет очень полезна. изучи для начала.
__________________
Поймай яблоко 2!

Старый 14.04.2010, 10:24
Tahion вне форума Посмотреть профиль Отправить личное сообщение для Tahion Найти все сообщения от Tahion
  № 3  
Ответить с цитированием
Tahion

Регистрация: Apr 2010
Сообщений: 57
Так уж и превосходная?)

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

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

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


 


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


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