如何从 Swift 中另一个 class 中的侦听器调用 SKScene 中的方法?
How To invoke method in SKScene from a listener in another class in Swift?
我有一个单独的 class 来处理我的 adMob
代码。
在这个 class 中,我有所有的侦听器方法,例如:
func rewardBasedVideoAd(_ rewardBasedVideoAd: GADRewardBasedVideoAd, didRewardUserWith reward: GADAdReward) {...}
在我的 SKScene 中,我提供了 RewardedAds
,我还需要一个方法,当 rewardBasedVideoAd
方法被调用时,该方法将被调用。
我试过这样实现 delegate
方式:
在 AdsManager
class:
protocol Ads_Rewarded_SupportDelegate: class{
func rewardedFinishSuccessfuly()
func rewardedAdClosed()}
并且在 Ads_Rewarded_Support
我添加了:
weak var delegate: Ads_Rewarded_SupportDelegate?
在
func rewardBasedVideoAd(_ rewardBasedVideoAd: GADRewardBasedVideoAd, didRewardUserWith reward: GADAdReward) {
delegate?.rewardedFinishSuccessfuly()}
在我的 SKScene 中:
class GameScene: SKScene, Ads_Rewarded_SupportDelegate {
private let rewardedAd = Ads_Rewarded_Support()
rewardedAd.delegate = self
最终:
func rewardedFinishSuccessfuly() {
print("rewarded Finish Successfuly")
}
但我仍然无法调用此 rewardedFinishSuccessfuly
方法。
当调用 rewardBasedVideoAd
时,如何在 SKScene
中调用我的方法?
如果对项目有帮助,link:
project on Github
编辑:
当我从应该激活委托方法的 GameScene
手动方法调用时,它起作用了。所以我的问题在pointer
。它没有保持实例的活动状态,所以当 didRewardUserWith
被调用时,我的 GameScene
不再是委托。
知道如何解决这个问题吗?
您对 Ads_Rewarded_SupportDelegate
的实施很好。
您遇到的问题是因为 reward based video ad fails to load。
因此,不会调用以下内容:
func rewardBasedVideoAd(_ rewardBasedVideoAd: GADRewardBasedVideoAd, didRewardUserWith reward: GADAdReward)
func rewardBasedVideoAdDidClose(_ rewardBasedVideoAd: GADRewardBasedVideoAd)
检查您的控制台日志,您会看到:
You are currently using version 7.25.0 of the SDK.
Please consider updating your SDK to the most recent SDK version
to get the latest features and bug fixes.
Error Domain=com.google.ads Code=1 "Request Error: No ad to show."
UserInfo={NSLocalizedDescription=Request Error: No ad to show.,
NSLocalizedFailureReason=Request Error: No ad to show.}
我会按照这里的建议去做。希望这能解决您遇到的问题!
有效!
问题是我指向 AdsSupport
class 的指针不存在。
我补充说:
return Ads_Rewarded_Support.rewardedAdsPointer!
并调用广告:
rewardedAd = Ads_Rewarded_Support().presentRewardAdFor(scene: self)
然后我将委托设置为自己。
感谢您尽最大努力帮助我处理这个令人头疼的案子。
我有一个单独的 class 来处理我的 adMob
代码。
在这个 class 中,我有所有的侦听器方法,例如:
func rewardBasedVideoAd(_ rewardBasedVideoAd: GADRewardBasedVideoAd, didRewardUserWith reward: GADAdReward) {...}
在我的 SKScene 中,我提供了 RewardedAds
,我还需要一个方法,当 rewardBasedVideoAd
方法被调用时,该方法将被调用。
我试过这样实现 delegate
方式:
在 AdsManager
class:
protocol Ads_Rewarded_SupportDelegate: class{
func rewardedFinishSuccessfuly()
func rewardedAdClosed()}
并且在 Ads_Rewarded_Support
我添加了:
weak var delegate: Ads_Rewarded_SupportDelegate?
在
func rewardBasedVideoAd(_ rewardBasedVideoAd: GADRewardBasedVideoAd, didRewardUserWith reward: GADAdReward) {
delegate?.rewardedFinishSuccessfuly()}
在我的 SKScene 中:
class GameScene: SKScene, Ads_Rewarded_SupportDelegate {
private let rewardedAd = Ads_Rewarded_Support()
rewardedAd.delegate = self
最终:
func rewardedFinishSuccessfuly() {
print("rewarded Finish Successfuly")
}
但我仍然无法调用此 rewardedFinishSuccessfuly
方法。
当调用 rewardBasedVideoAd
时,如何在 SKScene
中调用我的方法?
如果对项目有帮助,link: project on Github
编辑:
当我从应该激活委托方法的 GameScene
手动方法调用时,它起作用了。所以我的问题在pointer
。它没有保持实例的活动状态,所以当 didRewardUserWith
被调用时,我的 GameScene
不再是委托。
知道如何解决这个问题吗?
您对 Ads_Rewarded_SupportDelegate
的实施很好。
您遇到的问题是因为 reward based video ad fails to load。
因此,不会调用以下内容:
func rewardBasedVideoAd(_ rewardBasedVideoAd: GADRewardBasedVideoAd, didRewardUserWith reward: GADAdReward)
func rewardBasedVideoAdDidClose(_ rewardBasedVideoAd: GADRewardBasedVideoAd)
检查您的控制台日志,您会看到:
You are currently using version 7.25.0 of the SDK.
Please consider updating your SDK to the most recent SDK version
to get the latest features and bug fixes.
Error Domain=com.google.ads Code=1 "Request Error: No ad to show."
UserInfo={NSLocalizedDescription=Request Error: No ad to show.,
NSLocalizedFailureReason=Request Error: No ad to show.}
我会按照这里的建议去做。希望这能解决您遇到的问题!
有效!
问题是我指向 AdsSupport
class 的指针不存在。
我补充说:
return Ads_Rewarded_Support.rewardedAdsPointer!
并调用广告:
rewardedAd = Ads_Rewarded_Support().presentRewardAdFor(scene: self)
然后我将委托设置为自己。 感谢您尽最大努力帮助我处理这个令人头疼的案子。