|
|
|||||
Регистрация: Jan 2006
Сообщений: 12
|
заполнение области квадратиками
Люди добрые, нужна ваша помощь! Подскажите как сделать так, чтобы определенная область флеша случайным образом заполнялась квадратиками, но с проверкой перекрытия(тобишь надо чтоб в одном месте мог находиться только один квадратик, не больше(см.рис). Дублирование реализовать мне удалось, но вот с проверкой проблемы. Я использовал сл. скрипт:
s++; if(i !== p[i] && j !== p[i][j]){ box._x = 4*i; box._y = 4*j; _root.box.duplicateMovieClip(box[i+j],s); i=Math.round(464*Math.random()/4); j=Math.round(56*Math.random()/4); }else{ do{ i=Math.round(464*Math.random()/4); j=Math.round(56*Math.random()/4);}while(i == p[i] && j == p[i][j]); } Ошибку найти не могу. Явно не хватает опыта и знаний. Буду очень благодарен за помощь! Заранее спасибо! |
|
|||||
Регистрация: Sep 2005
Адрес: SPb
Сообщений: 852
|
Ну, ты бы хотя бы прокомментировал свой код, а то так непонятно.
И надо пользоваться специальным тэгом для кода, а то так он плохо читается. |
|
|||||
Спроси Sh@man'а. Он в прошлом году заполнял случайным образом картинками прямоугольную область.
Задача на самом деле не так проста, как видится при первом прочтении. Последний раз редактировалось valvika; 06.01.2006 в 06:09. |
|
|||||
Простое решение "в лоб".
Последний раз редактировалось opoek; 06.01.2006 в 10:59. |
|
|||||
Регистрация: Mar 2001
Сообщений: 1,147
|
я вот так вот это делаю...
__________________
Кто говорит, тот не знает. Кто знает, тот не говорит. |
|
|||||
как вариант: разбиваем область на прямоугольники (сколько там надо..), а в них уже в случайные координаты аттачим квадратики..
import flash.geom.*; /* where - в каком мувике создаем from - lincage Id квадратика в библиотеке nx,ny - на сколько делим по x и y r - область которую запоняем */ function randFill(where:MovieClip,from:String,nx:Number,ny:Number,r:Rectangle){ var mc=where.createEmptyMovieClip('fill',where.getNextHighestDepth()) mc._x=r.x; mc._y=r.y; var tmp=mc.attachMovie(from,'tmp',0); var w=r.width/nx-tmp._width, h=r.height/ny-tmp._height; var d=0; for(var i=nx;i--;) for(var j=ny;j--;) mc.attachMovie(from,d++,d,{_x:i*r.width/nx+w*Math.random(),_y:j*r.height/ny+h*Math.random()}); } randFill(_root,'box',10,16,new Rectangle(120,80,200,200)); |
|
|||||
Регистрация: Mar 2001
Сообщений: 1,147
|
что-то мне подсказывает, что мы разные задачи решаем
я представил вариант полного заполнения области в случайном порядке с неслучайными координатами каждой позиции. меня к этому подтолкнул кусок кода автора silin представил вариант последовательного заполнения всех ячеек со случайными координатами в пределах ячейки. opoek сделал случайное число квадратиков и случайные координаты я ж теперь спать не буду, чего автору-то надо было?! |
|
|||||
Регистрация: Jan 2006
Сообщений: 12
|
Цитата:
|
|
|||||
Регистрация: Mar 2001
Сообщений: 1,147
|
ichor, необходимо удалить в Вашем файле слой с квадратиком и второй фрейм. Они не нужны. Добавление квадратиков происходит в функции Randomize. Параметром ей передаётся кол-во оставшихся свободных мест (это если вдруг захочется процент заполнения сделать = 10, то при вызове пишите Randomize(iPlaces*0.1)). Квадратик добавляется на каждом onEnterFrame (код выдран из другого проекта, поэтому сделал так. уменьшив фрейм-рейт ролика, можно уменьшить скорость добавления квадратов. это же просто пример), после полного заполнения, функция onEnterFrame удаляется.
__________________
Кто говорит, тот не знает. Кто знает, тот не говорит. |
|
|||||
Регистрация: Dec 2002
Адрес: Живу вот где-то
Сообщений: 493
|
var mc=this.createEmptyMovieClip("blabla",0); mc._x=25; mc._y=50; var size=10;//Square size var area_width=500; var area_height=300; var arr:Array=[]; s = function (a, b) { var r; Math.floor (Math.random () * 2) == 0 ? r = 1 : r = -1; return r; }; var n=0; for(var i=0;i<area_width/size*area_height/size;i++){ arr.push(i); } if(arr.sort(s)){ paint(); } function square(){ var y=Math.floor(arr[n]/(area_width/size))*size; var x=arr[n]%(area_width/size)*size; mc.lineStyle(1,0x009090,100); mc.beginFill(0xD00060,100); mc.moveTo(x,y); mc.lineTo(x+size,y); mc.lineTo(x+size,y+size); mc.lineTo(x,y+size); mc.lineTo(x,y); mc.endFill(); } function paint(){ this.onEnterFrame=function(){ for(i=0;i<20;i++){ square(); n++; if(n==arr.length){ delete this.onEnterFrame(); trace('End'); } } } } |
Часовой пояс GMT +4, время: 09:52. |
|
« Предыдущая тема | Следующая тема » |
|
|