|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Jun 2014
Сообщений: 558
|
Помогите разобраться с наследованием и переопределением
Доброго!
Пришло время повторного использования классов и переопределение методов, но вот беда, я так и не понял как это правильно делать вот отрывок класса родителя package singleton.sGroundUnits.bankMucus { import classesGame.killUnits.KillGroundUnit; import classesGame.options.OptionsUnits; import IParentCommon; import flash.events.Event; import nape.phys.Body; import nape.phys.BodyType; import nape.shape.Polygon; public class BankMucus extends IParentCommon { protected var body:Body; public function BankMucus() { body = new Body(BodyType.KINEMATIC); body.shapes.add(new Polygon(Polygon.box(35, -35))); body.align(); body.userData.tempSpeed = 0; } private var sprite:bankMukus_mc = new bankMukus_mc(); override public function init(e:Event):void { super.init(e); sprite.scaleY = 0.8; this.addChild(sprite); this.addEventListener(Event.ENTER_FRAME, updateSprite); this.addChild(new KillGroundUnit(sprite, body)); } protected function updateSprite(e:Event):void { sprite.x = body.position.x - sprite.width / 2; sprite.y = body.position.y - sprite.height / 2; } public function get getBody():Body { return body; } public function get getSprite():bankMukus_mc { return sprite; } public function get getLength():uint { return OptionsUnits.lengthBankMucus; } override public function removeInit(e:Event):void { super.removeInit(e); this.removeChild(sprite); this.removeEventListener(Event.ENTER_FRAME, updateSprite); } } } package singleton.sGroundUnits.fatso { import classesGame.options.OptionsUnits; import flash.events.Event; import singleton.sGroundUnits.bankMucus.BankMucus; public class Fatso extends BankMucus { public function Fatso() { } private var sprite:fatso_mc = new fatso_mc(); override public function init(e:Event):void { super.init(e); } override public function get getLength():uint { return OptionsUnits.lengthFatso; } } } |
|
|||||
Регистрация: Oct 2006
Сообщений: 2,281
|
переопределять можно только методы.Решение - описывай свой спрайт как private var sprite:MovieClip и выноси его инициализацию в конструктор/спец. метод(типа init)
Добавлено через 3 минуты ПС: в конструкторе класса-наследника принято вызывать конструктор супер-класса.(относится к обоим классам) |
|
|||||
Регистрация: Dec 2010
Адрес: Ярославль
Сообщений: 1,255
|
Можно сделать sprite protected и инициализировать его, например, в конструкторе Fatso().
Больше ничего не нужно. Хотя, тогда не понятно, зачем делать отдельный класс ради изменения одной переменной |
|
|||||
Регистрация: Jun 2014
Сообщений: 558
|
я так сделал, заработало, лучше как можно?
public class BankMucus extends IParentCommon { protected var body:Body; private var sprite:MovieClip; public function BankMucus() { body = new Body(BodyType.KINEMATIC); body.shapes.add(new Polygon(Polygon.box(35, -35))); body.align(); body.userData.tempSpeed = 0; sprite = newSprite() } protected function newSprite():MovieClip { return new bankMukus_mc(); } override public function init(e:Event):void { super.init(e); sprite.scaleY = 0.8; this.addChild(sprite); this.addEventListener(Event.ENTER_FRAME, updateSprite); this.addChild(new KillGroundUnit(sprite, body)); } package singleton.sGroundUnits.fatso { import classesGame.options.OptionsUnits; import flash.display.MovieClip; import flash.events.Event; import singleton.sGroundUnits.bankMucus.BankMucus; public class Fatso extends BankMucus { public function Fatso() { super(); } override protected function newSprite():MovieClip { return new fatso_mc; } override public function init(e:Event):void { super.init(e); } override public function get getLength():uint { return OptionsUnits.lengthFatso; } } } |
|
|||||
Регистрация: Dec 2010
Адрес: Ярославль
Сообщений: 1,255
|
neonoviiwolf, можно, но смысл происходящего не понятен.
|
|
|||||
Регистрация: Jun 2014
Сообщений: 558
|
а чё не понятного, создаётся физ объект, к нему цепляется мувик, ну и методы get/set
|
|
|||||
Регистрация: Oct 2006
Сообщений: 2,281
|
непонятно зачем тут наследование.Если объекты будут отличаться только этим спрайтом, лучше сделать один класс с возможностью устанавливать ему это свойство.
|
|
|||||
Регистрация: Dec 2010
Адрес: Ярославль
Сообщений: 1,255
|
Именно. Наследование для этой задачи не нужно.
|
|
|||||
Регистрация: Jun 2014
Сообщений: 558
|
ну у меня много юнитов будет, остальные будут отличаться сильнее
|
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Еще раз:
Переопределение касается методов, функций, действий. НЕ свойств. Если ваши юниты будут ПО-РАЗНОМУ выполнять команду стреляй(), то смысл есть. Если разница будет только в том, что один делает стреляй(простоПуля) а другой стреляй(серебрянаяПуля), то разница опять только в свойствах и переопределение не нужно. Если выполняются одни и те же действия, но с разными объектами или параметрами, то они так и остаются одними и теми же действиями. Поэтому, чтобы разбираться с темой топика, нужен правильный пример, где действительно используется переопределение метода. Иначе будет только путаница.
__________________
Reality.getBounds(this); |
Часовой пояс GMT +4, время: 12:57. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|