我在将 Objective-C 代码转换为 Swift 时遇到了一个问题。我在 SKScene 子类中添加了两个精灵。第一个子画面直接添加到场景中,第二个子画面是第一个节点的子节点。当我点击任一精灵时,游戏应该会记录精灵的名称。这在 Objective-C 版本中按预期工作,但无论我点击哪个节点,Swift 版本都会记录"sprite1"。
目标-C
声明精灵并将它们添加到场景中
CGSize size = CGSizeMake(32, 32);
SKSpriteNode *sprite1 = [SKSpriteNode spriteNodeWithColor:[SKColor blueColor] size:size];
sprite1.name = @"sprite1";
sprite1.position = CGPointMake(100, 100);
[self addChild:sprite1];
SKSpriteNode *sprite2 = [SKSpriteNode spriteNodeWithColor:[SKColor redColor] size:size];
sprite2.name = @"sprite2";
sprite2.position = CGPointMake(150, 100);
[sprite1 addChild:sprite2];
触摸处理程序
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
/* Called when a touch begins */
for (UITouch *touch in touches) {
CGPoint location = [touch locationInNode:self];
SKNode *node = [self nodeAtPoint:location];
if ([node.name isEqualToString:@"sprite2"]) {
NSLog(@"sprite2");
}
if ([node.name isEqualToString:@"sprite1"]) {
NSLog(@"sprite1");
}
}
}
迅速
声明精灵并将它们添加到场景中
let size = CGSizeMake(32, 32)
let sprite1 = SKSpriteNode(color: SKColor.blueColor(), size: size)
sprite1.name = "sprite1"
sprite1.position = CGPointMake(100, 100)
self.addChild(sprite1)
let sprite2 = SKSpriteNode(color: SKColor.redColor(), size: size)
sprite2.name = "sprite1"
sprite2.position = CGPointMake(150, 100)
sprite1.addChild(sprite2)
触摸处理程序
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
for touch: AnyObject in touches {
let location = touch.locationInNode(self)
let node = self.nodeAtPoint(location)
if (node.name == "sprite2") {
println("sprite2")
}
if (node.name == "sprite1") {
println("sprite1")
}
}
}
您正在将sprite2.name
设置为"sprite1"。
let size = CGSizeMake(32, 32)
let sprite1 = SKSpriteNode(color: SKColor.blueColor(), size: size)
sprite1.name = "sprite1"
sprite1.position = CGPointMake(100, 100)
self.addChild(sprite1)
let sprite2 = SKSpriteNode(color: SKColor.redColor(), size: size)
sprite2.name = "sprite1" //here
sprite2.position = CGPointMake(150, 100)
sprite1.addChild(sprite2)
将其更改为"精灵2"。
let size = CGSizeMake(32, 32)
let sprite1 = SKSpriteNode(color: SKColor.blueColor(), size: size)
sprite1.name = "sprite1"
sprite1.position = CGPointMake(100, 100)
self.addChild(sprite1)
let sprite2 = SKSpriteNode(color: SKColor.redColor(), size: size)
sprite2.name = "sprite2"
sprite2.position = CGPointMake(150, 100)
sprite1.addChild(sprite2)