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

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

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

Регистрация: Jan 2013
Сообщений: 14
Arrow Глубина отображения

пишу сапера,выставляю мины в цикле for ,необходимо спрятать их на нулевую глубину.
Помню что то вроде :
Код AS3:
setChildIndex(mine,0);
Попробовал,не вышло какие могут быть еще варианты?

вот сам код
Код AS3:
//цикл выставления мин
for(var i1:int = 0 ; i1 < mineNumber ; i1++ ) {
	var mine:Mine = new Mine(); //каждую иттерацию создаем минку
	var locationMineX:int = 30 * Math.floor(Math.random()*mineNumber );//рандом координаты по х
	var locationMineY:int = 30 * Math.floor(Math.random()*mineNumber );//рандом коорды по у
	locationMineX = locationMineX - locationMineX % 30;//пересчитываем для кратности 30(размеру кнопки/мины)
	locationMineY = locationMineY - locationMineY % 30;//пересчитываем для кратности 30(размеру кнопки/мины)
	mine.x = clBtn.startLocationX + locationMineX;//используем коорды поля для начального отсчета
	mine.y = locationMineY;
	arrMine.push(clBtn.startLocationX + locationMineX,locationMineY);//добавляем в конец массива коорды
	setIndexChild(mine,0); // ОШИБКА!ОПИСАНИЕ НИЖЕ.				
	addChild(mine)
}
ОШИБКА!
Код:
RangeError: Error #2006: Предоставленный индекс выходит за допустимые пределы.
	at flash.display::DisplayObjectContainer/setChildIndex()


Последний раз редактировалось iNils; 28.01.2013 в 12:16.
Старый 26.01.2013, 23:37
strangedk вне форума Посмотреть профиль Отправить личное сообщение для strangedk Найти все сообщения от strangedk
  № 2  
Ответить с цитированием
strangedk
 
Аватар для strangedk

Регистрация: Oct 2010
Адрес: Харьков
Сообщений: 616
Записей в блоге: 1
Отправить сообщение для strangedk с помощью ICQ Отправить сообщение для strangedk с помощью Skype™
Цитата:
setIndexChild(mine,0);
addChild(mine)
Вместо этого используйте addChildAt(mine, 0);
__________________
adobe AS3 manual

Старый 26.01.2013, 23:49
sampo вне форума Посмотреть профиль Найти все сообщения от sampo
  № 3  
Ответить с цитированием
sampo
Banned

Регистрация: Jan 2013
Сообщений: 14
Не помогло

Старый 27.01.2013, 00:28
strangedk вне форума Посмотреть профиль Отправить личное сообщение для strangedk Найти все сообщения от strangedk
  № 4  
Ответить с цитированием
strangedk
 
Аватар для strangedk

Регистрация: Oct 2010
Адрес: Харьков
Сообщений: 616
Записей в блоге: 1
Отправить сообщение для strangedk с помощью ICQ Отправить сообщение для strangedk с помощью Skype™
addChildAt(mine, 1);



Не ясно же, где находится вызов ф-ции, не ясно куда добавляется элемент.
сколько вообще объектов на сцене, посмотрите numChildren свойство у контейнера
__________________
adobe AS3 manual

Старый 27.01.2013, 02:27
sampo вне форума Посмотреть профиль Найти все сообщения от sampo
  № 5  
Ответить с цитированием
sampo
Banned

Регистрация: Jan 2013
Сообщений: 14
на первом уровне всегда находятся элементы,но
Код AS3:
addChildAt(mine,0);
почему то не работает.

Старый 27.01.2013, 03:27
Mkey вне форума Посмотреть профиль Отправить личное сообщение для Mkey Найти все сообщения от Mkey
  № 6  
Ответить с цитированием
Mkey
 
Аватар для Mkey

Регистрация: Apr 2012
Сообщений: 88
Зачем мины расставлять заранее? Можно же при открытие ячейки вставлять.

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

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Цитата:
Сообщение от sampo Посмотреть сообщение
Не помогло
и ошибка та же?
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 27.01.2013, 19:17
Tails вне форума Посмотреть профиль Отправить личное сообщение для Tails Найти все сообщения от Tails
  № 8  
Ответить с цитированием
Tails
 
Аватар для Tails

блогер
Регистрация: Dec 2008
Адрес: г. Чебоксары
Сообщений: 2,259
Записей в блоге: 6
В сапёре мины генерируются после первого нажатия на квадратик. Таким образом нельзя убиться при первом же клике.
__________________
Дети не должны знать о своих родителях

Старый 27.01.2013, 22:36
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 9  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Цитата:
Сообщение от Tails Посмотреть сообщение
В сапёре мины генерируются после первого нажатия на квадратик. Таким образом нельзя убиться при первом же клике.
Неправда. Кучу раз убивался. Откройте, да попробуйте.
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 28.01.2013, 06:06
Frost47rus вне форума Посмотреть профиль Отправить личное сообщение для Frost47rus Найти все сообщения от Frost47rus
  № 10  
Ответить с цитированием
Frost47rus
[+4 08.09.13]

Регистрация: May 2012
Сообщений: 131
Код AS3:
setIndexChild(mine,0);		
addChild(mine)
Вы сами-то свой код читали? Или писали не глядя?
Сначала - добавить нужно. И только потом задавать индекс.
И, для справки:

Код AS3:
setChildIndex
Добавлено через 31 минуту
Собственно, не совсем понятна логика построения игры.
Вместо того, чтобы расставлять мины под клетки - не проще ли сделать саму клетку носителем этой информации?
В таком случае, у вас клетка будет иметь 5 состояний:
-клетка закрытая
-клетка помеченная флагом
-клетка открытая
-клетка с цифрой
-бомба

Расставляете клетки:

Код AS3:
var emptyCells:Vector.<GameCell> = new Vector.<GameCell>();
var bombCells:Vector.<GameCell> = new Vector.<GameCell>();
var bombMap:BitmapData = new BitmapData(tableWidth, tableHeight, true, 0);
var i:int, j:int;
for (i = 0; i < tableHeight; i++) {
	for (j = 0; j < tableWidth; j++) {
		var gameCell:GameCell = new GameCell();
		gameCell.position = new Point(i, j);
		emptyCells.push(gameCell);
	}
}
for (i = 0; i < bombsToPlace; i++) {
	var num:int = Math.floor(Math.random() * emptyCells.length);
	var bombCell:GameCell = emptyCells[num];
	bombCell.setBombState();
	emptyCells.splice(num, 1);
	bombCells.push(bombCell);
	bombMap.setPixel(bombCell.position.x, bombCell.position.y, 1);
}
Дальше в цикле по бомбам можно пробежаться и, зная их координаты, достать соседние клетки по соответствующим координатам (-1, 0) (0, -1) (+1, 0) (0, +1) (-1, -1) (1, -1) (1, 1) (1, -1) - и назначить им какой-нибудь метод
Код AS3:
gameCell.updateCounter();
В котором добавлять к счётчику единичку
Таким образом получите и счётчики на клетках. А дальше вешаете на контейнер 1 листенер.
По клику достаёте
Код AS3:
var gameCell = event.target as GameCell;
И вызываете у неё какой-нибудь метод open();
Скажем, по коллбеку вызываете проверку логики. О_о
Вот и вся игра.


Последний раз редактировалось Frost47rus; 28.01.2013 в 06:40.
Создать новую тему Ответ Часовой пояс GMT +4, время: 14:46.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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