我正在尝试使用精灵套件为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];
}
}
答案 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检查算法,因为你很可能在任何时候都需要一个。
我希望这会让你至少更进一步:)