Должен ли я объединить объектную модель со спрайтом или сделать ссылку - PullRequest
0 голосов
/ 21 февраля 2012

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

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

public class WeaponModel
{

    public damage:Int = 8;

    public function Weapon(){
        //Do the constructor code
    }

    public function get damage():int{
        return this.damage;
    }
}

public class WeaponSprite extends Sprite
{

    var weaponModel:WeaponModel;

    public function WeaponSprite(weaponModel:WeaponModel){
        this.weaponModel = weaponModel;
    }
public function get weaponModel():WeaponModel{
        return this._weaponModel;
    }
}

И затем, когда мне нужно нанести урон, просто вызовите метод WeaponSprite WeaponModel (), когда мне нужно получить доступ кметоды или я должен просто объединить два вместе в один класс .?

1 Ответ

0 голосов
/ 21 февраля 2012

Я бы не стал передавать ссылку на модель в представление.Более разобщенным подходом будет передача идентификатора модели представлению.Обеспечить доступ к идентификатору модели через геттер.В общем, вы хотите сохранить знание моделей вне представлений и знание представлений вне моделей.

Ниже приведен пример того, как класс контроллера может управлять отношениями между представлениями и моделями.

class View
{
   public function View( modelId:int )
   {
      this._id = modelId;
   }

   public function get modelId():int { return this._id; }

   protected function doSomething():void 
   {
        dispatchEvent( new Event(Event.DOING_SOMETHING) );
   }
}

class Controller 
{
    function init()
    {
        for each( model in models )
        {
            var view = new View( model.id );
            view.addEventListener( Event.DOING_SOMETHING, onViewDoingSomething );
        }
    }

    protected function onViewDoingSomething( event:Event ):void 
    {
       if( event.target is View )
       var view:View = event.target as View;
       // -- do something with view.modelId here
    }
}

Еще одна вещь, которую нужно учитывать, - это насколько велико приложение, которое вы создаете, и сколько людей будет над ним работать.При создании быстрого прототипа вы можете не заботиться о соблюдении строгих шаблонов ООП.Однако чем крупнее и сложнее становится проект, тем больше вероятность того, что фреймворк или конкретные шаблоны проектирования будут вам полезны.

Если вы заинтересованы в изучении фреймворка, обеспечивающего согласованные и гибкие проекты, подумайте о взгляде на ножки робота .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...