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

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

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

Регистрация: Jan 2013
Сообщений: 12
По умолчанию Не обновляет кординаты на энтер фрейм

Привет, суть такая - враг вычисляет только начальные координаты героя,а должен обновлять их, в чем проблема не пойму
класс игры, главный обработчик:
Код AS3:
//основной игровой обработчик
		private function enterFrameHandler(event:Event):void{
			// Расчет delta времени
 
	        _xPos = _hero.x;   
			_yPos = _hero.y;
			//Enemy.update(_xPos, _yPos);
			// Обработка врагов, находящихся в игровом мире
			for (var i:int = 0; i < _listOfEnemies.length; i++){
				(_listOfEnemies[i] as Enemy).update(_xPos, _yPos);
			}
 
		}
Класс врага, наследует пустой апдейт из другого класса и расширяет его. Если привязываю кординати например к мыше все работает норм.
Код AS3:
public override function update(xPos:Number, yPos:Number):void
		{
			// Временный код движения объекта
			// демонстрирующий работу класса
 
			var dx:Number = xPos - enemy.x;//находим дельта-Х
			var dy:Number = yPos - enemy.y;//находим дельта-У	
			var angle:Number = Math.atan2(dy,dx);//Тангент угла=противоположная/прилегающую 
			//enemy.rotation = angle * 180 / Math.PI;//Радианы в градусы
			if (xPos < enemy.x)
			{
				enemy.scaleX = - Math.abs( enemy.scaleX );
			}
			else
			{
				enemy.scaleX = Math.abs( enemy.scaleX );
			}
 
 
			if (Math.abs(dx)<=2&&Math.abs(dy)<=2) {//Сравниваем расстояние и скорость по-модулю, 
				speed = 0;							//если расстояние меньше - останавливаемся
			}
			else if (Math.abs(dx)>2&&Math.abs(dy)>2) {
				speed = _speedRandom;
			}
			_speedX = Math.cos(angle)*speed;//уравнение треугольника - имея гипотенузу(скорость),
			_speedY = Math.sin(angle)*speed;//находим противоположную и прилегающую 
			enemy.x += _speedX;									//стороны(скорости по х и у)
			enemy.y += _speedY;//увеличиваем положение на скорость
			//trace(dx,dy)	
 
		}

Старый 19.06.2013, 01:28
MikroAcse вне форума Посмотреть профиль Отправить личное сообщение для MikroAcse Найти все сообщения от MikroAcse
  № 2  
Ответить с цитированием
MikroAcse
 
Аватар для MikroAcse

Регистрация: Feb 2012
Сообщений: 1,540
Покажи часть кода, в которой ты подписался на обновление.

Старый 19.06.2013, 01:47
Serya вне форума Посмотреть профиль Отправить личное сообщение для Serya Найти все сообщения от Serya
  № 3  
Ответить с цитированием
Serya

Регистрация: Jan 2013
Сообщений: 12
ну так я ж и написал, в глвном обработчике(первый кусок кода)

Старый 19.06.2013, 11:54
Bletraut вне форума Посмотреть профиль Отправить личное сообщение для Bletraut Найти все сообщения от Bletraut
  № 4  
Ответить с цитированием
Bletraut
 
Аватар для Bletraut

Регистрация: Mar 2013
Адрес: Вне пространства.
Сообщений: 567
Отправить сообщение для Bletraut с помощью ICQ Отправить сообщение для Bletraut с помощью Skype™
Скорее всего враг вычитает и собственных координат свои же координаты и получает 0.
Вот тут скорее всего неверно.
Код AS3:
			var dx:Number = xPos - enemy.x;//находим дельта-Х
			var dy:Number = yPos - enemy.y;//находим дельта-У

Старый 19.06.2013, 12:27
MikroAcse вне форума Посмотреть профиль Отправить личное сообщение для MikroAcse Найти все сообщения от MikroAcse
  № 5  
Ответить с цитированием
MikroAcse
 
Аватар для MikroAcse

Регистрация: Feb 2012
Сообщений: 1,540
Цитата:
ну так я ж и написал, в глвном обработчике(первый кусок кода)
Цитата:
Покажи часть кода, в которой ты подписался на обновление.
Т.е. ту часть кода, где ты пишешь addEventListener.

Bletraut, не надо писать это, ты путаешь пользователя, не в этом проблема.

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

Регистрация: Feb 2011
Сообщений: 431
Код AS3:
var dx:Number = xPos - enemy.x;//находим дельта-Х
			var dy:Number = yPos - enemy.y;//находим дельта-У
Если всё уже происходит в классе Enemy, кто такой тогда enemy?
Если enemy это спрайт внутри объекта типа Enemy, тогда enemy.x будет позиция x этого спрайта внутри объекта Enemy в котором он находится, а не по отношению к stage (или к контейнеру который содержит врагов и героя). Т.е. надо по идее
Код AS3:
var dx:Number = xPos - this.x - enemy.x;//если enemy не находится в (0.0)
А если нет, то видимо мои телепатические способности пока не достигли совершенства.
__________________
Oomph

Старый 19.06.2013, 23:07
Serya вне форума Посмотреть профиль Отправить личное сообщение для Serya Найти все сообщения от Serya
  № 7  
Ответить с цитированием
Serya

Регистрация: Jan 2013
Сообщений: 12
неа, затрейсил, пказывает что в класе гейм по ентер фрейму кординаты даже не изменяются.
часть кода где я вызываю прослушиватель:
Код AS3:
		public function Game (){
			// constructor code
 
			// Класс мира создается в единственном экземпляре и 
			// ссылка на него хранится в приватной статической переменной.
			// При попытки создать второй экземпляр мира сообщаем об ошибке.
			if (_instance != null){
				throw("Error: Мир уже существует. Используйте Game.getInstance();");
			}
			// Ссылка на экземпляр мира
			_instance = this;
 
			//Создаем бэкграунд
			_bg = new GameBg();
			_bg.width = MainGame.SCR_W;
			addChildAt(_bg,0);
 
			//Создаем главного героя  и размещакем его на сцене
			_hero = new Hero();
			_hero.x = _hero.y = 200;
			addChild(_hero);
 
 
 
 
			// Создание пираний
			addPiranya();
			//Создание рыб
			//addFish();
 
 
			// Добавляем основной обработчик мира
			addEventListener(Event.ENTER_FRAME, enterFrameHandler);
		}
Добавлено через 2 часа 15 минут
Всем спасибо! Вопрос решил! Сделал по мудацки создал статическую функцию в енеми, и вызвал ее напрямую из клласса херо и все ))


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

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

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


 


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


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