我用游戏中的货币开发了一款游戏。当我测试游戏(当前在Alpha上,并在Google Play上关闭内部)并尝试仅通过按一次按钮购买金币时,我收到几次购买成功。结果是我没有购买100个硬币,而是得到了200个硬币,有时是500个硬币,有时是300个等等。在我从Google Play收到的确认电子邮件中,仅发生了一笔交易。 这是购买成功事件的代码:
public function _customEvent_100gold():Void
{
if((_adding100gold == false))
{
_adding100gold = true;
_byinggold = true;
_secondsbeforeclose = 0;
Engine.engine.setGameAttribute("gold", ((Engine.engine.getGameAttribute("gold") : Float) + 100));
trace("adding 100 gold");
_coinicon.setX((actor.getX() + (((((actor.getWidth()) - getFont(660).font.getTextWidth(("" + (Engine.engine.getGameAttribute("gold") : Float)), getFont(660).letterSpacing)/Engine.SCALE) / 2) + 20) - 45)));
purchasesUse("100gold");
purchasesGoogleConsume("100gold");
playSound(getSound(795));
saveGame("mySave", function(success:Bool):Void
{
runLater(1000 * 0.6, function(timeTask:TimedTask):Void
{
_pressedonce = false;
_adding100gold = false;
}, actor);
_coinicon.growTo(145/100, 145/100, 0.3, Easing.elasticOut);
runLater(1000 * 0.3, function(timeTask:TimedTask):Void
{
_secondsbeforeclose = 0;
_100gold.growTo(100/100, 100/100, 0.3, Easing.elasticOut);
_coinicon.growTo(100/100, 100/100, 0.6, Easing.elasticOut);
runLater(1000 * 0.3, function(timeTask:TimedTask):Void
{
_byinggold = false;
}, actor);
}, actor);
});
}
}
因此,据我了解,我的布尔值“ adding100gold”应仅在成功购买后的0.6秒内阻止多次运行此代码。从调试日志中,我可以看到这段代码几乎同时运行了几次。 奇怪的是,我还有其他应用程序内产品始终向我发送“购买失败”消息,并且我也连续几次在测试设备上收到该消息。这也表明它也多次运行失败的事件,而不是应该运行的次数。 那么如何解决呢?
更新: 我创建了一个全新的Google帐户,并为游戏中的1000个硬币创建了一个新的产品ID。因此,当我在设备上按下按钮进行测试时,我购买了1000个硬币,当我第二次按下按钮时,我经历了购买过程,但收到的不是1000个而是2000个硬币。当我第三次按下按钮时,我收到了3000个硬币。看来问题不在于代码,而在于我的设备和Google Play之间的某个地方。有什么我可以检查的吗?就像我已经检查了付款方式和公钥一样。还有什么?