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

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

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

Регистрация: Jan 2007
Сообщений: 13
Cool Тайлинг по тайлингу: rotation, scale, tween, etc.

Добрый. Я очень давно не работал с флешем и
для меня было удивительно узнать о нововведениях в AS2 и AS3.
Разрабатываю движок-навигатор для карты своего города,
что-то среднее между flashearth.com и wikimapia.org.
Для начала опишу то, что я хочу от неё:
================================================
1. Тайлинг
2. Вращение карты вокруг точки (курсор или что-то ещё)
3. Зум относительно точки под курсором +/- (как в графических редакторах)
4. Зум выделеной области
5. Таскание Мышкой, даблклики и т.п.
6. Полёт из А в Б по прямой и по пути.
7. Поинты-отметки с "человеческим" поведением
8. Поиск маршрутов транспорта и поинтов-отметок.
================================================
Цели которые я поставил перед собой самые обычные и ничем не отличаются от аналогичных проектов. Моя наработка лежит тут.

Теперь я хочу спросить у вас, уважаемые флешеры, как на ваш взгляд (рационально или нет) я реализую свои задумки. Попунктно:

1. Тайлинг
Описал класс _MAP_, который умеет создавать себя на главной сцене, отслеживать собственное перемещение, имеет метод move(x,y) который Tween'ами сдвигает this в нужную точку. При инициализации мувика _MAP_ внурти него по циклу создаются копии класса _TILE_ с присвоение им idx и idy. _TILE_ умеет следить за совим перемещением, и в зависимости от попадения в hit-область заданного мной объекта (в будущем - экрана) вызывает в себе метод build() который загружает в себя jpg (определяя его по idx и idy) или проверяет его на существование, во избежании перезагрузки тайла или вызывает free() выгружая картинку:
Код:
_TILE_.prototype.build = function() {
	this.createEmptyMovieClip("m", 0);
	this["m"].loadMovie(String(this.idy)+String(this.idx)+".jpg");
	this.exist = true; //йа существую
}
clear
_TILE_.prototype.free = function() {
	this["m"].removeMovieClip()
	this.exist = false; //йа умир
}

_TILE_.prototype.onMouseMove = function(){
	var rx = this._parent._x + this._x; //йа по Х
	var ry = this._parent._y + this._y; //йа по Y
	this.d.text = this.idy+":"+this.idx;

	if(this.hitTest(_rt)){  if(!this.exist) this.build(); }  //Подгружаем jpg в тайл
       else {  this.free();  } //Выгружаем jpg
	
}
Вопрос о removeMovieClip: В релизе мои тайлы будут 1000*1000 пикселей. removeMovieClip() - удаляет из памяти jpg-data или нет? Если нет, то чем можно уничтожить объект с высвобождением памяти?

Вопрос о onMouseMove: При перемещение мышкой событие вызывается у всех тайлов! Вне зависимости расположен курсор над ним или нет. Почему так происходит? Какое событие необходимо использовать в случае если карта _MAP_ перемещается кем-то из вне, ведь тогда у тайлов не будет вызываться метод onMouseMove. Поидее нужен метод что то типа onEnterFrame, который бы постоянно проверял hitTest, но такой способ съедает много процессорного времени и тормозит.

Так же я понимаю что это не дело, сразу генерировать тайлы, тогда получается это псевдо тайлы. Но я так и не нашел внятной информации по тайлингу, кроме намёков на использование xml которое самособой разумеется.

2. Вращение карты вокруг точки (курсор или что-то ещё)
Тут у меня баян. В моём примере вращается _MAP_ и квадрат, _MAP_ вокруг своего верхнего края, квадрат — относительно собственного центра.

Вопрос о _rotation: каким образом можно устанавливать точку вращения объекту? есть идеи как это реализовано на flashearth.com?

3. Зум относительно точки под курсором +/- (как в графических редакторах)
Когда то я уже задавал этот вопрос на флешере и получил ответ.
Потом поправил код под методы класса и всё было ок, но не в текущем проекте. Покрутите колёсико, увидете почему...
Код:
_MAP_.prototype.onMouseWheel = function(d){
    var s=this._xscale;
	var mouseX=_xmouse;
	var mouseY=_ymouse
	var dx=(mouseX-this._x)/s;
	var dy=(mouseY-this._y)/s;
	var sx:Tween =  new Tween(this, "_xscale", func, s, s+d, t,true);
	var sy:Tween =  new Tween(this, "_yscale", func, s, s+d, t,true);
	sx.onMotionFinished = function() {
	 new Tween(this, "_x", func, this._x, mouseX-dx*_MAP_._xscale, t,true); 
	 }
	sy.onMotionFinished = function() {
	 new Tween(this, "_y", func, this._y, mouseY-dy*_MAP_._yscale, t,true);
	}
}
В моём случае после изменения расчет координат смещения происходит из уже изменненных _xscale _yscale, но одновременный твиниг не даёт нужного результата, а твиниг позиции по завершении изменения масштаба вызывает "дёрганье".


4. Зум выделеной области
Помню видел пример но так и неразобрался в нём, на данный момент
понимаю зум выделенной облати в двух действиях:
- переместить центр выделенной области в центр экрана;
- расчитать правильный _xscale, _yscale, для правильной трасформации;
При одновременном твиниге должно получиться достаточно гламурно ))
C перемещением в центр разобрался быстро, но расчёт коэф. scale непоборол до сих пор...
Может у кого есть пример такого?

5. Таскание Мышкой, даблклики и т.п.
Всё ок, кроме отсутствия "адекватного" алгоритма предотвращения выезжания за край экрана.

6. Полёт из А в Б по прямой и по пути.
Если по прямой, просто из А в Б, то тут нету никаких неясностей. А что если я хочу использовать путь, пусть это будет дорога, маршрут метро или просто линии. Может кто сталкивался с такой задачей? P.S. я имею виду тоже самое, как во флеше можно пустить объект во пути. Но как это сделать програмно незнаю...

7. Поинты-отметки с "человеческим" поведением.
Буду подгружать куски xml, парсить их и расставлять помера домов, единственной незнаю как поступить когда будет изменяться scale карты, как пересчитывать координаты. Есть примеры?

P.S. Заранее благодарю тех, у кого хватило терпения дочитать этот пост до конца

Старый 10.01.2008, 10:38
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 2  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Для начала я бы вам порекомендовал писать хотя бы на AS2, а не прототипном AS1.

Старый 10.01.2008, 12:04
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 3  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Ну, поскольку официально раздел и по АС1 тоже... %)
(а кто-то тут еще и пинал себя пяткой в грудь, утверждая что АС2 - это недоязык, а АС1 - руль )
Вобщем, ситуация следующая, чтобы иметь возможность явно высвободить память занятую картинкой - нужно пользоваться АС2 и компайлить под 8-й плеер минимум. Смотрим свойство BitmapData.dispose();
OnMouseMove - вызывается у всех клипов (т.как вызывается не зависимо от их положения и положения курсора относительно них). onRollOver - сигналит о вхождении курсора в зону занимаемую клипом, onRollOut - наоборот.
Поменять точку регистрации невозможно - ток немного математики и пересчитывать координаты.
Програмно задать траекторию для перемещения так, (как это делается в IDE) так же нельзя. Но, если сможете програмно нарисовать траекторию по опорным точкам, то проблем с твинами от одной точки до другой возникнуть не должно.
Метки нет смысла перемещать, лучше просто скейлить, но так, чтобы они всегда были на одном месте.

Еще пара замечаний: создавать больше 1 твина для анимации - лишнее.
Парсить ХМЛ не надо, он и сам по-себе хорошо структурирован.

ЗЫ. И все таки лучше переходить на АС3, если все равно такая куча проблем =)
__________________
Hell is the possibility of sanity

Старый 10.01.2008, 13:44
pavel gorlov вне форума Посмотреть профиль Отправить личное сообщение для pavel gorlov Найти все сообщения от pavel gorlov
  № 4  
Ответить с цитированием
pavel gorlov

Регистрация: Jan 2007
Сообщений: 13
wvxvw спасибо за ответ!

Цитата:
Сообщение от wvxvw
ЗЫ. И все таки лучше переходить на АС3, если все равно такая куча проблем =)
а есть где почитать шо це AS3 и чем его компилить? Ну короче туториал для чайника

Старый 10.01.2008, 14:01
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 5  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
pavel gorlov, даже на этом форуме есть информация по AS3.

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

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

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


 


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


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