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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 02.02.2016, 11:58
Фенёк вне форума Посмотреть профиль Отправить личное сообщение для Фенёк Найти все сообщения от Фенёк
  № 21  
Ответить с цитированием
Фенёк

Регистрация: May 2011
Сообщений: 221
Цитата:
Ну пулов у тебя нет.
Равно как и нет часто удаляемых и создаваемых объектов. Для чего мне пул? Ну то есть, серьезно, для каких целей его предлагается использовать? Нет, я мог бы конечно создать пул и не пользоваться им, только зачем?

Цитата:
ScreenPoint и IsoPoint это крутые классы, но зачем, когда есть старый добрый Point?
На мой взгляд есть очень веская причина - читаемость кода. Человек читает и сразу понимает где изомерические координаты, а где экранные. К тому же в случае когда этих поинтов понадобится много, они будут занимать меньше пространства в памяти, потому что у них нет лишних методов и свойств.

Цитата:
Судя по предыдущей открытой тобой теме ты занимался вовсе не тем, о чём тебя просили. Задача была не про то как запихнуть прямоугольники, а про то как ты умеешь работать с изометрией.
Да, есть такое дело, одолело пристрастие к деталям, но если вопрос был конкретно об изометрии - она работает. Сортировка производится правильно (хотя сегодня я понял, что проверка на существование ребра графа могла быть примерно 4мя строчками короче, что, правда, не умаляет ее корректности), координаты рассчитаны правильно

Цитата:
Честно, если бы я принимал программиста на такую зарплату, как указано в вакансии, я тоже бы тебя не взял.
Чтобы добавить немного справедливости, скажу, что цена вопроса с моей стороны была на треть ниже.

Вобщем, дабы не усложнять всем жизнь пройдусь по тем комментариям, к которым я могу предоставить код.

Цитата:
алгоритмически не эффективная сортировка
Построение ребер графа всегда требует полного перебора

Цитата:
Изометрическая сортировка реализована некорректно. Прямоугольные объекты были не просто так - с ними нельзя использовать элементарную сортировку по глубине, т.к. возникнут артефакты в определенных случаях. Решениями являются к примеру использование топологической сортировки, попиксельный z buffer или нарезание объектов на вертикальные полосы сортирующиеся индивидуально
Наглейшая ложь человека, даже не открывавшего код. Привожу реализацию
Код AS3:
		private function sortChild(container:DisplayObjectContainer, child:IsoObject):void
		{
			for (var i:int = 0, length:int = _model.buildingsCount; i < length; i++)
			{
				var compareBuilding:Building = _model.getBuildingAt(i) as Building;
				var currentIsNearest:Boolean = false;
 
				if (child != compareBuilding)
				{
					if (child.isoLeft >= compareBuilding.isoRight && child.isoTop >= compareBuilding.isoBottom)
					{
						currentIsNearest = true;
					}
					else if (Projection.intersects(child.isoLeft, child.isoRight, compareBuilding.isoLeft, compareBuilding.isoRight) &&
						child.isoTop >= compareBuilding.isoBottom)
					{
						currentIsNearest = true;
					}
					else if (Projection.intersects(child.isoTop, child.isoBottom, compareBuilding.isoTop, compareBuilding.isoBottom) &&
						child.isoLeft >= compareBuilding.isoRight)
					{
						currentIsNearest = true;
					}
 
					if (currentIsNearest && container.getChildIndex(child) < container.getChildIndex(compareBuilding))
					{
						container.swapChildren(child, compareBuilding);
					}
				}
			}
		}
Повторюсь, что да, она могла быть несколькими проверками меньше, но с математической точки зрения, она корректна

Цитата:
не оптимальная работа с тайлами - для подобных объектов, эффективнее использовать один класс рендерер, без создания объекта наследующего Sprite на каждый тайл
Такая же наглая ложь, свидетельствующая о том, что человек не потрудился даже посмотреть

код составление чанка карты
Код AS3:
		private function createChunk():QuadBatch
		{
			var chunk:QuadBatch = new QuadBatch();
			var tile:Image      = new Image(LandscapeAssetManager.instance.getTexture("landscapeTiles_081.png"));
			tile.alignPivot(HAlign.CENTER, VAlign.TOP);
 
			for (var col:int = 0; col < _model.CHUNK_SIZE_IN_TILES; col++)
			{
				for (var row:int = 0; row < _model.CHUNK_SIZE_IN_TILES; row++)
				{
					var screenPoint:ScreenPoint = IsoTransformer.isoToScreen(col * _model.TILE_SIZE, row * _model.TILE_SIZE);
					tile.touchable = false;
					tile.x = screenPoint.x;
					tile.y = screenPoint.y - _model.TILE_HEIGHT;
					chunk.addImage(tile);
				}
			}
 
			return chunk;
		}
Ни о каких спрайтах здесь и речи нет. Все пакуется в квадбатч и ,соотвественно, потом отправляется одним вызовом на отрисовку.

Цитата:
Нелогичная работа с изометрическими размерами, координатами, конвертированием между screen и iso space
А вот тут человек выдал в себе ПОЛНОГО профана в области математики, опять-таки, привожу код
Код AS3:
package util
{
	public class IsoTransformer
	{
		private static const ALPHA_RAD:Number = Math.atan(0.5);
		private static const TAN:Number       = Math.tan(ALPHA_RAD);
		private static const SIN:Number       = Math.sin(ALPHA_RAD);
		private static const COS:Number       = Math.cos(ALPHA_RAD)
 
		public static function screenToIso(x:Number, y:Number):IsoPoint
		{
			var isoX:Number = (x * TAN + ((y - x * TAN) / 2)) / SIN;
			var isoY:Number = ((y - x * TAN) / 2) / SIN;
			return new IsoPoint(isoX, isoY);
		}
 
		public static function isoToScreen(isoX:Number, isoY:Number):ScreenPoint
		{
			var x:Number = isoX * COS - isoY * COS;
			var y:Number = isoX * SIN + isoY * SIN;
			return new ScreenPoint(x, y);
		}
	}
}
Такой подход позволит рассчитать координаты для любого угла перспективы. Если у кого-то возникают вопросы о том, что здесь написано - могу написать вывод всех этих формул. Хотя вообще говоря, они спокойно гуглятся.

Но меня просто взбесила логика в духе "не понимаю как работает - значит неправильно".

Цитата:
отсутствие кэширований и отсечений
Если я правильно суть претензии, под кэшированием человек понимал составление квадбатчей. Если под отсечением понималось прекращение отрисовки объектов, вышедших за пределы видимости, то опять-таки, вывод напрашивается о том, что человек ничего не прочел.

код:
Код AS3:
		public function moveBy(xOffset:Number, yOffset:Number):void
		{
			x += xOffset;
			y += yOffset;
 
			for (var i:int = 0, length:int = _model.buildingsCount; i < length; i++)
			{
				var building:Building = _model.getBuildingAt(i);
				var localX:Number     = x + building.x;
				var localY:Number     = y + _buildingsLayer.y + building.y;
 
				var old:Boolean       = building.visible;
				building.visible =
					(localX + building.screenLeft > 0) &&
					(localX + building.screenRight < _viewportWidth) &&
					(localY + building.screenBottom > 0) &&
					(localY + building.screenTop < _viewportHeight);
			}
		}
Цитата:
Странные архитектурные решения вроде менеджера ресурсов под каждый отдельный атлас
Может быть, но я вижу в этом помощь при чтении кода, когда сразу видно набираем мы элементы GUI или карты. Именно в это была причина создания. Атласов в каждом менеджере могло быть сколько угодно.

Из серии "я так не делаю - значит неправильно"

Цитата:
Полностью отсутствует ощущение, что проект можно расширять: вбитые названия и отсутствие возможности разнообразить карту.
Для тестового задания собранного за два дня? Серьезно?

Вобщем, поверьте мне, я целиком и полностью признаю, что я далеко не гуру разработки, и мне конечно же есть чему учиться и куда стремиться, но черт возьми, киньте в меня камень, если ХОТЯ БЫ ОДИН из этих комментариев справедлив.

Я мог бы принять отказ от товарища Rzer, потому что его комментарии хотя бы по делу. Потому что незавершенность задачи, даже при ее больших размерах и малом времени на выполнение (ну леший их знает, может они там вундеркиндов ищут), это хотя бы реальная причина, по которой можно получить отказ. Но отправленные ими комментарии - просто детский лепет, ей-богу.

Кстати да, Rzer, большое спасибо, что нашли время заглянуть внутрь кода.

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

блогер
Регистрация: Dec 2008
Адрес: г. Чебоксары
Сообщений: 2,259
Записей в блоге: 6
Я согласен с тем, что два дня это слишком мало, без имеющихся наработок.
__________________
Дети не должны знать о своих родителях

Старый 02.02.2016, 14:55
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 23  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Фенёк, чего вы от нас то хотите, если все равно решение не поменяете?
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

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

Регистрация: Oct 2006
Сообщений: 2,281
Цитата:
Изометрическая сортировка реализована некорректно.
Фенёк,попробуй такой кейс:
расставить здания в форме прямоугольника, с бОльшей стороной параллельной оси X в с.к. карты.
И рядом расположить еще 4 здания здания в форме прямоугольника, с бОльшей стороной параллельной оси Y.Насколько я помню, в таких случаях "наивная" сортировка по координате и дает неправильный порядок отрисовки.
Имхо тебя завернули как-раз из-за этого пункта, а остальное - так до кучи.
ПС: и поставь высоту у зданий по-больше, чтоб проекции зданий из противоположных сторон прямоугольника заведомо накладывались друг на друга

Старый 02.02.2016, 15:44
Фенёк вне форума Посмотреть профиль Отправить личное сообщение для Фенёк Найти все сообщения от Фенёк
  № 25  
Ответить с цитированием
Фенёк

Регистрация: May 2011
Сообщений: 221
GBee
Насчет сотрудников компании и их способностях я конечно уже мнения не изменю, это правда.

Но вообще тема открывалась с целью получения комментариев к коду. Товарищ Rzer писал что то о структуре проекта и архитектурных решениях, но пока так и не пояснил что под этим подразумевалось

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

Старый 02.02.2016, 16:25
undefined вне форума Посмотреть профиль Отправить личное сообщение для undefined Найти все сообщения от undefined
  № 26  
Ответить с цитированием
undefined

Регистрация: Oct 2006
Сообщений: 2,281
Если можно, хотелось бы с демкой поиграться

Старый 02.02.2016, 20:02
Фенёк вне форума Посмотреть профиль Отправить личное сообщение для Фенёк Найти все сообщения от Фенёк
  № 27  
Ответить с цитированием
Фенёк

Регистрация: May 2011
Сообщений: 221
Так, я наконец закончил, можно посмотреть. Прикладываю swf и архив. Наслаждайтесь.
Пожалуйста, учтите, что все это делалось с целью показать как происходит сортировка, а не с целью написать бесподобный код.

с клавиатуры кнопочки 1, 2, 3 (те, что на основной части клавиатуры) выбирают "кисточки"
1 - домик вытянутый влево
2 - домик вытянутый вправо
3 - квадратный домик

Если домик нельзя поставить в выбранном месте, он подсвечивается красным. Домики сортируются только при установке. "Кисточка" не сортируется.
NativeIso.swf   (4.7 Кб)
Вложения
Тип файла: swf NativeIso.swf (4.7 Кб, 84 просмотров)
Тип файла: zip NativeIso.zip (47.0 Кб, 9 просмотров)

Старый 02.02.2016, 21:04
undefined вне форума Посмотреть профиль Отправить личное сообщение для undefined Найти все сообщения от undefined
  № 28  
Ответить с цитированием
undefined

Регистрация: Oct 2006
Сообщений: 2,281
да признаю, не получилось сломать.

Старый 02.02.2016, 23:41
neonoviiwolf вне форума Посмотреть профиль Отправить личное сообщение для neonoviiwolf Найти все сообщения от neonoviiwolf
  № 29  
Ответить с цитированием
neonoviiwolf

Регистрация: Jun 2014
Сообщений: 558
не всё гладко
Миниатюры
Нажмите на изображение для увеличения
Название: er.jpg
Просмотров: 22
Размер:	158.5 Кб
ID:	32011  

Старый 03.02.2016, 06:38
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 30  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Кривовато работает
Миниатюры
Нажмите на изображение для увеличения
Название: Screenshot_3.jpg
Просмотров: 18
Размер:	51.6 Кб
ID:	32012   Нажмите на изображение для увеличения
Название: Screenshot_4.jpg
Просмотров: 23
Размер:	70.0 Кб
ID:	32013  

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

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

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


 


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


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