![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Может я конечно вообще не прав, но мысли есть такие. Что если мы знаем примерно какую область занимает один квадрат.(Знаем ведь? - знаем)
Мы знаем координаты мыши. -> Мы можем знать какие квадраты в относительной близости к мыше. Значит нам нужно при создании бекгрануда из квадратов писать это дело в удобно читабельный массив(двухмерный массив т.е. где есть строка и столбец) и при создании каждого квадрата писать ему в доп свойства дефолтные значения x,y. Ну и что-то делать при onMouseMove. По идее сам принцип наверное должен быть такой. Могу попробовать чего собрать, но это наверное уже завтра.
__________________
Играй. Это жизнь. Всё повторяется. Играй. |
|
|||||
|
Цитата:
|
|
|||||
|
В общем я набросал нечто. Конечно получилось гадко и неоптимально ни разу ну уж лучше так чем никак. Не сомневаюсь что можно довести до ума если немного попыхтеть. В общем прошу любить и жаловать
![]() var st:Number=40;//=ширина=высота атачимого мувиклипа var prilip:Number=1;//сколько мувиклипов должны прилипать i=Math.floor(Stage.width/st); j=Math.floor(Stage.height/st); var arr:Array=[]; var znak1:Number=null; var znak=0; for(var y=0; y<i; y++){ arr[y]=[]; if(znak==0){ znak=1; } else if(znak==1){ znak=0; } znak1=znak; for(var z=0; z<j; z++){ if(znak==0){ znak=1; } else if(znak==1){ znak=0; } if(znak==1){ arr[y][z]=attachMovie("kub","kub"+y+z,getNextHighestDepth(),{_x:y*st, _y:z*st}); arr[y][z].defaultX=arr[y][z]._x; arr[y][z].defaultY=arr[y][z]._y; arr[y][z].defaultMesto=true; } } znak=znak1; } onMouseMove=function():Void{ i=Math.round(_xmouse/st); j=Math.round(_ymouse/st); for(var y=i-prilip;y<i+prilip;y++){ for(var z=j-prilip;z<j+prilip;z++){ if(arr[y][z]!=undefined){ arr[y][z]._x=_xmouse; arr[y][z]._y=_ymouse; arr[y][z].defaultMesto=false; } } } defaultMove(); } function defaultMove():Void{ for(var i=0; i<arr.length; i++){ for(var j=0; j<arr[i].length; j++){ if(arr[i][j].defaultMesto==false){ if(arr[i][j].defaultX>arr[i][j]._x){ arr[i][j]._x++; } else if(arr[i][j].defaultX<arr[i][j]._x){ arr[i][j]._x--; } if(arr[i][j].defaultY>arr[i][j]._y){ arr[i][j]._y++; } else if(arr[i][j].defaultY<arr[i][j]._y){ arr[i][j]._y--; } rX=Math.abs(arr[i][j].defaultX-arr[i][j]._x); rY=Math.abs(arr[i][j].defaultY-arr[i][j]._y); if(rX+rY<st/4){ arr[i][j]._x=arr[i][j].defaultX; arr[i][j]._y=arr[i][j].defaultY; arr[i][j].defaultMesto=true; } } } } } ![]() Конечно не совсем по ТЗ, но идея вроде близка. Ну хотя бы отчасти ![]() Добавлено через 6 часов 30 минут Собственно способ ещё убыстрить работу этой ерунды это играться не со свойством defaultMesto которое я зачем то придумал, а писать например все сдвиженые мувиклипы в отдельный массив, и функцией defaultMove() возвращать обратно мувиклипы которые в этом массиве и сам массив планомерно чистить. Если не устраивает запуска функции при движении то можно запускать её с n-м интервалом. Вроде всё правильно. Ну а дальше только привести во вменямый вид сам код По крайней мере я ощущаю что его можно сократить раза в два-три наверное без ущерба функциональности.
__________________
Играй. Это жизнь. Всё повторяется. Играй. Последний раз редактировалось AzagThoth; 20.04.2010 в 13:39. |
|
|||||
|
AzagThoth, к сожалению ваш вариант у меня тормозит, но это конечно мой комп старый уже.
И ещё один вариант. Сделал без твинов, а анимация кубика сделана в ручную, пару вариантов который выбирается рандомно. var scale = 20;//расстояние между клетками for (var i = 0; i < 25; i++) { for (var j = 0; j < 50; j++) { var c = _root.attachMovie("clip", i + "_" + j, _root.getNextHighestDepth()); c._x = 10 + j * scale; c._y = 10 + i * scale; } } fps.swapDepths(_root.getNextHighestDepth()); _root.onMouseMove = function() { var mJ = Math.floor(_xmouse / scale); var mI = Math.floor(_ymouse / scale); for (var tempI = mI - 1; tempI <= mI + 1; tempI++) { for (var tempJ = mJ - 1; tempJ <= mJ + 1; tempJ++) { var tc:String = tempI + "_" + tempJ; var rand = [1, 31, 61, 91]; var randCheck = rand[random(rand.length - 1)]; if (_root[tc]._currentframe == 1) { _root[tc]._rotation = 90 * random(5); _root[tc].gotoAndPlay(randCheck); } } } updateAfterEvent(); }; Последний раз редактировалось samana; 20.04.2010 в 12:26. |
|
|||||
|
Не знаю, может быть просто потому у Вас тормозит, что оно не оптимизировано. В общем я тогда постараюсь как-то поулучшать этот вариант и выложу что-то более вменяемое. Но идея у меня пока всё равно та же. Программно рисовать движения и рулить массивами.
__________________
Играй. Это жизнь. Всё повторяется. Играй. |
![]() |
![]() |
Часовой пояс GMT +4, время: 14:20. |
|
|
« Предыдущая тема | Следующая тема » |
|
|