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

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

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

Регистрация: May 2010
Сообщений: 59
По умолчанию Математика ... или как двигаться к центру

Здравствуйте

есть код:

Код AS3:
var dx:Number = enemy.x - hero.X;
var dy:Number = enemy.y - hero.Y;
 
if (dx > 0) enemy.x -= 1;
else enemy.x += 1;
 
if (dy > 0) enemy.y -= 1;
else enemy.y += 1;
сначала на сцене располагается клип hero по центру
и клипы врагов enemy по бокам

задача врагов, двигаться к герою в центр

данный скрипт справляется отлично, но есть одно "но"
если враг находится по диагонали от героя, то двигается ровненько и красиво, а если где-то в другом месте, то он или сначала по Y или по X как бы неровненько подходит и потом уже двигается к герою...

как бы подкорректировать, что бы враги двигались именно к центру где бы они не находились, т.к. другими словами компенсировали свои координаты по X или по Y в зависимости как далеко находятся от центра по диагонали... что бы все ровно шло и красиво

вот как-то так, сорри если не точно объяснил, утро уже :-)

заранее спасибо

Добавлено через 8 минут
все нашел на одном сайте :-)
вот кому может пригодится

Код AS3:
var dx:Number = enemy.x - hero.X;
var dy:Number = enemy.y - hero.Y;	
 
var angle = Math.atan2(dy, dx);
var dist = Math.sqrt(dx * dx + dy * dy);
 
if (dist > enemy.enemySpeed)
{
    var tgtX:Number = enemy.x - enemy.enemySpeed * Math.cos(angle);
    var tgtY:Number = enemy.y - enemy.enemySpeed * Math.sin(angle);
 
    enemy.x = tgtX;
    enemy.y = tgtY;
}
если есть другие способы, буду рад увидеть их здесь =)


Последний раз редактировалось alexcon314; 28.05.2010 в 08:32.
Старый 28.05.2010, 08:36
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 2  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
DenverZ, то слово (и иже с ним), что я затер после слова математика в заголовке вашей темы, здесь употреблять запрещено.

Старый 28.05.2010, 08:45
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 3  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Код AS1/AS2:
function Clip1MoveToClip2(){
	var dx = clip2._x - this._x;
	var dy = clip2._y - this._y;
	var angle = Math.atan2 (dy, dx);
	this.xmov = Math.cos(angle);
	this.ymov = Math.sin(angle);
	if (Math.sqrt(dx*dx + dy*dy) > 15){
		this._x += this.xmov;
		this._y += this.ymov;
	}
}
Старый добрый пример на ас1/ас2, переделать сможете? Смысл, как делать, должен быть понятен.
__________________
тут я

Старый 28.05.2010, 09:04
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 4  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
тригонометрия тормозная и не нужна
Код AS3:
var dx:Number = enemy.x - hero.X;
var dy:Number = enemy.y - hero.Y;	
 
var dist = Math.sqrt(dx * dx + dy * dy);
var cos:Number = dx/dist;
var sin:Number = dy/dist;
 
if (dist > enemy.enemySpeed)
{
    enemy.x -= enemy.enemySpeed * cos;
    enemy.y -= enemy.enemySpeed * sin;
}


Последний раз редактировалось -De-; 28.05.2010 в 11:13.
Старый 28.05.2010, 14:59
DenverZ вне форума Посмотреть профиль Отправить личное сообщение для DenverZ Найти все сообщения от DenverZ
  № 5  
Ответить с цитированием
DenverZ

Регистрация: May 2010
Сообщений: 59
2alexcon314 оки понял, извиняюсь

Добавлено через 41 секунду
2КорДум и -De- спасибо буду пробывать :-)

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

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

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


 


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


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