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

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

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

Регистрация: 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]);
}
Ошибку найти не могу. Явно не хватает опыта и знаний. Буду очень благодарен за помощь! Заранее спасибо!
Изображения
 

Старый 06.01.2006, 02:51
mr.N вне форума Посмотреть профиль Отправить личное сообщение для mr.N Найти все сообщения от mr.N
  № 2  
Ответить с цитированием
mr.N
 
Аватар для mr.N

Регистрация: Sep 2005
Адрес: SPb
Сообщений: 852
Ну, ты бы хотя бы прокомментировал свой код, а то так непонятно.
И надо пользоваться специальным тэгом для кода, а то так он плохо читается.

Старый 06.01.2006, 06:05
valvika вне форума Посмотреть профиль Отправить личное сообщение для valvika Посетить домашнюю страницу valvika Найти все сообщения от valvika
  № 3  
Ответить с цитированием
valvika

Регистрация: May 2004
Адрес: West_UA , Rivne.
Сообщений: 533
Отправить сообщение для valvika с помощью ICQ Отправить сообщение для valvika с помощью Skype™
Спроси Sh@man'а. Он в прошлом году заполнял случайным образом картинками прямоугольную область.
Задача на самом деле не так проста, как видится при первом прочтении.


Последний раз редактировалось valvika; 06.01.2006 в 06:09.
Старый 06.01.2006, 10:53
opoek вне форума Посмотреть профиль Отправить личное сообщение для opoek Найти все сообщения от opoek
  № 4  
Ответить с цитированием
opoek

Регистрация: Jan 2004
Сообщений: 14
Отправить сообщение для opoek с помощью ICQ
Простое решение "в лоб".
Вложения
Тип файла: rar Square.rar (5.3 Кб, 48 просмотров)


Последний раз редактировалось opoek; 06.01.2006 в 10:59.
Старый 06.01.2006, 12:20
Double вне форума Посмотреть профиль Отправить личное сообщение для Double Найти все сообщения от Double
  № 5  
Ответить с цитированием
Double
 
Аватар для Double

Регистрация: Mar 2001
Сообщений: 1,147
я вот так вот это делаю...
Вложения
Тип файла: rar rFill.rar (2.3 Кб, 50 просмотров)
__________________
Кто говорит, тот не знает. Кто знает, тот не говорит.

Старый 06.01.2006, 13:26
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 6  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
как вариант: разбиваем область на прямоугольники (сколько там надо..), а в них уже в случайные координаты аттачим квадратики..

Код:
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));

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

Регистрация: Mar 2001
Сообщений: 1,147
что-то мне подсказывает, что мы разные задачи решаем
я представил вариант полного заполнения области в случайном порядке с неслучайными координатами каждой позиции. меня к этому подтолкнул кусок кода автора
Код:
box._x = 4*i;
box._y = 4*j;
silin представил вариант последовательного заполнения всех ячеек со случайными координатами в пределах ячейки. opoek сделал случайное число квадратиков и случайные координаты я ж теперь спать не буду, чего автору-то надо было?!

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

Регистрация: Jan 2006
Сообщений: 12
Цитата:
Сообщение от Double
я ж теперь спать не буду, чего автору-то надо было?!
По сути, надо было реализовать полное заполнение площади квадратиками (4х4) (поэтому и box._x = 4*i; таким образом я получал случайную ячейку) со случайными координатами. Буду очень Вам благодарен, если разъясните в чем проблема. Не получается подключить ваш скрипт.
Вложения
Тип файла: rar rFill.rar (2.9 Кб, 40 просмотров)

Старый 09.01.2006, 20:28
Double вне форума Посмотреть профиль Отправить личное сообщение для Double Найти все сообщения от Double
  № 9  
Ответить с цитированием
Double
 
Аватар для Double

Регистрация: Mar 2001
Сообщений: 1,147
ichor, необходимо удалить в Вашем файле слой с квадратиком и второй фрейм. Они не нужны. Добавление квадратиков происходит в функции Randomize. Параметром ей передаётся кол-во оставшихся свободных мест (это если вдруг захочется процент заполнения сделать = 10, то при вызове пишите Randomize(iPlaces*0.1)). Квадратик добавляется на каждом onEnterFrame (код выдран из другого проекта, поэтому сделал так. уменьшив фрейм-рейт ролика, можно уменьшить скорость добавления квадратов. это же просто пример), после полного заполнения, функция onEnterFrame удаляется.
__________________
Кто говорит, тот не знает. Кто знает, тот не говорит.

Старый 10.01.2006, 00:25
MOHCTEP вне форума Посмотреть профиль Отправить личное сообщение для MOHCTEP Найти все сообщения от MOHCTEP
  № 10  
Ответить с цитированием
MOHCTEP

Регистрация: 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.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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