objective-c - 为 iPhone 检测方 block 和方 block 游戏

标签 objective-c sprite-kit cgpath

我正在尝试使用 sprite 工具包为 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

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

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

然后您可以检查坐标 x 和 y。如果他们组成一个 BOX 返回自己并绘制,如果不是则不允许创建和绘制。

概念解决方案编号 2

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

-(void)update:(NSTimeInterval)currentTime

你检查你是否 counter % 4 == 0 (因为有)。这是最简单的原理,无需检查框是否绘制正确。我建议您编写一个 BOX 检查算法来确定,因为您很可能随时需要一个。

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

关于objective-c - 为 iPhone 检测方 block 和方 block 游戏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20732015/

相关文章:

ios - SpriteKit - 鼠标捕捉到 Sprite 拖动的中心

ios - overlaySKSScene 不工作 : SpriteKit scene does not appear in SCNView

ios - 使用 ARC 编码和解码 CGMutablePathRef

iphone - uitextview dataDetectorTypes 不适用于像 bitly 链接这样的短链接

ios - 使用 iOS Game Center Challenge 发送对象?

ios - 从 UIBezierPath 获取所有点(不仅仅是控制点)

swift - 重复 SKAction 起始位置更改

ios - UITableViewCell 无法添加 subview

ios - Apple Watch 上的 WCSession 无法正常工作

objective-c - 独特的字母数字 key 生成器