1

我用游戏内货币开发了一款游戏。当我测试游戏(目前它在 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 之间的某个地方。有什么我可以检查的吗?就像我已经检查了我的付款方式和公钥一样。还有什么?

4

0 回答 0