Просмотр полной версии : Привязка одного класса к разным картинкам.
Доброго времени суток.
Вопрос в том, как привязать один класс к разным картинкам.
Пояснение:
Есть класс: Pen от него наследуется класс BallPoint.
Нарисовал Шариковые Ручки: ballPoint1,ballPoint2,ballPoint3 все конвертировал в symbol.
ballPoint1 связал с классом BallPoint.
ballPoint2 связать с классом BallPoint, не могу.
ballPoint3 связать с классом BallPoint, тоже не могу.
Как это осуществить?
Очень странно поставленный вопрос, видимо из-за недопонимания вами сути проблемы.
Попробуйте лучше объяснить, чего конкретно вы хотите добиться.
По плану 3 разные картинки должны выполнять одну и туже функцию.
Например:
var pen:Pen = new ballPoint1();
var pen1:Pen = new ballPoint2();
var pen2:Pen = new ballPoint3();
Мы должны иметь 3 одинаковых по функциям Шариковых ручки, но с разными картинками.
Я не знаю как привязать ко всем трем ручкам один класс(одни и те же функции), без копи паста.
Шариковая ручка должна рисовать 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);
Таким образом, вы разделите "поведение" от "отображения".
Ладно, поставим вопрос по другому.
Я создаю новый класс
var pen:Pen = new BallPoint();
как к pen прикрутить картинку?
Ладно, поставим вопрос по другому.
Я создаю новый класс
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 - вы просто будете указывать отображение/рисование для вашей ручки.
Спасибо! Вы меня поняли.
Именно этот ответ мне и нужен был...
Добавлено через 38 минут
А можно узнать как установить эту картинку/symbol?
public function setSkin(skin:DisplayObject):void{
// ...
Что должно быть вместо //.. ?
this.skin = skin;
не работает
Спасибо! Вы меня поняли.
Именно этот ответ мне и нужен был...
Добавлено через 38 минут
А можно узнать как установить эту картинку/symbol?
public function setSkin(skin:DisplayObject):void{
// ...
Что должно быть вместо //.. ?
this.skin = skin;
не работает
Попробуйте изменить имя переменной аргумента на отличное от skin.
Что должно быть вместо //.. ?
В зависимости от того, что вы хотите сделать.
Это может быть рисуемое изображение, или вид самой ручки. Для второго случая, самый простейший вариант:
public function setSkin(skin:DisplayObject):void{
addChild(skin);
}
caseyryan
30.09.2013, 12:51
Попробуйте изменить имя переменной аргумента на отличное от skin.
Это не важно. Если написано this.someVar = someVar, то не имеет значения то, что параметр называется так же как поле класса. Ключевое слово this как раз говорит программе о том, что нужно использовать поле класса, а не параметр
Все работает спасибо.
Добавлено через 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
К чему там цитата моего поста? ;)
Я к тому, что иногда полезно изменить имя переменной :) начинающие программисты не всегда видят проблему глазами
Но, возможно в корневой директории лежит класс Hero, который и вызывает конфликт с model.Hero
Корневая директория моего проекта или Flash?
А слово интерфйесы не знакомо? тут как раз оно самое то. IPen
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.