Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
objective-c中实体组件模式的可用框架?_Objective C - Fatal编程技术网

objective-c中实体组件模式的可用框架?

objective-c中实体组件模式的可用框架?,objective-c,Objective C,我试图找到支持实体组件模式的objective-c框架。我看了一下Cocos2d,Kobold2d,KoboldTouch。。但它们似乎都与此无关。如果有objective-c可用的框架,有人可以指导我吗?您可以手动将实体组件模式添加到cocos2d/etc,尽管它没有直接内置到API中 在实体中使用-addChild:(等)添加组件 在组件中使用-parent访问其实体 在组件中使用-update:更新其实体 SomeCCNodeEntity.m - (id)init { if (se

我试图找到支持实体组件模式的objective-c框架。我看了一下Cocos2d,Kobold2d,KoboldTouch。。但它们似乎都与此无关。如果有objective-c可用的框架,有人可以指导我吗?

您可以手动将实体组件模式添加到cocos2d/etc,尽管它没有直接内置到API中

  • 在实体中使用
    -addChild:
    (等)添加组件
  • 在组件中使用
    -parent
    访问其实体
  • 在组件中使用
    -update:
    更新其实体
  • SomeCCNodeEntity.m

    - (id)init {
        if (self = [super init])
        {
            [self addChild:[MoveComponent node]];
        }
        return self;
    }
    
    CGPoint velocity;
    
    - (id)init {
        if (self = [super init])
        {
            velocity = CGPointMake(0, -50);
            [self scheduleUpdate];
        }
        return self;
    }
    
    - (void)update:(ccTime)delta {
        [[self parent] setPosition:ccpAdd([[self parent] position], ccpMult(velocity, delta))];
    }
    
    MoveComponent.m

    - (id)init {
        if (self = [super init])
        {
            [self addChild:[MoveComponent node]];
        }
        return self;
    }
    
    CGPoint velocity;
    
    - (id)init {
        if (self = [super init])
        {
            velocity = CGPointMake(0, -50);
            [self scheduleUpdate];
        }
        return self;
    }
    
    - (void)update:(ccTime)delta {
        [[self parent] setPosition:ccpAdd([[self parent] position], ccpMult(velocity, delta))];
    }
    
    只要调用组件的-update:方法,上面的代码就会移动实体。这在Learn-Cocos2d中有一点介绍:

    至于不同实体之间的消息传递系统,您还必须自己启动。苹果的API利用委托、通知和观察者的思想告诉其他对象一些事情。只有一个对象可以是委托,以执行另一个对象的可选或必需任务。多个对象可以注册通知或成为观察者

    这可能会很快变得复杂,特别是如果有10个对象注册为观察者,并且它们接收观察消息的顺序很重要。他们是否应该根据他们注册的顺序获得信息,如FIFO或LIFO?更复杂的事情?等等