PDA

Просмотр полной версии : Привязка одного класса к разным картинкам.


Astend
29.09.2013, 22:20
Доброго времени суток.

Вопрос в том, как привязать один класс к разным картинкам.

Пояснение:
Есть класс: Pen от него наследуется класс BallPoint.
Нарисовал Шариковые Ручки: ballPoint1,ballPoint2,ballPoint3 все конвертировал в symbol.
ballPoint1 связал с классом BallPoint.
ballPoint2 связать с классом BallPoint, не могу.
ballPoint3 связать с классом BallPoint, тоже не могу.

Как это осуществить?

Tails
29.09.2013, 22:35
Очень странно поставленный вопрос, видимо из-за недопонимания вами сути проблемы.
Попробуйте лучше объяснить, чего конкретно вы хотите добиться.

Astend
29.09.2013, 22:43
По плану 3 разные картинки должны выполнять одну и туже функцию.
Например:

var pen:Pen = new ballPoint1();
var pen1:Pen = new ballPoint2();
var pen2:Pen = new ballPoint3();

Мы должны иметь 3 одинаковых по функциям Шариковых ручки, но с разными картинками.

Я не знаю как привязать ко всем трем ручкам один класс(одни и те же функции), без копи паста.

Tails
29.09.2013, 22:45
Шариковая ручка должна рисовать 3 разными картинками? Что за одинаковые функций? Какой именно одинаковый у них функционал ? (выглядят одинаково, рисуют одинаково)

Если у всех классов поведение и функционал одинаковый, нет смысла использовать наследование. Начните с описания класса ручки:

public class Pen extends Sprite{
}

Затем, добавьте классу Pen - методы скинования или установки текстуры для рисования:

public function setSkin(skin:DisplayObject):void{
// ...
}

В метод вы сможете передать нужный вид для вашей ручки:
var pen1:Pen = new Pen;
pen1.setSkin(new RedPen); // RedPen - Спрайт с нарисованной ручкой, или картинка.
addChild(pen1);
Таким образом, вы разделите "поведение" от "отображения".

Astend
29.09.2013, 23:11
Ладно, поставим вопрос по другому.

Я создаю новый класс
var pen:Pen = new BallPoint();

как к pen прикрутить картинку?

Tails
29.09.2013, 23:23
Ладно, поставим вопрос по другому.

Я создаю новый класс
var pen:Pen = new BallPoint();

как к pen прикрутить картинку?

Этим вы не создаёте новый класс. Вы создаёте новый экземпляр класса BallPoint. Вы работаете во Flash IDE?

Вам нужно:
Создать отдельный .as файл, в котором вы напишите свой класс Pen с реализацией необходимого вам функционала.
Краткий пример оформления класса я описал в предыдущем сообщений.

Далее, вы просто будете использовать у себя в коде ваш класс Pen:
var pen1:Pen = new Pen();
var pen2:Pen = new Pen();
var pen3:Pen = new Pen();

pen1.setSkin(new BallPoint);
pen2.setSkin(new BoxPoint);
pen3.setSkin(new RedPoint);

Вся логика у вас будет находиться в классе Pen. Методом setSkin - вы просто будете указывать отображение/рисование для вашей ручки.

Astend
29.09.2013, 23:27
Спасибо! Вы меня поняли.
Именно этот ответ мне и нужен был...

Добавлено через 38 минут
А можно узнать как установить эту картинку/symbol?
public function setSkin(skin:DisplayObject):void{
// ...

Что должно быть вместо //.. ?
this.skin = skin;
не работает

Dip52
30.09.2013, 00:43
Спасибо! Вы меня поняли.
Именно этот ответ мне и нужен был...

Добавлено через 38 минут
А можно узнать как установить эту картинку/symbol?
public function setSkin(skin:DisplayObject):void{
// ...

Что должно быть вместо //.. ?
this.skin = skin;
не работает

Попробуйте изменить имя переменной аргумента на отличное от skin.

Tails
30.09.2013, 00:46
Что должно быть вместо //.. ?
В зависимости от того, что вы хотите сделать.
Это может быть рисуемое изображение, или вид самой ручки. Для второго случая, самый простейший вариант:
public function setSkin(skin:DisplayObject):void{
addChild(skin);
}

caseyryan
30.09.2013, 12:51
Попробуйте изменить имя переменной аргумента на отличное от skin.
Это не важно. Если написано this.someVar = someVar, то не имеет значения то, что параметр называется так же как поле класса. Ключевое слово this как раз говорит программе о том, что нужно использовать поле класса, а не параметр

Astend
01.10.2013, 01:11
Все работает спасибо.

Добавлено через 8 минут
Кстате заинтересовал вопрос по IDE (Flash Builder 4.5)
Вот кусочек моего кода

import model.Hero;
import model.ItemTable;

public class Inventory {
private var hero:model.Hero;
private var invList:Array = new Array();

public function Inventory(hero:model.Hero)
{
this.hero = hero;
}



Вопрос: почему нужно прописывать перед каждым классом имя пакета?
Это не настроен IDE, или я что то не правильно делаю?

я представил если у меня будет 5 папок, или больше, это что будет примерно так?:
var examlpe:folder1.folder2.folder3.folder4.folder5.Example;

maincode
01.10.2013, 09:38
Это не важно. Если написано this.someVar = someVar, то не имеет значения то, что параметр называется так же как поле класса. Ключевое слово this как раз говорит программе о том, что нужно использовать поле класса, а не параметр

Если в проекте есть пакет имя которого совпадает с именем переменной - могут быть проблемы с компиляцией во FlashBuilder-е.

caseyryan
01.10.2013, 09:51
Если в проекте есть пакет имя которого совпадает с именем переменной - могут быть проблемы с компиляцией во FlashBuilder-е.
К чему там цитата моего поста? ;)

Вопрос: почему нужно прописывать перед каждым классом имя пакета?
Вообще, по идее это должно быть прописано еще в директиве import. Но, возможно в корневой директории лежит класс Hero, который и вызывает конфликт с model.Hero

maincode
01.10.2013, 11:32
К чему там цитата моего поста? ;)

Я к тому, что иногда полезно изменить имя переменной :) начинающие программисты не всегда видят проблему глазами

Astend
01.10.2013, 19:08
Но, возможно в корневой директории лежит класс Hero, который и вызывает конфликт с model.Hero

Корневая директория моего проекта или Flash?

in4core
01.10.2013, 21:58
А слово интерфйесы не знакомо? тут как раз оно самое то. IPen