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

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

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

Регистрация: Jan 2007
Сообщений: 302
По умолчанию Добавление двох кнопок в контейнер - добавляется только одна :(

Прошу сильно не ругать за такой код, я только учусь...

Хотел бы попросить, если у кого-то есть минутка чуток оптимизировать его...

Мне нужно создать две одинаковые кнопки, но с разными именами и размещением
Подскажите как оптимизировать код на создание нескольких кнопок с разными именами и размещением, но с одинаковым поведением - пробовал вызывать функцию из мейн класса и передавать ей параметры, че т не получилось..

Делаю это таким "макаром"
buttons.as
Код AS3:
package{
 
	import flash.display.*;
	import flash.events.*;
	import flash.geom.*;
	import flash.text.*;
 
	public class buttons extends Sprite {
 
		public var b:SimpleButton = new SimpleButton();
		public var btn1:SimpleButton = new SimpleButton();
		public var btn2:SimpleButton = new SimpleButton();
 
 
		public function buttons () {
 
			b.upState = createRect(0x999999,1.0);
			b.overState = createRect(0x999980,1.0);
			b.downState = createRect(0x9999980,0.95);
			b.hitTestState = b.upState;
			trace("dsfsdssssss");
			Next();
			Prev();
 
		}
 
		function createRect(color:uint,alph:Number) {
			var shape:Shape = new Shape();
				shape.graphics.beginFill(color,alph);
				shape.graphics.drawRoundRect(0,0,80,25,20,20);
				shape.graphics.endFill();
			return shape;
		}
 
		function Prev(){
			var lab:TextField = new TextField();
				btn1=b;
				btn1.x = 10;
				btn1.y = 320;
			trace("prev");
				lab.width = 50;
				lab.text = "They call";
				lab.x = 10;
			trace("next");
				lab.y = 320;
			addChild(btn1);
			addChild(lab);
		}
 
		function Next(){
				btn2=b;
				btn2.x = 100;
				btn2.y = 100;
			trace("next");
			addChild(btn2);
		}
	}
}
вызываю в мейн и соваю в контейнер
main.as
Код AS3:
package {
 
	import flash.display.*;
	import buttons;
 
	public class main extends Sprite{
 
		public var cButt:Sprite = new Sprite();
 
		public function main(){
 
			var bt:buttons = new buttons;
 
			this.addChild(cButt);
			cButt.addChild(bt.btn1);
			cButt.addChild(bt.btn2);
		}
	}
 
 
}
добавляет только next кнопку, лейбл не добавляет и не добавляет prev кнопку.

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

Регистрация: Aug 2008
Адрес: Рязань
Сообщений: 723
напишите класс кнопки Button

в нем вы рисуете кнопку, текстовое поле и требуемые методы для ее поведения(поменять состояние при over/out)

в основном классе создаете новый экземпляр класса Button, и только тут указываете его координаты, имя здесь же задаете btn1.name = 'btn1'...
__________________
low +

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

Регистрация: Jan 2007
Сообщений: 302
Методы для поведения (поменять состояние при over/out) тоже в основном классе?
Тоисть этот код должен находится в мейн?
Код AS3:
public function buttons () {
 
			b.upState = createRect(0x999999,1.0);
			b.overState = createRect(0x999980,1.0);
			b.downState = createRect(0x9999980,0.95);
			b.hitTestState = b.upState;
			trace("dsfsdssssss");
			Next();
			Prev();
 
		}
 
 
 
 
	function Prev(){
			var lab:TextField = new TextField();
				btn1=b;
				btn1.x = 10;
				btn1.y = 320;
			trace("prev");
				lab.width = 50;
				lab.text = "They call";
				lab.x = 10;
			trace("next");
				lab.y = 320;
			addChild(btn1);
			addChild(lab);
		}
 
		function Next(){
				btn2=b;
				btn2.x = 100;
				btn2.y = 100;
			trace("next");
			addChild(btn2);
		}

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

Регистрация: Aug 2008
Адрес: Рязань
Сообщений: 723
вот что я имел в виду

основной класс
Код AS3:
package 
{
	import flash.display.Sprite;
	import flash.events.Event;
 
	/**
	 * ...
	 * @author Jewelz
	 */
	public class Main extends Sprite 
	{
 
		public function Main():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point
 
			var btn1:Button = new Button('Кнопка 1');
			btn1.name = 'btn1';
			btn1.x = 100;
			btn1.y = 100;
 
			var btn2:Button = new Button('Кнопка 2');
			btn2.name = 'btn2';
			btn2.x = 250;
			btn2.y = 100;
 
			addChild(btn1);
			addChild(btn2);
		}
 
	}
 
}
класс кнопки
Код AS3:
package  
{
	import flash.display.Sprite;
	import flash.events.MouseEvent;
	import flash.text.TextField;
 
	/**
	 * ...
	 * @author Jewelz
	 */
	public class Button extends Sprite
	{
		private var labelFld:TextField;
 
		public function Button(label:String) 
		{
			labelFld = new TextField();
			labelFld.selectable = false;
			labelFld.width = 80;
			labelFld.height = 20;
			labelFld.x = 10;
			labelFld.y = 0;
			labelFld.text = label;
			addChild(labelFld);
 
			addEventListener(MouseEvent.ROLL_OVER, onOver);
			addEventListener(MouseEvent.ROLL_OUT, onOut);
 
			onOut(null);
		}
 
		private function onOut(e:MouseEvent):void 
		{
			this.graphics.clear();
			this.graphics.beginFill(0xff0000);
			this.graphics.drawRoundRect(0, 0, 100, 20, 10, 10);
			this.graphics.endFill();
		}
 
		private function onOver(e:MouseEvent):void 
		{
			this.graphics.clear();
			this.graphics.beginFill(0xffff00);
			this.graphics.drawRoundRect(0, 0, 100, 20, 10, 10);
			this.graphics.endFill();
		}
 
	}
 
}
__________________
low +

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

Регистрация: Jan 2007
Сообщений: 302
Понятненьео, приблизительно так я себе и думал..

Спасибо.
Постал еще один вопрос.
А лучше, удобней, писать состояния кнопки функциями?
Ведь у класса SimpleButton есть свойства upState,overState и так д..

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

Код AS3:
public function Main():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point

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

Регистрация: Aug 2008
Адрес: Рязань
Сообщений: 723
тут ждем пока флешка загрузится, то есть когда появится stage

Цитата:
Сообщение от Killer_13 Посмотреть сообщение
Ведь у класса SimpleButton есть свойства upState,overState и так д..
если используете SimpleButton то думаю логично использовать его готовые методы, но советую позже написать свой класс
__________________
low +

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

Регистрация: Jan 2007
Сообщений: 302
Цитата:
но советую позже написать свой класс
- эт как понять?
Я прошу подсказать как начинать писать КОД правильно!?, чтоб он был расшыряемым и так д...

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

Регистрация: Aug 2008
Адрес: Рязань
Сообщений: 723
Цитата:
Сообщение от Killer_13 Посмотреть сообщение
- эт как понять?

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

пример я вам привел, все зависит от ваших конкретных целей

Цитата:
Сообщение от Killer_13 Посмотреть сообщение
Я прошу подсказать как начинать писать КОД правильно!?, чтоб он был расшыряемым и так д...
если класс не final то его можно расширить
__________________
low +

Старый 05.12.2009, 16:10
SamFR вне форума Посмотреть профиль Отправить личное сообщение для SamFR Посетить домашнюю страницу SamFR Найти все сообщения от SamFR
  № 9  
Ответить с цитированием
SamFR

Регистрация: Mar 2008
Адрес: Ростов-на-Дону
Сообщений: 354
Цитата:
Сообщение от Killer_13 Посмотреть сообщение
Я прошу подсказать как начинать писать КОД правильно!?, чтоб он был расшыряемым и так д...
Цитата:
Сообщение от Jewelz Посмотреть сообщение
если класс не final то его можно расширить
Возможность расширения на уровне языка ещё не значит возможность реального расширения. Чтобы класс был действительно расширяемым, его нужно правильно спроектировать, чётко определив для себя, какое поведение нужно позволять изменять, а какое – нет. Но эта тема отдельной большой статьи (или даже книги). И, к счастью, таких книг и статей немало.
Killer_13, это я вам Здесь вам вряд ли кто-то станет подробно такие вещи излагать, это не формат форума. Почитайте литературу, и обязательно попробуйте написать что-то своё. А потом отнаследуйтесь от него, и постарайтесь изменить поведение базового класса. После написания десятка-другого своих классов всё станет намного понятнее. Ибо умение, как вы говорите, писать код правильно, приходит только с опытом. Одних теоретических знаний тут недостаточно.

Я бы даже сказал, это умение не приходит никогда. Но ведь возможность в любой момент научиться чему-то новому – это ведь здорово, правда? =)


Последний раз редактировалось SamFR; 05.12.2009 в 16:26.
Старый 05.12.2009, 16:50
Killer_13 вне форума Посмотреть профиль Отправить личное сообщение для Killer_13 Найти все сообщения от Killer_13
  № 10  
Ответить с цитированием
Killer_13
 
Аватар для Killer_13

Регистрация: Jan 2007
Сообщений: 302
Правда.
Сечас читаю, - учусь по книгам
Лотт, Шалл, Питерс - Сборник рецептов ActionScript 3.0
Колин Мук - ActionScript 3.0

flash_as3_programming.pdf
flash_as3_components_help.pdf
flash_cs4_help.pdf

Может еще кто подскажет интересные статьи и литературу о AS 3 ...

Знаю, что чуток не в тему вопроса, - но все же..

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

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

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


 


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


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