检测iPhone的点和盒游戏盒

时间:2013-12-22 17:24:44

标签: objective-c sprite-kit cgpath

我正在尝试使用精灵套件为iPhone制作一个小点和盒子游戏。 我写了代码来创建点并用线连接它们但我没有 想法如何在四个点连接时检测盒子?这是我现在的代码:

    -(id)initWithSize:(CGSize)size {    
    if (self = [super initWithSize:size]) {
        /* Setup your scene here */

        self.backgroundColor = [SKColor whiteColor];
        [self gameScene];
    }
    return self;
}

-(void)gameScene {

    int dotNameCount = 1;

    for (int i = 0; i < dotsInARow * dotsInACol; i++) {

        dot = [SKSpriteNode spriteNodeWithColor:[SKColor blackColor] size:CGSizeMake(20, 20)];
        dot.position = CGPointMake(40+i%dotsInARow*60, 120+i/dotsInACol*60);
        dot.name = [NSString stringWithFormat:@"dot%i", dotNameCount];
        dotNameCount ++;
        dot.zPosition = 2;
        [self addChild:dot];
    }
}

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch* touch = [touches anyObject];
    CGPoint positionInScene = [touch locationInNode:self];

    if ([[self nodeAtPoint:positionInScene].name length] == 0) { } else {

        pathToDraw = CGPathCreateMutable();
        CGPathMoveToPoint(pathToDraw, NULL, [self nodeAtPoint:positionInScene].position.x, [self nodeAtPoint:positionInScene].position.y);
        selectedNode = (SKSpriteNode *)[self nodeAtPoint:positionInScene];
        selectedNode.color = [SKColor blueColor];
    }
}

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{

    UITouch* touch = [touches anyObject];
    CGPoint positionInScene = [touch locationInNode:self];

    if ([[self nodeAtPoint:positionInScene].name length] == 0) { } else {

   CGPathAddLineToPoint(pathToDraw, NULL,[self nodeAtPoint:positionInScene].position.x, [self nodeAtPoint:positionInScene].position.y);

        selectedNode = (SKSpriteNode *)[self nodeAtPoint:positionInScene];
        selectedNode.color = [SKColor blueColor];

        pathNode = [[SKShapeNode alloc] init];
        pathNode.path = pathToDraw;
        pathNode.strokeColor = [SKColor redColor];
        pathNode.fillColor = [SKColor greenColor];
        pathNode.zPosition = 1;
        [self addChild:pathNode];
    }
}

1 个答案:

答案 0 :(得分:0)

Koncept解决方案编号1

创建一个“BOX”类,它是一个SKSpriteNode子类。 BOX类有4个点或4个行。我认为如果你只有4分(用户点击了)就会有用。 现在请记住,用户可能会点击4个不同的位置创建4个点,这些点不能连接到一个盒子中,而是一些其他复杂的身体。这就是我建议创建一个单独的类的原因。在这个BOX类中,您现在可以检查四个点是否是“可连接的”,如果它们是,则绘制线条并自动确保您有一个BOX。 您可以用4个点初始化BOX对象。在里面:

initWith ... firstDot:(CGPoint)dot1 ...

然后你可以检查坐标x&amp;年。如果他们组成一个BOX返回自我&amp;画画,如果不是不允许创作&amp;图。

Koncept解决方案编号2

您可以使用您的代码,只需添加一个计算绘制线条的计数器。一个盒子由4行组成。在你的

-(void)update:(NSTimeInterval)currentTime

你检查一下counter % 4 == 0(因为有)。这是最简单的原则,不检查框是否绘制正确。我建议你写一个BOX检查算法,因为你很可能在任何时候都需要一个。

我希望这会让你至少更进一步:)