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

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

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

Регистрация: Sep 2014
Сообщений: 7
Question Работа с массивами из объектов

Здраствуйте. Я делаю свою програмку для отображения колебаний 100 шариков.
До этого я сделал модель из 3 шариков. Там все нормально, можно и вручную прописать.
А вот со 100 придется использовать массивы.
С созданием шариков и добавлением возможности их перемещения мышкой я уже разобрался:
Код AS3:
import flash.events.Event;
import flash.events.MouseEvent;
 
function createBalls():void {
	var ball = new Array();
	for (var i = 1; i <= 10; i++) {
		ball[i - 1] = new Array();
		for (var j = 1; j <= 10; j++) {
			var balls:ball_mc = new ball_mc();
			balls.x = 500 + j * 50;
			balls.y = 200 + i * 50;
			ball[i - 1] [j - 1] = balls;
			addChild(ball[i - 1] [j - 1]);
			balls.addEventListener(MouseEvent.MOUSE_DOWN, click1);
			balls.addEventListener(MouseEvent.MOUSE_UP, click2);
			}
		}
};
createBalls();
 
function click1(e:MouseEvent):void {
	e.target.startDrag();
};
function click2(e:MouseEvent):void {
	e.target.stopDrag();
};
как оказалось, перемещать сам элемент массива не получается, поэтому пришлось создавать функцию не для элемента, а для "цели" слушателя мыши.
А вот как задавать характер движения шариков?
С обычными объектами можно справиться просто: ball.x=......... . А вот с массивом так не выходит.
Если писать ball[i][j].x=...... , то он ругается. Пишет "Обращение несуществующего свойства ball"
т.е. я так понял, что при присвоении какого-то объекта элементу массива, его свойства(.x; .y и другие) в массиве не отображаются.
Прошу вашей помощи.

Вариант с 3 шариками:

4.4(шлейф).swf   (59.9 Кб)


То, что есть со 100:

0.2.swf   (8.6 Кб)
Вложения
Тип файла: swf 0.2.swf (8.6 Кб, 74 просмотров)
Тип файла: swf 4.4(шлейф).swf (59.9 Кб, 117 просмотров)


Последний раз редактировалось KoNnOr_F14; 30.09.2014 в 22:02.
Старый 30.09.2014, 19:50
Babylon вне форума Посмотреть профиль Отправить личное сообщение для Babylon Посетить домашнюю страницу Babylon Найти все сообщения от Babylon
  № 2  
Ответить с цитированием
Babylon
[+1 25.10.13]
[+4 18.03.14]
 
Аватар для Babylon

Регистрация: Jan 2006
Адрес: Москва, Зеленоград
Сообщений: 653
Отправить сообщение для Babylon с помощью ICQ
Почему не получается перемещать? У вас balls указывает 10-й элемент массива и чего вы хотите?

Старый 30.09.2014, 20:00
Gerbert вне форума Посмотреть профиль Найти все сообщения от Gerbert
  № 3  
Ответить с цитированием
Gerbert
Banned
[+1 06.12.14]
[+1 18.12.14]
[+1 30.12.14]

Регистрация: Aug 2014
Сообщений: 461
А Вам обязательно двухмерный массив?

Старый 30.09.2014, 21:05
KoNnOr_F14 вне форума Посмотреть профиль Отправить личное сообщение для KoNnOr_F14 Найти все сообщения от KoNnOr_F14
  № 4  
Ответить с цитированием
KoNnOr_F14

Регистрация: Sep 2014
Сообщений: 7
Мне нужно управлять не только 10-ым элементом, а и каждым отдельным

Добавлено через 1 минуту
А двумерный массив потому, что шарики находятся в квадрате

Добавлено через 3 минуты
Добавил в шапку флешки с 3 шариками и то, что есть со 100

Старый 30.09.2014, 21:12
Gerbert вне форума Посмотреть профиль Найти все сообщения от Gerbert
  № 5  
Ответить с цитированием
Gerbert
Banned
[+1 06.12.14]
[+1 18.12.14]
[+1 30.12.14]

Регистрация: Aug 2014
Сообщений: 461
Как вставить FLASH/SWF в сообщение/блог.

Старый 30.09.2014, 21:20
KoNnOr_F14 вне форума Посмотреть профиль Отправить личное сообщение для KoNnOr_F14 Найти все сообщения от KoNnOr_F14
  № 6  
Ответить с цитированием
KoNnOr_F14

Регистрация: Sep 2014
Сообщений: 7
исправил

Старый 30.09.2014, 21:40
Gerbert вне форума Посмотреть профиль Найти все сообщения от Gerbert
  № 7  
Ответить с цитированием
Gerbert
Banned
[+1 06.12.14]
[+1 18.12.14]
[+1 30.12.14]

Регистрация: Aug 2014
Сообщений: 461
А Вам что нужно?) Конкретнее только объясните..

Старый 30.09.2014, 21:48
KoNnOr_F14 вне форума Посмотреть профиль Отправить личное сообщение для KoNnOr_F14 Найти все сообщения от KoNnOr_F14
  № 8  
Ответить с цитированием
KoNnOr_F14

Регистрация: Sep 2014
Сообщений: 7
мне нужно как-то управлять каждым шариком, т.е. менять его координаты.
С обычными объектами я уже говорил - все просто.
А вот с массивом не получается. Если писать ball[i][j].x=...... , то он ругается. Пишет "Обращение несуществующего свойства ball"
т.е. я так понял, что при присвоении какого-то объекта элементу массива, его свойства(.x; .y и другие) в массиве не отображаются.

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

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Цитата:
Сообщение от Gerbert Посмотреть сообщение
А Вам обязательно двухмерный массив?
Присоединяюсь к вопросу. А зачем вам двумерный массив? Давайте сделаем, например, n-мерный, по количеству шариков. Ведь это же круто!

У вас каждый шарик и так имеет двумерные координаты x и y. Нет нужды заморачиваться с двумерным массивом. Суть здесь только о том, чтобы не "потерять" шарики, поэтому подойдет любое хранилище — массив или хеш. Массив предпочтительнее.
Вы же связи между этим и соседними шариками, наряду весом шарика и с мощностями пружин храните в самих шариках?

С другой стороны, я советую глянуть в сторону физических движков, типа Box2D или Nape. Это чтобы не изобретать велосипед со своей физикой.

Добавлено через 7 минут
Цитата:
Сообщение от KoNnOr_F14 Посмотреть сообщение
мне нужно как-то управлять каждым шариком, т.е. менять его координаты.
С обычными объектами я уже говорил - все просто.
А вот с массивом не получается. Если писать ball[i][j].x=...... , то он ругается. Пишет "Обращение несуществующего свойства ball"
т.е. я так понял, что при присвоении какого-то объекта элементу массива, его свойства(.x; .y и другие) в массиве не отображаются.
Обращение несуществующего свойства ball — говорит о то, что ball не существует.

Если немного про графы почитать, то вообще необходимость в двумерном массиве отпадет. Найти любой шарик из окружения выбранного можно путем перебора связей [этот шарик] -> [связанный с ним шарик 1], [этот шарик] -> [связанный с ним шарик 2] и т.д. Причем, после поиска связанного шарика, можно уже обновлять для него найденные новые координаты. Со шлейфом так быстро не скажу, но можно в самом шарике хранить координаты нескольких его последних позиций.

Ну и чтобы всех по разу обходить нужно решить задачку коммивояжера на графах.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.


Последний раз редактировалось dimarik; 30.09.2014 в 22:17.
Старый 30.09.2014, 22:17
KoNnOr_F14 вне форума Посмотреть профиль Отправить личное сообщение для KoNnOr_F14 Найти все сообщения от KoNnOr_F14
  № 10  
Ответить с цитированием
KoNnOr_F14

Регистрация: Sep 2014
Сообщений: 7
Цитата:
Сообщение от dimarik Посмотреть сообщение
Присоединяюсь к вопросу. А зачем вам двумерный массив? Давайте сделаем, например, n-мерный, по количеству шариков. Ведь это же круто!

У вас каждый шарик и так имеет двумерные координаты x и y. Нет нужды заморачиваться с двумерным массивом.
По сути, вы правы, но это не столь важно.

Цитата:
Сообщение от dimarik Посмотреть сообщение
Вы же связи между этим и соседними шариками, наряду весом шарика и с мощностями пружин храните в самих шариках?
нет, я храню их в отдельных переменных. А можно это все задавать в свойствах шарика? Я просто работаю во флеше не больше месяца.

Цитата:
Сообщение от dimarik Посмотреть сообщение
С другой стороны, я советую глянуть в сторону физических движков, типа Box2D или Nape. Это чтобы не изобретать велосипед со своей физикой.
Готовые движки не подойдут, так как основной задачей для меня является создание собственной модели колебаний.

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

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

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


 


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


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