我正在使用Corona的“商店”库为我的基于故事板的游戏添加应用内付款。由于我有多个场景可以进行不同的购买,我想了解一下调用store.init()的位置以及放置回调的位置。
例如,如果用户从“城镇”场景购买游戏中的货币,我将需要更新视图以反映新的货币金额。如果他们从“战斗”场景中购买一把剑,我将需要用新剑更新战斗视图。将场景特定逻辑引入主事务回调的最佳方法是什么?
我能想到的一种方法是在全局显示对象(例如故事板场景)上注册自定义事件侦听器,该对象侦听购买事件,并从主回调调度事件。但是使场景对象全局变得危险。另一种方法是每次购买时调用store.init()并为每种购买类型(或至少针对每个场景)传递不同的回调。但是我不确定那是否是犹太人。
对我来说,这些似乎都不是一个很好的设计。有更好的想法吗?谢谢!
答案 0 :(得分:1)
基本上我所做的是围绕corona商店的包装类。 我使用这个包装器来存储产品,购买它们等(并且还处理特定于平台的差异)。
我的包装类在游戏开始时初始化一次,在main.lua的顶部,然后我只需要调用myStore:buy(id,callback)来购买特定页面上的产品。
对于视图/活动页面,您可以在商店中使用:
Runtime:dispatchEvent({name='productBought', id=productId})
所有视图对象都可以:
Runtime:addEventListener( 'productBought', callback)
然后你必须检查你的回调它是正确的产品ID等。 如果您想使事件不那么通用,只需使用类似:
在商店方面:
Runtime:dispatchEvent({name='productBought'..productId})
在观点方面:
Runtime:addEventListener( 'productBought'..productId, callback)
这样只有这个特定的对象才能收到:)