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

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

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

Регистрация: Mar 2010
Сообщений: 18
По умолчанию Разные кнопки (экземпляры) при вызове функции с разными параметрами

Расплывчатое название темы, но вот суть:
при вызове функции в спрайте отрисовываются прямоугольники.
Код AS3:
package {
	import flash.display.Sprite;
	import flash.display.Graphics;
	import flash.events.MouseEvent;
 
	public class drRecMenu_lines extends Sprite {
 
		private var container:Sprite;
		private var itemXpos:uint;
		private var contPositionY:uint;
/*		private var it1:*;
		private var it2:*;
		private var it3:*;
		private var it4:*;
		private var it5:*;*/
 
 
		public function drRecMenu_lines(contPositionY:uint=580) {
			container=new Sprite();
			this.contPositionY=contPositionY;
			container.y=contPositionY;
			drawItem(1,0xFFFF00,1);
			drawItem(2);
			drawItem(3);
			drawItem(4);
			drawItem(5);
			this.addChild(container);
			container.addEventListener(MouseEvent.MOUSE_OVER, runDebug);
			//it3.addEventListener(MouseEvent.MOUSE_OVER, runDebug);
			//it4.addEventListener(MouseEvent.MOUSE_OVER, runDebug);
		}
		private function drawItem(itemCount:uint,fillColor:uint=0x000000, itemAlpha:Number=.8):void {
			if (itemCount<5) {
				itemXpos=(itemCount-1)*180;
				container.graphics.beginFill(fillColor, itemAlpha);
				container.graphics.drawRect(itemXpos,0,180,60);
				container.graphics.endFill();
 
				container.graphics.moveTo(itemXpos,contPositionY);
				container.graphics.lineStyle(1,0xCCCCCC, .2);
				container.graphics.lineTo(itemXpos,contPositionY+60);
			} else {
				itemXpos=(itemCount-1)*180;
				container.graphics.beginFill(fillColor, itemAlpha);
				container.graphics.drawRect(itemXpos,0,1000,60);
				container.graphics.endFill();
			}
		}
		private function runDebug(evt:MouseEvent):void {
			trace("Mouse is over the "+evt.target.name+" item");//Mouse is over the instance1 item
		}
	}
}
Как сделать так, чтобы каждый прямоугольник был как кнопка и реагировал на наведение? У меня не хватате опыта, но мне кажется как раз что это потому что прямоугольники отрисованы в одном спрайте?
Пробовал так:
Код AS3:
package {
	import flash.display.Sprite;
	import flash.display.Graphics;
	import flash.events.MouseEvent;
 
	public class drRecMenu_lines extends Sprite {
 
		private var container:Sprite;
		private var itemXpos:uint;
		private var contPositionY:uint;
		private var it1:*;
		private var it2:*;
		private var it3:*;
		private var it4:*;
		private var it5:*;
 
 
		public function drRecMenu_lines(contPositionY:uint=580) {
			container=new Sprite();
			this.contPositionY=contPositionY;
			container.y=contPositionY;
			it1=drawItem(1,0xFFFF00,1);
			it2=drawItem(2);
			it3=drawItem(3);
			it4=drawItem(4);
			it5=drawItem(5);
			this.addChild(container);
			//container.addEventListener(MouseEvent.MOUSE_OVER, runDebug);
			it3.addEventListener(MouseEvent.MOUSE_OVER, runDebug);
			it4.addEventListener(MouseEvent.MOUSE_OVER, runDebug);
		}
		private function drawItem(itemCount:uint,fillColor:uint=0x000000, itemAlpha:Number=.8):void {
			if (itemCount<5) {
				itemXpos=(itemCount-1)*180;
				container.graphics.beginFill(fillColor, itemAlpha);
				container.graphics.drawRect(itemXpos,0,180,60);
				container.graphics.endFill();
 
				container.graphics.moveTo(itemXpos,contPositionY);
				container.graphics.lineStyle(1,0xCCCCCC, .2);
				container.graphics.lineTo(itemXpos,contPositionY+60);
			} else {
				itemXpos=(itemCount-1)*180;
				container.graphics.beginFill(fillColor, itemAlpha);
				container.graphics.drawRect(itemXpos,0,1000,60);
				container.graphics.endFill();
			}
		}
		private function runDebug(evt:MouseEvent):void {
			trace("Mouse is over the "+evt.target.name+" item");//Mouse is over the instance1 item
		}
	}
}
Выдает ошибку
Цитата:
TypeError: Error #1010: Термин не определен и не имеет свойств.
at drRecMenu_lines()

Старый 28.03.2011, 21:12
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 2  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
это потому что прямоугольники отрисованы в одном спрайте?
1. Да.
2. Что значит запись
Код AS3:
it3=drawItem(3);
если drawItem возвращает void?
3. Звездочки при объявлении типа переменной - чтобы обмануть компилятор? Ну поздравляю, вы его обманули))) Никогда больше так не делайте. Компилятор - ваш лучший друг и советник.
4. Названия классов пишутся с большой буквы.
5. Создавайте столько спрайтов, сколько будет "кнопок". Рисуйте в них прямоугольники. Добавляйте спрайты на сцену, назначайте им слушатели. Воспользуйтесь циклом.
__________________
Reality.getBounds(this);

Старый 28.03.2011, 21:21
carrotoff вне форума Посмотреть профиль Отправить личное сообщение для carrotoff Найти все сообщения от carrotoff
  № 3  
Ответить с цитированием
carrotoff
 
Аватар для carrotoff

Регистрация: May 2010
Сообщений: 543
Цитата:
TypeError: Error #1010: Термин не определен и не имеет свойств.
at drRecMenu_lines()
Реагирует на
Код AS3:
it1=drawItem(1,0xFFFF00,1);
it2=drawItem(2);
it3=drawItem(3);
it4=drawItem(4);
it5=drawItem(5);
так как drawItem ничего не возвращает.

чтобы прослушать события, рисуйте кнопки в разных спрайтах

Добавлено через 42 секунды
Вот до меня уже всё в принципе сказали)

Старый 29.03.2011, 02:57
asterion вне форума Посмотреть профиль Отправить личное сообщение для asterion Найти все сообщения от asterion
  № 4  
Ответить с цитированием
asterion

Регистрация: Mar 2010
Сообщений: 18
В конце концов я это вымучал и сделал во фла-файле. Почему у меня не компилировалось когда я пытался в классе применить Твин лайт?
Код AS3:
import flash.display.Sprite;
import flash.display.Graphics;
import flash.events.MouseEvent;
import flash.display.Shape;
import com.greensock.TweenLite;
 
var container:Sprite;
var itemXpos:uint;
var contPositionY:uint;
var VerPromo:Shape;
var Gallery:Shape;
var Info:Shape;
var Blog:Shape;
var FreeSpace:Shape;
var LinesDev:Shape;
var btnWidth:uint=200;
var btnHeight:uint=60;
drRecMenu_lines();
 
function drRecMenu_lines(contPositionY:uint=450) {
	container=new Sprite();
	VerPromo=new Shape();
	Gallery=new Shape();
	Info=new Shape();
	Blog=new Shape();
	FreeSpace=new Shape();
	this.contPositionY=contPositionY;
	container.y=contPositionY;
	this.addChild(container);
	container.addChild(VerPromo);
	container.addChild(Gallery);
	container.addChild(Info);
	container.addChild(Blog);
	container.addChild(FreeSpace);
	drawItem(VerPromo,1,0xFFFFFF,1);
	drawItem(Gallery,2);
	drawItem(Info,3);
	drawItem(Blog,4);
	drawItem(FreeSpace,5);
	drawLines();
	container.scaleX=.1;
	TweenLite.to(container, .9, {scaleX:1});
}
function drawItem(ShapeName:Shape,itemCount:uint,fillColor:uint=0x000000, itemAlpha:Number=.8):void {
	if (itemCount<5) {
		itemXpos=(itemCount-1)*btnWidth;
		ShapeName.graphics.beginFill(fillColor, itemAlpha);
		ShapeName.graphics.drawRect(itemXpos,0,btnWidth,btnHeight);
		ShapeName.graphics.endFill();
	} else {
		itemXpos=(itemCount-1)*btnWidth;
		ShapeName.graphics.beginFill(fillColor, itemAlpha);
		ShapeName.graphics.drawRect(itemXpos,0,19000,btnHeight);
		ShapeName.graphics.endFill();
	}
}
function drawLines():void {
	LinesDev=new Shape();
	addChild(LinesDev);
	LinesDev.scaleX=.1;
	for (var i:uint=0; i<5; i++) {
		LinesDev.graphics.moveTo(i*btnWidth,contPositionY);
		LinesDev.graphics.lineStyle(1,0xCCCCCC, .3);
		LinesDev.graphics.lineTo(i*btnWidth,contPositionY+btnHeight);
	}
	TweenLite.to(LinesDev, .9, {scaleX:1});
}
Добавлено через 10 минут
К стати, есть ли какие-то преимущества того, чтобы писать классы если делаешь флеш-сайт???

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

Регистрация: Mar 2010
Адрес: 54.713862552265084 = 20.442724227905273
Сообщений: 449
Отправить сообщение для stweet с помощью Skype™
Предполагаю почему в этой теме больше ни кто ни стал отвечать. Автор, знаете такую операцию: "вопрос-ответ"? Что касается кнопок, суть ясна. Не ясен вопрос:
Цитата:
К стати, есть ли какие-то преимущества того, чтобы писать классы если делаешь флеш-сайт???
А как вы собрались писать сайт? Вам бы почитать малость про ООП и ... хотя бы слегка познать терминологию. А после браться за распределение задач(на листочке, ручкой) и только потом уже делать чертёж своего будущего проекта, и только после личного удовлетворения от написанного в листке и разложенного по полочкам открывать девелоп или в какой среде вы там пишите. И приниматься за реализацию поставленных себе задач. Поверьте, метод тыка вам не помощник.

Добавлено через 16 минут
добавлю малость ответов.
Цитата:
Как сделать так, чтобы каждый прямоугольник был как кнопка и реагировал на наведение?
легко =)
Код AS3:
button.buttonMode = true;
далее:
Цитата:
У меня не хватате опыта, но мне кажется как раз что это потому что прямоугольники отрисованы в одном спрайте?
не обязательно.
Код AS3:
button.addEventListener(MouseEvent.MOUSE_OVER, runDebug);
button.addEventListener(MouseEvent.MOUSE_OUT, runDebug);
button.addEventListener(MouseEvent.MOUSE_DOWN, runDebug);
Цитата:
TypeError: Error #1010: Термин не определен и не имеет свойств.
at drRecMenu_lines()
если вы пытаетесь скомпилировать именно этот документ: "drRecMenu_lines()"
тогда какого .... вы в конструктор основного класса пытаетесь передать параметры?
__________________
Спросишь, дурак на минуту. Если не спросишь, дурак на всю жизнь!

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

Регистрация: Mar 2010
Сообщений: 18
Цитата:
легко =)
Код AS3:
button.buttonMode = true;
Отдельно отрисованный прямоугольник - это экземпляр чего? Все того же одного спрайта. Волш правильно подсказал.

ООП читал, хотел сдалать по модели MVC - обработчики событий в отдельном классе.

Цитата:
если вы пытаетесь скомпилировать именно этот документ: "drRecMenu_lines()"
тогда какого .... вы в конструктор основного класса пытаетесь передать параметры?
Конструктор может принимать параметры. Что вы понимаете под основным классом? Я его компилирую через фла-файл прописывая в инстансе этот класс.

IDE Flash CS5.


Последний раз редактировалось asterion; 29.03.2011 в 10:19.
Старый 29.03.2011, 10:29
gloomyBrain вне форума Посмотреть профиль Отправить личное сообщение для gloomyBrain Найти все сообщения от gloomyBrain
  № 7  
Ответить с цитированием
gloomyBrain
 
Аватар для gloomyBrain

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Цитата:
хотел сдалать по модели MVC - обработчики событий в отдельном классе
Это не имеет отношения к реализации MVC. Может, еще про ООП почитать? =) В конечном итоге, Вам же будет проще и понятнее.
__________________
...вселенская грусть

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

Регистрация: Mar 2010
Адрес: 54.713862552265084 = 20.442724227905273
Сообщений: 449
Отправить сообщение для stweet с помощью Skype™
Цитата:
ООП читал
тогда к чему такие вопросы:
Цитата:
К стати, есть ли какие-то преимущества того, чтобы писать классы если делаешь флеш-сайт???
Добавлено через 1 минуту
Цитата:
Конструктор может принимать параметры. Что вы понимаете под основным классом?
Прочтите хотя бы первую главу у К.Мука.
__________________
Спросишь, дурак на минуту. Если не спросишь, дурак на всю жизнь!

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

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

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


 


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


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