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

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

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

Регистрация: Apr 2010
Сообщений: 8
По умолчанию Вопрос по использованию ROLL_OVER

Здравствуйте!
Подскажите, пожалуйста. Мне нужно сделать план здания во flash, так, что при наведении мыши на каждое помещение выводится окно с информацией об этом помещении. Для этого я хочу создать в actionscript 3.0 функцию:

Код AS3:
function Main(e:MouseEvent):void{
var S:String;
//Дальше нужно понять, над каким помещением 
//находится указатель мыши в данный момент, 
//чтобы понять, какой текст должен быть в комментарии
//Для этого, я думаю, нужно использовать переключатель switch:
 
switch(e){
case …:
S = “Комментарий к помещению 1”;
 
case …:
S = “Комментарий к помещению 2”;
}
 
// Но не могу понять, как нужно его правильно организовать
 
…
 
}
 
//Ну и потом вызываем эту функцию:
NameArea.addEventListener(MouseEvent.ROLL_OVER,Main);
Подскажите, пожалуйста, как это сделать… и правильно ли вообще, решать эту задачу с помощью такой функции?


Последний раз редактировалось nickolay08; 05.04.2010 в 11:56.
Старый 05.04.2010, 09:56
sospamom вне форума Посмотреть профиль Отправить личное сообщение для sospamom Найти все сообщения от sospamom
  № 2  
Ответить с цитированием
sospamom

Регистрация: Jun 2008
Сообщений: 126
вроде правильно всё, только странно, что NameArea с большой буквы и то, что Main - обработчик события

и в чем вопрос я не понял, подробнее напишите

Старый 05.04.2010, 10:24
nickolay08 вне форума Посмотреть профиль Отправить личное сообщение для nickolay08 Найти все сообщения от nickolay08
  № 3  
Ответить с цитированием
nickolay08

Регистрация: Apr 2010
Сообщений: 8
Цитата:
вроде правильно всё, только странно, что NameArea с большой буквы и то, что Main - обработчик события
NameArea - это имя символа, типа Button, который на плане является помещением (каждое помещение у меня - это отдельная кнопка).
Main - это название функции.

Цитата:
и в чем вопрос я не понял, подробнее напишите
Как мне после case указать, что указатель мыши находится над определенной кнопкой? Мне использовать onRollOver или что-то другое? И как, вообще, правильно это написать?

Старый 05.04.2010, 10:48
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 4  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
Код AS3:
//каждое помещение описыается классом Room и имеет свойство id
var room:Room = e.currentTarget as Room;
var id:String = room.id;
switch(id)
{
// константа
 case Room.BEDROOM:
str = “Комментарий к помещению 1”;
break;
 
case Room.KITCHEN:
str = “Комментарий к помещению2”;
break;
}
ps: отредактируйте свой первый пост - обрамите код тегами as3..
__________________
Отряд Котовскага


Последний раз редактировалось Котяра; 05.04.2010 в 10:51.
Старый 05.04.2010, 13:59
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 5  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Или сложить строки комментариев в массив, так чтобы их индекс в массиве совпадал с id кнопки-помещения (id тогда не String конечно, а uint). Ну или использовать Dictionary, в котором строки привязать к самим кнопкам, а не к id. Тогда не придется писать громоздкий и унылый switch.
Я бы держал эти тексты в массиве в Room и сделал в Room метод, возвращающий текст по id, либо еще при создании экземпляров комнат каждой отдавал ее индивидуальное описание))
__________________
Reality.getBounds(this);

Старый 05.04.2010, 14:51
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 6  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
способов много, я просто показал наиболее приближённый к исходному варианту метод.
я бы использовал скорей всего
Код AS3:
var room:Room = e.currentTarget as Room;
str = room.getHint();
__________________
Отряд Котовскага

Старый 06.04.2010, 06:36
nickolay08 вне форума Посмотреть профиль Отправить личное сообщение для nickolay08 Найти все сообщения от nickolay08
  № 7  
Ответить с цитированием
nickolay08

Регистрация: Apr 2010
Сообщений: 8
Спасибо за советы! Я попытался их исполнить, но у меня опять возникли проблемы. Извините за мои вопросы, которые вам, наверняка, кажутся глупыми - просто, опыта в actionscript у меня пока "0"...

В общем, в файле Room.as у меня получилось следующее:
Код AS3:
package main {
	import flash.display.MovieClip;
	import flash.events.Event;
	import flash.events.MouseEvent;
 
	public class Room extends MovieClip {
		public function ShowInfo(e:MouseEvent) {
			addEventListener(MouseEvent.ROLL_OVER, onROLLOVER);
			addEventListener(MouseEvent.ROLL_OUT, onROLLOUT);
		}
		private function onROLLOVER(evt:MouseEvent,n:uint){
			Info.visible = true;
			Info.x = mouseX+10;
			Info.y = mouseY-50;
			Info.IP.text = getInfo(n);		
		}
		private function onROLLOUT(evt:MouseEvent):void {
			Info.visible = false;
		}
 
		private var ArrInfo:Array = new Array(
						      "Помещение1",
						      "Помещение2",
						      "Помещение3");
 
		public function getInfo(n:uint):String {
			var str:String;
			return str = ArrInfo[n];
		}
	}
}

А в основном файле если пишу:
Код AS3:
Info.visible = false;
a2016.addEventListener(MouseEvent.ROLL_OVER, ShowInfo);
//a2016 - название помещения
то, конечно же, выдает ошибку, потому что у метода onROLLOVER два параметра, а передается ему только один. Как можно правильно передать ему второй параметр?


Цитата:
Или сложить строки комментариев в массив, так чтобы их индекс в массиве совпадал с id кнопки-помещения (id тогда не String конечно, а uint).
Каким образом мне нужно будет прописать, что каждое помещение связано с определенным id? Пожалуйста, объясните подробнее.

Есть еще одна проблема, про которую я забыл написать раньше - помещений около 50 (это торговый центр) и нужно, чтобы в последствии можно было легко изменить комментарий к любому помещению, если сменится арендатор.

Старый 06.04.2010, 10:14
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 8  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
смешались в кучу люди, кони..
1) почитайте конвенции кодирования AS3
2) Info относится к комнате? Скорей всего это внешняя панель. какого она делает в Room?
3) private var ArrInfo:Array - тоже не должен быть в комнате . введите в Room ф-цию init(str) и передайте извне туда строку подсказки, строку сохраните как свойство комнаты
__________________
Отряд Котовскага

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

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
nickolay08,

1. Перечень комнат описываете в roomInfo.xml, по каждой комнате: название, арендатор, размеры, положение на плане и что там Вам еще нужно
2. В основном fla'шнике делаете мувиклип Room, под который делаете отдельный маленький класс Room, в нем публичными переменными перечисляете все данные, которые надо ему (объекту класса Room) о себе знать и которые потом он должен светить, что не нужно светить - приватными.
3. После закачки roomInfo.xml, проходите xml в цикле, порождаете экземпляр Room'а для каждого элемента. При порождении в конструкторе передаете объекту все его данные.
4. По событию ROLL_OVER (я бы взял MOUSE_OVER) получаете e.target - это и есть объект класса Room целиком. Все, что нужно, это вывести во всплывающую панельку e.target.roomComment, e.target.roomOwner и т.д.

Сделать это намного проще, чем выглядит на первый взгляд.

ЗЫ. Вариант с массивом выглядит на первый взгляд тоже рабочим, но как только помимо комментариев к комнатам потребуется хранить еще что-нибудь, наступит хорошая головная боль.


Последний раз редактировалось mikhailk; 06.04.2010 в 12:02.
Старый 07.04.2010, 09:49
nickolay08 вне форума Посмотреть профиль Отправить личное сообщение для nickolay08 Найти все сообщения от nickolay08
  № 10  
Ответить с цитированием
nickolay08

Регистрация: Apr 2010
Сообщений: 8
Подобную базу данных было бы просто чудесно создать, учитывая хотя бы даже просто последующие изменения. А можно, в таком случае, вместо xml пользоваться MySQL, учитывая, что сайт сделан на Joomla? Как-нибудь получится это связать с flash? Просто, xml надо еще выучить перед тем, как что-то на нем делать... мне пока, как видите, и экшнскрипта вполне хватает

Цитата:
почитайте конвенции кодирования AS3
Спасибо за совет. Почитал... сделал выводы.

Info - это символ типа Movie Clip, который вылазит и показывает информацию о помещении.

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

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

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


 


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


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