ios – SpriteKit得分是随机的

ios – SpriteKit得分是随机的,第1张

概述我正在用SpriteKit创建一个游戏并尝试在碰撞时增加分数.由于某些奇怪的原因,每次得分增加时,它都是一个随机数而不仅仅是1. 在didBeginContact方法中,我在子d和外星人之间发生了碰撞.每次碰撞时我都希望得分能够将得分增加1.除非它有自己的想法,并且会随机增加1到6之间的数字.我已经完成了每行代码并尝试添加多次进入游戏,但它也不会像我希望的那样增加1.目前我的代码是这样的. 在我的 我正在用SpriteKit创建一个游戏并尝试在碰撞时增加分数.由于某些奇怪的原因,每次得分增加时,它都是一个随机数而不仅仅是1.

在dIDBeginContact方法中,我在子d和外星人之间发生了碰撞.每次碰撞时我都希望得分能够将得分增加1.除非它有自己的想法,并且会随机增加1到6之间的数字.我已经完成了每行代码并尝试添加多次进入游戏,但它也不会像我希望的那样增加1.目前我的代码是这样的.

在我的头文件中,我为分数创建了一个属性:

@property (nonatomic) int score;

然后在我的主要游戏场景中,我添加以下内容

-(voID)setscore:(int)score{    _score = score;    _scoreLabel.text = [Nsstring stringWithFormat:@"%d",score];}

在我的init方法中,我还将分数设置为从0开始

self.score = 0;

在我的新游戏方法中,我也确保将分数设置为0

self.score = 0;

然后我的碰撞检测看起来像这样.我用self.score增加分数;

if (firstbody.categoryBitMask == kAlIEncategory && secondBody.categoryBitMask == kBulletcategory) {        //Collision Between Bullet & AlIEn        self.score++;        if (firstbody.node) {            [self alIEnExplosion:firstbody.node.position];            [firstbody.node removeFromParent];        }        if (secondBody.node) {            [self bulletExplosion:secondBody.node.position];            [secondBody.node removeFromParent];        }    }

更新:我添加了一个NSLog来显示分数在控制台中的更新情况.它确切地显示了分数在1到6之间随机更新的情况.控制台的屏幕截图显示分数更新为6,它应该只有1

解决方法 在Box2D(SpriteKit内部使用的物理引擎)中,单个联系人可以生成相关回调函数的多个调用.

因此,您的分数值会多次递增,因为您的方法dIDBeginContact会针对同一个联系人多次调用.

您可以通过多种方式阻止此行为.
例如.如果您的外星人只能被子d击中一次,您可以添加一个BOol属性isAlive to AlIEn并更改您的代码如下.

//Collision Between Bullet & AlIEnif (firstbody.categoryBitMask == kAlIEncategory && secondBody.categoryBitMask == kBulletcategory) {    AlIEn * alIEn = nil;    if ([firstbody.node isKindOfClass:AlIEn.class]) {        alIEn = (AlIEn*)firstbody.node     } else if ([secondBody.node isKindOfClass:AlIEn.class]) {        alIEn = (AlIEn*)secondBody.node     }    if (alIEn && alIEn.isAlive) {        alIEn.isAlive = NO        self.score++;        if (firstbody.node) {            [self alIEnExplosion:firstbody.node.position];            [firstbody.node removeFromParent];        }        if (secondBody.node) {            [self bulletExplosion:secondBody.node.position];            [secondBody.node removeFromParent];        }    }}
总结

以上是内存溢出为你收集整理的ios – SpriteKit得分是随机的全部内容,希望文章能够帮你解决ios – SpriteKit得分是随机的所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1044776.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存