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

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

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

Регистрация: Feb 2010
Сообщений: 29
По умолчанию Как обратиться к элементам простого массива?

Проблема такая: создаю массив с элементами (для игры пятнашки). А как обратиться к ним по-человечески не понимаю. Просто [tileArr] (как в коде пока написано у меня) - получается не к каждому, а к списку элементов обращение, да? По книжке что-то не разобраться... Накрутила, навертела чего-то, и не работает(
Помогите если не сложно =)

Код AS1/AS2:
var tileArr:Array = ["tile1", "tile2", "tile3", "tile4", "tile5", "tile6", "tile7", "tile8", "tile9", "tile10", "tile11", "tile12", "tile13", "tile14", "tile15"];
 
function initGame()
{
	tileDist = 54;
	for (x=1; x<=4; x++)
	{
		for (y=0; y<=3; y++)
		{
 
			_root[tileArr]._x = x*tileDist+500;
			_root[tileArr]._y = 400+y*tileDist+tileDist;
		}
	}
	for (tilenum = 0; tilenum<100; tilenum++)
	{
		do
		{
 
			tile = [tileArr];
			emptySpace = findEmpty(tile);
		}
		while (emptySpace == "none");
		moveTile (tile, findEmpty(tile));
	}
}
 
function findEmpty(tile)
{
	tilex = _root[tile]._x;
	tiley = _root[tile]._y;
	if (tilex>tileDist+500)
	{
		if (!tileThere(tilex-tileDist, tiley))
		{
			return ("left");
		}
	}
	if (tilex<500+tileDist*4)
	{
		if (!tileThere(tilex+tileDist, tiley))
		{
			return ("right");
		}
	}
	if (tiley>tileDist+400)
	{
		if (!tileThere(tilex, tiley-tileDist))
		{
			return ("above");
		}
	}
	if (tiley<400+tileDist*4)
	{
		if (!tileThere(tilex, tiley+tileDist))
		{
			return ("below");
		}
	}
	return ("none");
}
function tileThere (thisx, thisy)
{
	for (i=1; i<tileArr.length; i++)
	{
		if (_root[tileArr[i]]._x == thisx)
		{
			if (_root[tileArr[i]]._y == thisy)
			{
				return true;
			}
		}
	}
	return false;
}
function moveTile(tile, direction)
{
	if(direction == "above")
	{
		_root[tile]._y -= tileDist;
	}
	else if (direction == "below")
	{
		_root[tile]._y += tileDist;
	}
	else if (direction == "left")
	{
		_root[tile]._x -= tileDist;
	}
	else if (direction == "right")
	{
		_root[tile]._x += tileDist;
	}
}
function tileUnderMouse()
{
	for (i=1; i<tileArr.length; i++)
	{
		if (_root[tileArr[i]].hitTest(_xmouse, _ymouse))
		{
			return (i);
		}
	}
}


Последний раз редактировалось TaNda; 26.04.2010 в 15:56.
Старый 26.04.2010, 16:05
lexa2000lexa вне форума Посмотреть профиль Отправить личное сообщение для lexa2000lexa Найти все сообщения от lexa2000lexa
  № 2  
Ответить с цитированием
lexa2000lexa

Регистрация: Sep 2005
Сообщений: 950
если я правильно понял вас ,то нужно вам обрашаться вот так
Код AS1/AS2:
tileArr[некий номер]._x = некое значение

Старый 26.04.2010, 16:20
TaNda вне форума Посмотреть профиль Отправить личное сообщение для TaNda Найти все сообщения от TaNda
  № 3  
Ответить с цитированием
TaNda

Регистрация: Feb 2010
Сообщений: 29
Нет, нужно, чтоб программа обращалась поочереди к каждому элементу массива, а не только к одному конкретному.

Есть мысль использовать цикл for, в коде ниже я так и сделала - это правильно? Неужели каждое обращение к элементам нужно прописывать через очередное for и скобки? Это ж помойка в коде будет..
Код AS1/AS2:
function tileUnderMouse()
{
	for (i=1; i<tileArr.length; i++)
	{
		if (_root[tileArr[i]].hitTest(_xmouse, _ymouse))
		{
			return (i);
		}
	}
}

Старый 26.04.2010, 16:41
fessor вне форума Посмотреть профиль Отправить личное сообщение для fessor Найти все сообщения от fessor
  № 4  
Ответить с цитированием
fessor

Регистрация: Oct 2009
Сообщений: 101
может проще использовать mc.onRollover = function(){}
и мороки меньше и всегда знаешь на каком тайле мышь

Старый 26.04.2010, 16:57
TaNda вне форума Посмотреть профиль Отправить личное сообщение для TaNda Найти все сообщения от TaNda
  № 5  
Ответить с цитированием
TaNda

Регистрация: Feb 2010
Сообщений: 29
это в функции для каждого из 15 элементов прописывать всю массу кода? Наверное, я не поняла) ааа

Так то все работает и без массива, но не реализовать проверку на решенность головоломки ибо запутано очень. Хочется избавиться от постоянных вычислений номера элемента и просто производить все действия с элементами массива.

Старый 26.04.2010, 17:02
lexa2000lexa вне форума Посмотреть профиль Отправить личное сообщение для lexa2000lexa Найти все сообщения от lexa2000lexa
  № 6  
Ответить с цитированием
lexa2000lexa

Регистрация: Sep 2005
Сообщений: 950
зачем, это делаеться вот так
Код AS1/AS2:
var tileArr:Array = [tile1, tile2, tile3, ....]
for(var i:Number = 0;i<tileArr.length;i++){
	tileArr[i].onRollOver = function(){
		trace(this)
	}
}

Старый 26.04.2010, 18:21
TaNda вне форума Посмотреть профиль Отправить личное сообщение для TaNda Найти все сообщения от TaNda
  № 7  
Ответить с цитированием
TaNda

Регистрация: Feb 2010
Сообщений: 29
Спасибо, ребят) Буду пробовать...но походу, если весь код не перелопатить, не заработает..там все на другом принципе ща

Создать новую тему Ответ Часовой пояс GMT +4, время: 18:24.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

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

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


 


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


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