我的问题是我使用随机从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。
所有图片文件均为 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);
......
}
答案 0 :(得分:1)
在您的代码中,num
是一个实例变量,因此它将保存设置在其中的最后一个值。这就是你记录的内容。在您的代码中,在使用之前不会更新联系人检测的变量。
考虑设置精灵节点的name
,并在检测到联系时使用它来确定实际发生的事情。
答案 1 :(得分:1)
对SKSpriteNode
进行子类化并在其中创建一个数字属性。这将简化您的代码并使其更加清晰。
@interface NumberNode : SKSpriteNode
@property(nonatomic, assign) NSUInteger number;
@end
您不必拥有int num
。您只需检查冲突节点的number
属性。