我有一个奇怪的问题,我不知道是什么导致它。我在斯威夫特这里工作,我在应用程序购买设置为我的精灵套件游戏在一个单独的视图控制器临时来自我的SKScene。当用户触摸应用内购买视图控制器时,展开segue会将用户带回游戏。
应用程序内购买是消费品,一切运作良好,除了我有一个非常奇怪的公共变量问题,我需要在购买一个IAP时改变。
我有一个名为lives
的公共int,它在我的游戏开头设置为1.它通过标签输出给用户使用:livesCountLabel.text = "\(lives)"
购买应用内购买时,我会调用以下方法:
func iap1Func() { //This func does the thing that they payed for
print("YOU JUST BOUGHT A LIFE")
lives++
}
这应该将公共lives
变量增加1.我已经检查过它使用println
来执行此操作。因为用户通过暂停屏幕访问IAP,所以我在恢复功能中更新了生命标签:
func deletePauseScreen() {
pauseScreen.removeFromParent()
restartButton.removeFromParent()
resumeButton.removeFromParent()
homeButton.removeFromParent()
iapButton.removeFromParent()
livesCountLabel.text = "\(lives)"
}
这是第一次,如果用户的生命计数是1并且他们购买了IAP,当他们返回游戏时他们的生命计数是2.此外,如果用户留在IAP上查看控制器并继续购买IAP,lives
增加1,就像它应该的那样 - 1,2,3等等。
问题在于,如果用户返回游戏,然后回到IAP屏幕并购买另一个生命,lives
上升到2.并且下一次上升3,按4等我不知道造成这种情况的原因是什么,因为lives++
每次只能使lives
增加1。 IAP功能也只被调用一次 - 我检查过 - 所以这不是问题。
这里发生了什么?我该怎么办?是否有任何更新功能我可以写,以确保每次购买IAP时生命增加1?
编辑:
iap1Func
是通过我在这里创建的UIButton调用的:
//IAPs button1 set up
let iap1Image = "iapBtn1"
let iap1BtnImage = UIImage(named: iap1Image)
let iapButton1 = UIButton(type: UIButtonType.System)
iapButton1.frame = CGRectMake(100, 100, screenSize.width * (180/320), screenSize.height * (41/568))
iapButton1.center = CGPointMake(screenSize.width * (195/320), screenSize.height * (50/568)) //These x,y actually control position
iapButton1.setBackgroundImage(iap1BtnImage, forState: .Normal)
iapButton1.setTitle("", forState: UIControlState.Normal)
iapButton1.addTarget(self, action: "iap1Action:", forControlEvents: UIControlEvents.TouchUpInside)
通过我的IAP代码中的这个功能:
func iap1Action(sender:UIButton!)
{
print("Trigger IAP 1")
for product in list {
let prodID = product.productIdentifier
if(prodID == "saviors.iap1") {
p = product
buyProduct()
break;
}
}
}