【问题标题】:How to properly use store.* in conjunction with storyboard如何正确使用 store.* 与情节提要
【发布时间】:2014-05-18 01:46:51
【问题描述】:

我正在使用 Corona 的“商店”库向我的基于故事板的游戏添加应用内付款。由于我有多个场景可以进行不同的购买,所以我想了解一下在哪里调用 store.init() 以及在哪里放置它的回调。

例如,如果用户从“城镇”场景购买游戏内货币,我需要更新视图以反映新的货币数量。如果他们从“战斗”场景中购买了一把剑,我需要用新剑更新战斗视图。将场景特定逻辑放入主事务回调的最佳方法是什么?

我能想到的一种方法是在全局显示对象(例如情节提要场景)上注册自定义事件侦听器,以侦听购买事件,并从主回​​调中调度事件。但是让场景对象全局化感觉很危险。另一种方法是在每次购买时调用 store.init() 并为每种购买类型(或至少为每个场景)传递不同的回调。但是我不确定这是否符合犹太教规。

在我看来,这些都不是一个很棒的设计。有更好的想法吗?谢谢!

【问题讨论】:

    标签: coronasdk corona-storyboard


    【解决方案1】:

    基本上我所做的是围绕 corona 商店的包装类。 我使用这个包装器来存储产品、购买它们等(以及处理特定于平台的差异)。

    我的包装类在游戏开始时在 main.lua 顶部初始化一次,然后我只需调用 myStore:purchase(id, callback) 即可在特定页面上购买产品。

    对于视图/事件、页面,您可以在您的商店中使用:

    Runtime:dispatchEvent({name='productBought', id=productId})
    

    你所有的视图对象都可以有:

    Runtime:addEventListener( 'productBought', callback)
    

    然后您将必须检查您的回调是否是正确的产品 ID 等。 如果您想让事件不那么通用,只需使用以下内容:

    在商店方面:

    Runtime:dispatchEvent({name='productBought'..productId})
    

    在视图方面:

    Runtime:addEventListener( 'productBought'..productId, callback)
    

    这样只有这个特定的对象会收到这个:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多