随机和数字图像与iOS xCode不同

时间:2014-03-01 10:16:57

标签: ios objective-c

我的问题是我使用随机从0到9 生成一个数字,然后显示带有它生成的数字的图像:

实施

@implementation EscenaJuego{
    int numberSelected;
    int num;
    NSString *form;    
}

AddImage编号:

-(void)addNumber
{
    num = arc4random() % 10;
    form = [NSString stringWithFormat:@"%d", num];
    SKSpriteNode *numero;
    numero = [SKSpriteNode spriteNodeWithImageNamed:form];
    [numero setScale:0.5];
    ......
}

当两个身体都接触时,请执行NSLog:

- (void)didBeginContact:(SKPhysicsContact *)contact
{
    SKPhysicsBody *primerCuerpo, *segundoCuerpo;
    if (contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask)
    {
        primerCuerpo = contact.bodyA;
        segundoCuerpo = contact.bodyB;
    }
    else
    {
        primerCuerpo = contact.bodyB;
        segundoCuerpo = contact.bodyA;
    }


    if ((primerCuerpo.categoryBitMask & categoriaPersonaje) != 0 &&
        (segundoCuerpo.categoryBitMask & categoriaMovimiento) != 0)
    {
        numberSelected = num;
        NSLog(@"%d", num);        
    }

但是当我做NSLog时,如果数字与图像相同,则不同

示例:当我的角色触及9时,NSLog说这是2。

enter image description here

所有图片文件均为 number.png

修改

如果我在AddNumber方法中执行NSLog,则图像的数字是正确的:

-(void)addNumber
{
    num = arc4random() % 10;
    form = [NSString stringWithFormat:@"%d", num];
    SKSpriteNode *numero;
    numero = [SKSpriteNode spriteNodeWithImageNamed:form];
    [numero setScale:0.5];
    self.numeroSeleccionado = [form integerValue];
    NSLog(@"%@%d", @"Appear:", self.numeroSeleccionado);
    ......
}

2 个答案:

答案 0 :(得分:1)

在您的代码中,num是一个实例变量,因此它将保存设置在其中的最后一个值。这就是你记录的内容。在您的代码中,在使用之前不会更新联系人检测的变量。

考虑设置精灵节点的name,并在检测到联系时使用它来确定实际发生的事情。

答案 1 :(得分:1)

SKSpriteNode进行子类化并在其中创建一个数字属性。这将简化您的代码并使其更加清晰。

@interface NumberNode : SKSpriteNode
@property(nonatomic, assign) NSUInteger number;
@end

您不必拥有int num。您只需检查冲突节点的number属性。