Flash As3游戏:类问题

时间:2010-11-18 23:17:15

标签: flash actionscript-3

我正在使用flash develop和flash cs5在as3中制作游戏。一切都是面向对象的。我想知道,我应该有一个“网关”类,它具有对其他类的所有实例化的属性引用,我只是将此网关类传递给新对象,因此它们可以访问每个类。像这样:

 var block:Block = new Block(gateway);

 //In the block class:
 this.gateway.player.setHealth(100);
 //Or:
 this.gateway.input.lock();

这是单身模式还是什么?我应该这样做吗?

3 个答案:

答案 0 :(得分:2)

我以前用过这个想法。我用它作为模型。 dataModel - 或者dumb存储对象的有效主干 - 或对象的引用。这很有用,因为你可以随时找到一些东西而无需走遍课程。

我已经将它用作单例 - 因此您不必担心可能会创建新版本的dataModel并引用空白对象。有点让你不停地搔头几个小时。 它看起来像这样:

package com.strangemother.models.DataModel
{
    private static var _dataModel:DataModel;
    /**
    an example of storing you items.
    */
    public var character:Character;

    public static function getInstance():DataModel
    {


     if(!_dataModel)
        {
  _dataModel= new DataModel(SingletonLock); 
  return _dataModel;

     }

 public function DataModel(lock:Class)
 {
  if(!lock is SingletonLock)
  {
   throw new Error("DataModel is a singleton. Use DataModel.getInstance() to use.");
  }
 }
}

加入@AttackingHobo:

this is a one ( 1 ) this is the letter L lowercase ( l )

答案 1 :(得分:1)

可能是快速尝试某种方法的好方法,但从长远来看,网关对象将变得如此巨大,并且不同对象之间的关系如此之多以至于它将落在自身的重量之下。

此外,面向对象的一个​​方面是将代码的某些部分的访问封装到仅需要它的那些对象。

答案 2 :(得分:0)

这个概念叫做inversion of control。看起来你已经创建了service locator。还有其他方法可以实现控制反转,例如dependency injection。 Martin Fowler对整个概念有一个excellent article,你应该阅读它然后自己决定。