Показать сообщение отдельно
Старый 20.04.2010, 04:19
AzagThoth вне форума Посмотреть профиль Отправить личное сообщение для AzagThoth Найти все сообщения от AzagThoth
  № 28  
Ответить с цитированием
AzagThoth
 
Аватар для AzagThoth

блогер
Регистрация: Sep 2009
Сообщений: 309
Записей в блоге: 4
Отправить сообщение для AzagThoth с помощью ICQ
В общем я набросал нечто. Конечно получилось гадко и неоптимально ни разу ну уж лучше так чем никак. Не сомневаюсь что можно довести до ума если немного попыхтеть. В общем прошу любить и жаловать
Код AS1/AS2:
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;
				}
			}
		}
	}
}
Лично у меня сие уродство не тормозит ни разу. Время на писанину примерно минут 20 ушло.
Конечно не совсем по ТЗ, но идея вроде близка. Ну хотя бы отчасти

Добавлено через 6 часов 30 минут
Собственно способ ещё убыстрить работу этой ерунды это играться не со свойством defaultMesto которое я зачем то придумал, а писать например все сдвиженые мувиклипы в отдельный массив, и функцией defaultMove() возвращать обратно мувиклипы которые в этом массиве и сам массив планомерно чистить. Если не устраивает запуска функции при движении то можно запускать её с n-м интервалом. Вроде всё правильно. Ну а дальше только привести во вменямый вид сам код По крайней мере я ощущаю что его можно сократить раза в два-три наверное без ущерба функциональности.
__________________
Играй. Это жизнь.
Всё повторяется. Играй.


Последний раз редактировалось AzagThoth; 20.04.2010 в 13:39.