![]() |
|
||||||||||
|
|||||
|
Регистрация: Apr 2003
Адрес: DC
Сообщений: 4,489
|
Где? Как в файле. Смысл где можно прочитать?
__________________
flash/flex/unity |
|
|||||
|
[+1.3 05.04.09]
|
*** найдеш инфу скажеш тоже хочу узнать как это булькается
____________________________ список наград предыдущего оратора видишь ?
__________________
Бойтесь китайцев, компы приносящих! Последний раз редактировалось Nox Noctis; 08.12.2003 в 17:15. |
|
|||||
|
[+1.3 05.04.09]
|
__________________
Бойтесь китайцев, компы приносящих! |
|
|||||
|
[+1.3 05.04.09]
|
даже код есть вот
function init() {
grid = [];
big_array_base = [];
value_array_base = [];
gridXsize = gridYsize=13;
workWidth = 490;
workHeight = 490;
cellSize = workWidth/gridXsize;
for (gridX=0; gridX<gridXsize+2; gridX++) {
grid[gridX] = [];
big_array_base[gridX] = [];
value_array_base[gridX] = [];
for (gridY=0; gridY<gridYsize+2; gridY++) {
var cellX = cellSize*gridX;
var cellY = cellSize*gridY;
grid[gridX][gridY] = {x:cellX, y:cellY, factor:(cellX*cellX+cellY*cellY)};
big_array_base[gridX][gridY] = 0;
value_array_base[gridX][gridY] = 0;
}
}
reDraw();
}
function reDraw() {
_root.clear();
big_array = [];
value_array = [];
for (gridX=0; gridX<gridXsize+2; gridX++) {
big_array[gridX] = big_array_base[gridX].slice();
value_array[gridX] = value_array_base[gridX].slice();
}
for (var pCount = 0; pCount<pCircles.length; pCount++) {
pCircles[pCount].factor = pCircles[pCount].centerX*pCircles[pCount].centerX+pCircles[pCount].centerY*pCircles[pCount].centerY;
}
for (var pCount = 0; pCount<pCircles.length; pCount++) {
var tmpx = int(pCircles[pCount].centerx/cellSize);
var tmpy = int(pCircles[pCount].centery/cellSize);
getCell(tmpx, tmpy);
}
}
function getCell(cellX, cellY) {
if (big_array[cellX][cellY] == 0) {
big_array[cellX][cellY] = 1;
var diff = [[0, 0], [1, 0], [1, 1], [0, 1]];
corners = 0;
for (var i = 0; i<4; i++) {
var cellTmp = value_array[cellX+diff[i][0]][cellY+diff[i][1]];
if (cellTmp == 0) {
cellTmp = value_array[cellX+diff[i][0]][cellY+diff[i][1]]=getCellForce(cellX+diff[i][0], cellY+diff[i][1]);
}
if (cellTmp>1) {
//trace(cellTmp);
corners += Math.pow(2, i);
}
}
// drawing stuff
if (corners == 15) {
getCell(cellX, cellY-1);
} else {
linesArray = [[], [0, 3], [1, 0], [3, 1], [1, 2], [3, 0, 1, 2], [0, 2], [3, 2], [2, 3], [2, 0], [0, 1, 2, 3], [2, 1], [1, 3], [1, 0], [0, 3]];
var ourLines = linesArray[corners];
for (var l = 0; l<ourLines.length; l=l+2) {
if (ourLines[l] == 0) {
sx = grid[cellX][cellY].x+cellSize/(Math.abs(value_array[cellX+1][cellY]-1)/Math.abs(value_array[cellX][cellY]-1)+1);
sy = grid[cellX][cellY].y;
} else if (ourLines[l] == 1) {
sx = grid[cellX+1][cellY].x;
sy = grid[cellX+1][cellY].y+cellSize/(Math.abs(value_array[cellX+1][cellY+1]-1)/Math.abs(value_array[cellX+1][cellY]-1)+1);
} else if (ourLines[l] == 2) {
sx = grid[cellX+1][cellY+1].x-cellSize/(Math.abs(value_array[cellX][cellY+1]-1)/Math.abs(value_array[cellX+1][cellY+1]-1)+1);
sy = grid[cellX][cellY+1].y;
} else if (ourLines[l] == 3) {
sx = grid[cellX][cellY].x;
sy = grid[cellX][cellY+1].y-cellSize/(Math.abs(value_array[cellX][cellY]-1)/Math.abs(value_array[cellX][cellY+1]-1)+1);
}
// calc end of line
if (ourLines[l+1] == 0) {
ex = grid[cellX][cellY].x+cellSize/(Math.abs(value_array[cellX+1][cellY]-1)/Math.abs(value_array[cellX][cellY]-1)+1);
ey = grid[cellX][cellY].y;
} else if (ourLines[l+1] == 1) {
ex = grid[cellX+1][cellY].x;
ey = grid[cellX+1][cellY].y+cellSize/(Math.abs(value_array[cellX+1][cellY+1]-1)/Math.abs(value_array[cellX+1][cellY]-1)+1);
} else if (ourLines[l+1] == 2) {
ex = grid[cellX+1][cellY+1].x-cellSize/(Math.abs(value_array[cellX][cellY+1]-1)/Math.abs(value_array[cellX+1][cellY+1]-1)+1);
ey = grid[cellX][cellY+1].y;
} else if (ourLines[l+1] == 3) {
ex = grid[cellX][cellY].x;
ey = grid[cellX][cellY+1].y-cellSize/(Math.abs(value_array[cellX][cellY]-1)/Math.abs(value_array[cellX][cellY+1]-1)+1);
}
_root.lineStyle(6, 0x000080, 100);
subStep = 0;
_root.moveTo(sx+subStep, sy+subStep);
_root.lineTo(ex+subStep, ey+subStep);
_root.lineStyle(4, 0x8080FF, 100);
_root.moveTo(sx, sy);
_root.lineTo(ex, ey);
var diffCell = [[0, -1], [1, 0], [0, 1], [-1, 0]];
getCell(cellX+diffCell[ourLines[l]][0], cellY+diffCell[ourLines[l]][1]);
getCell(cellX+diffCell[ourLines[l+1]][0], cellY+diffCell[ourLines[l+1]][1]);
}
}
}
}
function getCellForce(parX, parY) {
var a = 0;
for (pCount=0; pCount<pCircles.length; pCount++) {
a += pCircles[pCount].radius*pCircles[pCount].radius/(grid[parX][parY].factor-2*grid[parX][parY].x*pCircles[pCount].centerX-2*grid[parX][parY].y*pCircles[pCount].centerY+pCircles[pCount].factor);
}
return a;
}
function rand(value) {
return (-1+2*(random(100)>50))*(3+random(value));
}
function addCircle() {
pCircles.push({dx:rand(10), dy:rand(10), centerX:workWidth/2, centerY:workWidth/2, radius:50});
}
pCircles = [];
init();
_root.onMouseDown = function() {
addCircle();
};
_root.onEnterFrame = function() {
for (var pCount = 0; pCount<pCircles.length; pCount++) {
pCircles[pCount].centerX += pCircles[pCount].dX+random(1);
pCircles[pCount].centerY += pCircles[pCount].dy-random(1);
if ((pCircles[pCount].centerX+pCircles[pCount].radius)>WorkWidth || (pCircles[pCount].centerX-pCircles[pCount].radius)<10) {
pCircles[pCount].dX *= -1;
pCircles[pCount].centerX += pCircles[pCount].dX;
}
if ((pCircles[pCount].centery+pCircles[pCount].radius)>WorkHeight || (pCircles[pCount].centery-pCircles[pCount].radius)<10) {
pCircles[pCount].dy *= -1;
pCircles[pCount].centerY += pCircles[pCount].dy;
}
}
reDraw();
};
__________________
Бойтесь китайцев, компы приносящих! |
|
|||||
|
Регистрация: Apr 2003
Адрес: DC
Сообщений: 4,489
|
Цитата:
У того же Дениски есть намного более продвинутая капля, что-то типа этого мне и нужно объяснение. Объяснение, а не код. http://cleoag.com/labs/flashmx/011/
__________________
flash/flex/unity |
|
|||||
|
[+1.3 05.04.09]
|
ну извини такто и из кода можно понять о принципе
__________________
Бойтесь китайцев, компы приносящих! |
|
|||||
|
[+1.3 05.04.09]
|
вот те исходние
__________________
Бойтесь китайцев, компы приносящих! |
|
|||||
|
Регистрация: Apr 2003
Адрес: DC
Сообщений: 4,489
|
Я подумал маленько ... как я понял, этот эффект основан на
нахождении контура (выпуклой оболочки) от энного количества точек. Точки соответственно задаются в виде шариков, при их определённом удалении друг от друга происходит расщепление контура. В общем по крайней мере так тоже можно реализовать этот эффект. 100% гарантирую. Но сложно ёпрст. Вначале нужно написать процедурку для нахождения контура от массива точек. Далее задать эти точки в виде, допусти двух шаров. Шары будут у нас отражаться от боковых стенок (ну это как два пальца..), При сближении, добусти на 1.5 радиуса точки будут объединяться в один контур. И контур соответственно из двух шаров превратится в одну каплю. При удалении шаров, допустим на расстояние 1.5 радиуса и больше контур опять расщепляется на два шара. Вроде так. Реализую в ближайший месяц этот эффект. Nuran '2003 | All Rights Reserved.
__________________
flash/flex/unity |
|
|||||
|
[+1.3 05.04.09]
|
да да займись что очень кложно напишеш сообщи
__________________
Бойтесь китайцев, компы приносящих! |
![]() |
Часовой пояс GMT +4, время: 06:23. |
|
|
« Предыдущая тема | Следующая тема » |
|
|