gpt4 book ai didi

ios - Sprite 不跟踪计数

转载 作者:行者123 更新时间:2023-11-28 21:53:02 25 4
gpt4 key购买 nike

我使用的以下代码是当场景中的球数达到零时结束游戏。现在,当我输入代码时,我没有收到任何错误,但它没有做任何事情,比如计算球数和对该计数使用react。我对 sprite kit 还很陌生,所以我知道这是一个对其他人来说很容易遇到的问题,但这是第一次对场景中某个 sprite 的数量使用react,所以请帮忙。

SKSpriteNode *ball;
int numberOfBalls = 3;

@implementation EasyScene

-(void)didBeginContact:(SKPhysicsContact *)contact {
if ([self isGameWon]) {
EasyEndGameScene *end = [EasyEndGameScene sceneWithSize:self.size];
[self.view presentScene:end transition:[SKTransition doorsCloseHorizontalWithDuration:1]];
}
}

-(BOOL)isGameWon {
int numberOfBalls = 3;
for (SKNode* node in self.children) {
if ([node.name isEqual: ball]) {
numberOfBalls = 0;
}
}
return numberOfBalls =0;
}

- (void) addBalls:(CGSize)size {
for (int i = 0; i < 3; i++) {
//create brick sprite from image
SKSpriteNode *ball = [SKSpriteNode spriteNodeWithImageNamed:@"ball-image"];
ball.name = @"ball";
//resize balls
ball.size = CGSizeMake(self.size.width/5.5, self.size.width/5.5);
//position and space out balls
int xPos = size.width/3 * (i+.5);
int yPos = self.size.height - (self.size.width/7);
ball.position = CGPointMake(xPos, yPos);
ball.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:ball.size.width/2];
ball.physicsBody.categoryBitMask = ballCategory;
ball.physicsBody.contactTestBitMask = bottomEdgeCategory;

[self addChild:ball];

}
}

在下面的代码中,我去掉了全局变量并测试了指定名称@"ball"的所有节点,如果没有找到则返回 YES:

   static const uint32_t ballCategory   = 1;       //00000000000000000000000000000001
static const uint32_t edgeCategory = 2; //00000000000000000000000000000010
static const uint32_t bottomEdgeCategory = 4; //00000000000000000000000000000100

SKSpriteNode *ball;

@implementation EasyScene

-(void)didBeginContact:(SKPhysicsContact *)contact {

//create placeholder for the "non ball" object
SKPhysicsBody *notTheBall;
SKPhysicsBody *theBall;

if (contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask) {
notTheBall = contact.bodyB;
theBall = contact.bodyA;
} else {
notTheBall = contact.bodyA;
theBall = contact.bodyB;
}

if (notTheBall.categoryBitMask == bottomEdgeCategory) {
NSLog(@"hit bottom edge");
// SKAction *playSFX = [SKAction playSoundFileNamed:@"gameover.mp3" waitForCompletion:NO];
// [self runAction:playSFX];
// EasyEndGameScene *end = [EasyEndGameScene sceneWithSize:self.size];
// [self.view presentScene:end transition:[SKTransition doorsCloseHorizontalWithDuration:1]];
// [GameState sharedInstance].score = 0;
// [gameMusic pause];
[theBall.node removeFromParent];
}

if ([self isGameWon]) {
EasyEndGameScene *end = [EasyEndGameScene sceneWithSize:self.size];
[self.view presentScene:end transition:[SKTransition doorsCloseHorizontalWithDuration:1]];
}
}

-(BOOL)isGameWon {
unsigned count = 0;
for (SKNode* node in self.children)
if ([node.name isEqual:ball])
count++;
return count == 0;
}

- (void) addBalls:(CGSize)size {
for (int i = 0; i < 3; i++) {
//create brick sprite from image
SKSpriteNode *ball = [SKSpriteNode spriteNodeWithImageNamed:@"ball-image"];
ball.name = @"ball";
//resize balls
ball.size = CGSizeMake(self.size.width/5.5, self.size.width/5.5);
//position and space out balls
int xPos = size.width/3 * (i+.5);
int yPos = self.size.height - (self.size.width/7);
ball.position = CGPointMake(xPos, yPos);
ball.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:ball.size.width/2];
ball.physicsBody.categoryBitMask = ballCategory;
ball.physicsBody.contactTestBitMask = bottomEdgeCategory;

[self addChild:ball];

}
}

最佳答案

  1. 删除 ball 全局变量,因为它不需要。

  2. @"ball" 的指定名称测试所有节点,如果没有找到则返回 YES:

    -(BOOL)isGameWon {
    for (SKNode* node in self.children)
    if ([node.name isEqualToString:@"ball"])
    return NO;
    return YES;
    }

关于ios - Sprite 不跟踪计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27603611/

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