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

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

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

Регистрация: Nov 2010
Адрес: Ярославль
Сообщений: 249
Stalin45, а вы точно создаёте непосредственно объект класса turret, а не объект класса из библиотеки, расширяющий turret? Просто такая ошибка обычно поэтому возникает.

Старый 13.01.2012, 01:13
Stalin45 вне форума Посмотреть профиль Отправить личное сообщение для Stalin45 Найти все сообщения от Stalin45
  № 12  
Ответить с цитированием
Stalin45

Регистрация: Jan 2012
Сообщений: 10
Parez, я добавлял именно базовый класс, описанный в файле as, но да, действительно, спасибо, проблему обнаружил (даже после удаления всех экземпляров объектов turret и связей с ними он выдавал ошибку, но! мне же нужен именно библиотечный класс (он графически оформлен).
Так как же создать библиотечный класс (CS4), принимающий аргумент?? Или, если так нельзя, как тогда графически оформить экземпляр?

P.S. И отсюда ещё важный вопрос: так а разве можно будет в коде файла turret.as записать в obj ссылку на библиотечный экземпляр? Он его распознает?


Последний раз редактировалось Stalin45; 13.01.2012 в 01:23.
Старый 13.01.2012, 01:22
HardCoder вне форума Посмотреть профиль Отправить личное сообщение для HardCoder Найти все сообщения от HardCoder
  № 13  
Ответить с цитированием
HardCoder
 
Аватар для HardCoder

блогер
Регистрация: Apr 2011
Сообщений: 583
Записей в блоге: 2
Да, все просто. Создаете мувиклип. В свойствах пишете где class: turret. А где base class ничего не пишете. По умолчанию base class должен быть мувиклип. Пишете свой класс turret, где он принимает параметры. И создаете экземпляр
Код AS3:
var tur:turret = new turret(hero);
Добавлено через 3 минуты
А если не подходит вам такое, то способов столько, что мама дорогая.
Класс 1
Код AS3:
public class Class1 {
   public var class2Obj:Class2;
   public function Class1(){
   }
   public function init(obj:Class1):void {      
      class2Obj = obj.
   }
}
fla файл:
Код AS3:
var class2Ins:Class2 = new Class2();
var class1Ins:Class1 = new Class1();
class1Ins.init(class2Ins);
__________________
Я мало чего умею, но зато хорошо умею учиться...


Последний раз редактировалось HardCoder; 13.01.2012 в 01:26.
Старый 13.01.2012, 01:40
Stalin45 вне форума Посмотреть профиль Отправить личное сообщение для Stalin45 Найти все сообщения от Stalin45
  № 14  
Ответить с цитированием
Stalin45

Регистрация: Jan 2012
Сообщений: 10
Ура! Ну, наконец-то...все заработало как надо! Спасибо, HardCoder!
Использовал второй предложенный вами вариант.
Но, если у вас будет время, ответьте пожалуйста на вопрос:
Если мы базовый класс turret'а сделаем обычным MC, то не могу понять, где же тогда описать сам класс turret, ведь он уже описан в пакете characters (связь с которым мы поменяли на связь с MC)?

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

блогер
Регистрация: Apr 2011
Сообщений: 583
Записей в блоге: 2
Пишем класс
Код AS3:
public class turret extends Sprite
	{
		public var target_:robot;
		internal var armour, health, energy, rotationSpeed:uint;
		internal var energyRegen:Number;
		public function turret(obj:robot) 
		{
			target_ = obj;
			armour = 500;
			health = 250;
			energy = 40;
			energyRegen = 0,1;
			rotationSpeed = 2;
		}
Не надо забывать что в свойствах мувиклипа есть две графы: class и base class! В графе class мы пишем класс turret (код которого выше). В графе base class мы пишем MovieClip. Все! Теперь наш мувиклип из библиотеки будет привязан к классу turret (код которого выше). И что бы создать экземпляр этого мувиклипа из библиотеки, нам надо
Код AS3:
var tur:turret = new turret(hero);
__________________
Я мало чего умею, но зато хорошо умею учиться...

Старый 13.01.2012, 02:06
Stalin45 вне форума Посмотреть профиль Отправить личное сообщение для Stalin45 Найти все сообщения от Stalin45
  № 16  
Ответить с цитированием
Stalin45

Регистрация: Jan 2012
Сообщений: 10
Вы не совсем поняли, так где именно хранится код, описанный вами (напр., base class раньше был в папке characters в файле turret, а код для графы class - ?)? В директории файла fla или где-то ещё?

Старый 13.01.2012, 02:16
booksmaster вне форума Посмотреть профиль Отправить личное сообщение для booksmaster Найти все сообщения от booksmaster
  № 17  
Ответить с цитированием
booksmaster

Регистрация: Jan 2012
Сообщений: 22
Вот мой способ поиска чего бы то ни было та сцене

Код AS3:
private function getObjectByName(n:String,par:DisplayObjectContainer):DisplayObject{
for (var i:int = 0;i<par.numChildren;i++)
{
if (par.getChildAt(i).name==n) {return par.getChildAt(i);} else {if (par.getChildAt(i) is DisplayObjectContainer) {
var t:DisplayObject = getObjectByName(n,DisplayObjectContainer(par.getChildAt(i)));
if (t!=null) {return t}}}
}
return null;
}
Вот только ты должен знать свойство name искомого объекта. Я, обычно, даю имена всему важному, чтоб потом можно было обратиться таким способом. Вторым параметром указываешь this или контейнер в котором лежит твой .фла. Ищет функция во всех вложеных потомках, так что, если имя знаешь, то найдет стопудово.

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

блогер
Регистрация: Apr 2011
Сообщений: 583
Записей в блоге: 2
Ваш мувиклип turret - это всего лишь "мультик". Для того чтобы этот мультик имел свое поведение, свои свойства мы пишем для него класс. Код выше
Код AS3:
public class turret extends Sprite........
Теперь этот класс надо подключить к вашему мультику. В свойствах этого мувиклипа(в библиотеке) в графе class надо написать имя созданного класса: "turret".
Теперь написанный вами класс turret имеет код actionscript но кроме того он имеет и графическое представление в виде вашего мувиклипа из библиотеки.
Графа base class указывает на базовый класс. Базовый класс = это класс от которого унаследован ваш класс turret. Эту графу можно оставить пустую. Флеш сама установит базовый класс.
Не умею более грамотно обьяснить

Добавлено через 4 минуты
booksmaster, можно пример, где такое может пригодится?
__________________
Я мало чего умею, но зато хорошо умею учиться...


Последний раз редактировалось HardCoder; 13.01.2012 в 02:23.
Старый 13.01.2012, 13:09
Parez вне форума Посмотреть профиль Отправить личное сообщение для Parez Найти все сообщения от Parez
  № 19  
Ответить с цитированием
Parez

Регистрация: Nov 2010
Адрес: Ярославль
Сообщений: 249
Ещё есть неплохой вариант привязывать графику из библиотеки к кастом классу. Сначала экспортируете ваш мувик из библиотеки для ActionScript. А в классе делаете импорт этого класса из библиотеки.
Код AS3:
import TestSymbol;
Дальше в конструкторе вашего кастом класса (расширяющего MovieClip) создаёте экземпляр класса из библиотеки и добавляете его в список отображения.

получается что-то вроде этого:

Код AS3:
import TestSymbol;
 
public class CustomClass extends MovieClip
{
      public function CustomClass():void
      {
             var clip:TestSymbol = new TestSymbol();
             addChild(clip);
      }
}
Сам очень часто так делаю.

p.s.
Либо, как вариант, чтобы класс был более универсальным, можно одним из аргументов в конструкторе передавать класс из библиотеки.
Код AS3:
public class CustomClass extends MovieClip
{
      public function CustomClass(visual:Class):void
      {
             var clip:DisplayObject = new visual();
             addChild(clip);
      }
}


Последний раз редактировалось Parez; 13.01.2012 в 13:12.
Старый 13.01.2012, 13:52
HardCoder вне форума Посмотреть профиль Отправить личное сообщение для HardCoder Найти все сообщения от HardCoder
  № 20  
Ответить с цитированием
HardCoder
 
Аватар для HardCoder

блогер
Регистрация: Apr 2011
Сообщений: 583
Записей в блоге: 2
Parez, а в чем преимущество использования композиции, вместо банальной привязки мувиклипа напрямую к классу?

Добавлено через 1 минуту
Все, понял. Преимущество в том что не обязательно наследовать класс от MovieClip или Sprite, а можно от другого класса, конструктор которого принимает обязательные параметры.
__________________
Я мало чего умею, но зато хорошо умею учиться...


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

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

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


 


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


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