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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 20.04.2010, 04:19
AzagThoth вне форума Посмотреть профиль Отправить личное сообщение для AzagThoth Найти все сообщения от AzagThoth
  № 25  
Ответить с цитированием
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.
Создать новую тему   Часовой пояс GMT +4, время: 15:06.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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