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

Вернуться   Форум Flasher.ru > Flash > Общие вопросы о Flash (не затрагивающие ActionScript)

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

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
По умолчанию Узор в виде кафельной плитки разного размера

Здравствуйте.
Столкнулся с трудностями логического характера (технически вроде ничего сложного). Вот, собственно, описание задачи:
Нужно програмно нарисовать узор в виде прямоугольников произвольного размера расположенных вплотную друг к другу. Не могу придумать алгоритм, как бы это все организовать.
Вот выкладываю то, что уже сделал, просто чтобы было понятно, по какому принципу я думал это делать. Но кажется, это как-то не совсем в ту сторону, что нужно...
Код:
var _arr:Array = [];
for(i=0; i<40;i++){
	var tmp_arr:Array = [];
	for(j=0; j<40; j++){
		tmp_arr.push("");
	}
	_arr.push(tmp_arr);
}
var _map:Map = new Map(_arr);
Это код во флешке (главном файле) Строит массив и заполняет его квадратиками одного цвета.
Код:
class Cell extends MovieClip {
	var _cell:MovieClip;
	var _filled:Boolean = false;
	var XX:Number = 0;
	var YY:Number = 0;
	var W:Number = 10;
	var H:Number = 10;
	var n:String = "";
	function Cell(coord:Object) {
		this._cell = _root.createEmptyMovieClip("_cell"+coord.n, _root.getNextHighestDepth());
		with (this._cell) {
			beginFill(0x777777, 100);
			moveTo(0, 0);
			lineTo(coord.W, 0);
			lineTo(coord.W, coord.H);
			lineTo(0, coord.H);
			lineTo(0, 0);
			endFill();
			_x = coord.XX;
			_y = coord.YY;
		}
		this.XX = coord.XX;
		this.YY = coord.YY;
		this.n = coord.n;
	}
}
Это отдельный квадратик
Код:
import flash.geom.ColorTransform;
import flash.geom.Transform;
class Map extends MovieClip {
	var _arr:Array = [];
	function Map(_arr:Array) {
		for (var i = 0; i<_arr.length; i++) {
			var tmp_arr:Array = [];
			for (var j = 0; j<_arr[i].length; j++) {
				var _cell:Cell = new Cell({XX:j*10, YY:i*10, W:10, H:10, n:""+i+""+j});
				tmp_arr.push(_cell);
			}
			this._arr.push(tmp_arr);
		}
		tile();
	}
	function arrayRandomiser():Number {
		return Math.floor(Math.random()*3-0.5);
	}
	function tile():Void {
		var tmp_h:Number = Math.round(Math.random()*6+1)*10;
		var tmp_w:Number = Math.round(Math.random()*6+1)*10;
		var m_x:Number = this._arr.length;
		var rnd_i:Number = Math.round(Math.random()*m_x);
		var rnd_j:Number = Math.round(Math.random()*m_x);
		var rnd_cell:Cell = this._arr[rnd_i][rnd_j];
		if (!rnd_cell._filled) {
			var _ct:ColorTransform = new ColorTransform();
			_ct.rgb = Math.random()*0xffffff;
			var trans:Transform = new Transform(rnd_cell._cell);
			trans.colorTransform = _ct;
			var limit_i = rnd_i+tmp_w/10;
			var limit_j = rnd_j+tmp_h/10;
			for (rnd_i; rnd_i<=limit_i && rnd_i<this._arr.length; rnd_i++) {
				for (var tmp_j = rnd_j; tmp_j<=limit_j && tmp_j<this._arr.length && !this._arr[rnd_i][tmp_j]._filled; tmp_j++) {
					var trans:Transform = new Transform(this._arr[rnd_i][tmp_j]._cell);
					trans.colorTransform = _ct;
					this._arr[rnd_i][tmp_j]._filled = true;
					trace(this._arr[rnd_i][tmp_j]._cell);
				}
			}
		}
	}
}
Это "карта" состоящая из 40х40 квадратиков, которую я и собираюсь перекрасить так, чтобы узор выглядел как прямоугольники произвольного размера лежащие вплотную друг к другу.

Код писать не обязательно, просто подскажите, если не сложно, идею, как бы это сделать =)
Заранее спасибо.
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 15.11.2006 в 10:43.
Создать новую тему Ответ Часовой пояс GMT +4, время: 17:02.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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