Просмотр полной версии : заполнение области квадратиками
Люди добрые, нужна ваша помощь! Подскажите как сделать так, чтобы определенная область флеша случайным образом заполнялась квадратиками, но с проверкой перекрытия(тобишь надо чтоб в одном месте мог находиться только один квадратик, не больше(см.рис). Дублирование реализовать мне удалось, но вот с проверкой проблемы. Я использовал сл. скрипт:
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]);
}
Ошибку найти не могу. Явно не хватает опыта и знаний. Буду очень благодарен за помощь! Заранее спасибо!
Ну, ты бы хотя бы прокомментировал свой код, а то так непонятно.
И надо пользоваться специальным тэгом для кода, а то так он плохо читается.
Спроси Sh@man'а. Он в прошлом году заполнял случайным образом картинками прямоугольную область.
Задача на самом деле не так проста, как видится при первом прочтении.
я вот так вот это делаю...
как вариант: разбиваем область на прямоугольники (сколько там надо..), а в них уже в случайные координаты аттачим квадратики..
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));
что-то мне подсказывает, что мы разные задачи решаем :)
я представил вариант полного заполнения области в случайном порядке с неслучайными координатами каждой позиции. меня к этому подтолкнул кусок кода автора
box._x = 4*i;
box._y = 4*j;
silin представил вариант последовательного заполнения всех ячеек со случайными координатами в пределах ячейки. opoek сделал случайное число квадратиков и случайные координаты :) я ж теперь спать не буду, чего автору-то надо было?!
я ж теперь спать не буду, чего автору-то надо было?! :)По сути, надо было реализовать полное заполнение площади квадратиками (4х4) (поэтому и box._x = 4*i; таким образом я получал случайную ячейку) со случайными координатами. Буду очень Вам благодарен, если разъясните в чем проблема. Не получается подключить ваш скрипт. :confused:
ichor, необходимо удалить в Вашем файле слой с квадратиком и второй фрейм. Они не нужны. Добавление квадратиков происходит в функции Randomize. Параметром ей передаётся кол-во оставшихся свободных мест (это если вдруг захочется процент заполнения сделать = 10, то при вызове пишите Randomize(iPlaces*0.1)). Квадратик добавляется на каждом onEnterFrame (код выдран из другого проекта, поэтому сделал так. уменьшив фрейм-рейт ролика, можно уменьшить скорость добавления квадратов. это же просто пример), после полного заполнения, функция onEnterFrame удаляется.
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');
}
}
}
}
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.