gpt4 book ai didi

objective-c - Sprite Kit的接触计数

转载 作者:行者123 更新时间:2023-12-03 00:46:11 27 4
gpt4 key购买 nike

我有一个物体(球)与地面接触:该球的弹力很强,与地面的接触可能超过7次。

我利用categoryBitMask和contactTestBitMask并在-(void)didBeginContact:(SKPhysicsContact *)contact中很好地设置了所有内容。

我创建了一个属性SKAction来处理声音效果,并为该 Action 分配了一个音频文件:

 self.sfxBounce1 = [SKAction playSoundFileNamed:@"bounce1.caf" waitForCompletion:NO];

我在didBeginContact中调用此sfxBounce1。关键是一切都很好。除了一个问题是我的球会弹跳很多外,但出于个人原因,我需要auddio / SKAction在球接触地面3次后停止播放。

在游戏中,球仍在3次跳动后反弹,只是我需要声音才能停止比赛。

但是,因为代码在didBeginContact方法的IF语句中,所以音频在每次与地面接触后都会继续播放。我在编程方面仍然很绿,尤其是使用Objective-C时。

下面是一些代码
-(void)didBeginContact:(SKPhysicsContact *)contact
{
if ((firstBody.categoryBitMask == ballCategory) && (secondBody.categoryBitMask == groundCategory)) //Ball & Ground contact
{
int random = arc4random() %6; //Random # generator of 7 possibilites.

switch (random) //Generated # represents a case, which in turn initiates a bounce sound upon contact.
{
case 0:
[self runAction:self.sfxBounce1];
break;
case 1:
[self runAction:self.sfxBounce2];
break;
case 2:
[self runAction:self.sfxBounce3];
break;
case 3:
[self runAction:self.sfxBounce4];
break;
case 4:
[self runAction:self.sfxBounce5];
break;
case 5:
[self runAction:self.sfxBounce6];
break;
case 6:
[self runAction:self.sfxBounce7];
break;
}

[self deleteNode];
}

我不知道在6种情况下(在[self runAction:self.sfxBounce1];&break;之间)应该键入什么代码,这会在经过一定数量的弹跳/接触地面后停止 Action 。

最佳答案

在@interface的顶部创建一个int,您可以在整个代码中进行引用:

property (nonatomic) int bounceCount;

这是didBeginContact的更新版本:
-(void)didBeginContact:(SKPhysicsContact *)contact
{

if ((firstBody.categoryBitMask == ballCategory) && (secondBody.categoryBitMask == groundCategory)) //Ball & Ground contact
{
self.bounceCount++;
if(self.bounceCount>3)
return;

//Your Code

}
}

关于objective-c - Sprite Kit的接触计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26511046/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com