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

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

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

Регистрация: Feb 2007
Сообщений: 2
Отправить сообщение для Pard с помощью ICQ
По умолчанию Сортировка массива точек

При работе над игрой "Точки" столкнулся с проблемой. Точки окружения хранятся в массиве, но они расположены неупорядоченно. При отрисовке получается что линия идет не по контуру, а соединяет точки как попало.
Вот скриншот результата

Как упорядочить массив чтобы контур отрисовывался правильно? Или как этого добиться непосредственно при отрисовке, не сортируя массив заранее?
Спасибо (:

Добавлено через 36 минут
Я наваял скрипт, но он глючный страшный. Ничего лучше мне в голову не идет, для этой задачи.
Код AS3:
private static function sortArray(arr:Array):Array {
	var res:Array = [];//get the firs element of the source object
	res.push( { "x":arr[0].x, "y":arr[0].y } );// Берем первый элемент массива, от него ведем обход
	var pnts:Array = [];// двухмерный массив заполненный определенными значениями (-1)
 
	for (var i:int = 0; i < result.size[0]; i++) {
		pnts.push([]);
		for (var j:int = 0; j < result.size[1]; j++) {
			pnts[i].push( -1);
		}
	}
	for each(var obj in arr) {
		pnts[obj.x][obj.y] = 5;// Там где есть точки, ставим 5 
	}
 
	var found:Boolean;
	var cobj:Object;
	var poiarr:Array;// массив окружающих точек
	for (var i = 0; i < (arr.length - 1); i++) {
		found = false;
 
		cobj = res[i];// Точка в обработке
		poiarr = [[cobj.x, cobj.y - 1], [cobj.x + 1, cobj.y - 1], [cobj.x + 1, cobj.y], [cobj.x + 1, cobj.y + 1], [cobj.x, cobj.y + 1], [cobj.x - 1, cobj.y + 1], [cobj.x - 1, cobj.y], [cobj.x - 1, cobj.y - 1]];// Заполняем массив окружающих точек
 
		for each(var ppp in poiarr) {// Перебираем эти точки
			if ((ppp[0] > 0) && (ppp[1] > 0) && (ppp[0] < result.size[0]) && (ppp[1] < result.size[1])) {// проверяем выход за границы
				if ((pnts[ppp[0]][ppp[1]] == 5) && (!found)) { res.push( { "x":ppp[0], "y":ppp[1] } ); found = true; };// Если точка найдена, добавляем ее в новый массив
			}
		}
	}
 
	return(res);
}

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

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
А какого они не упорядочены? Когда определяется, что точки составляют обход, то как раз и должен создаваться упорядоченный массив (или его легко создать).

Ну можно там взять верхнюю точку и обойти, начав с неё, по часовой стрелке остальные, но зачем?
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.

Старый 22.08.2011, 07:43
Silicium вне форума Посмотреть профиль Отправить личное сообщение для Silicium Найти все сообщения от Silicium
  № 3  
Ответить с цитированием
Silicium
 
Аватар для Silicium

Регистрация: Sep 2010
Адрес: Ростов-на-Дону
Сообщений: 369
Действительно. Как Вы узнаете, что контур замкнутый?

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

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

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


 


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


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