gpt4 book ai didi

ios - 使用 Touch iOS Sprite Kit 画线

转载 作者:行者123 更新时间:2023-11-28 19:00:48 25 4
gpt4 key购买 nike

我使用以下代码在我的 sprite 套件场景中绘制线条,但没有显示任何内容。但是节点数增加了。任何人都可以看到可能是什么问题。我一直在和这段代码作斗争

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

pathToDraw = CGPathCreateMutable();
CGPathMoveToPoint(pathToDraw, NULL, positionInScene.x, positionInScene.y);

lineNode = [SKShapeNode node];
lineNode.path = pathToDraw;
lineNode.strokeColor = [SKColor redColor];
//lineNode.lineWidth = 2;
[self addChild:lineNode];
}

- (void)touchesMoved:(NSSet*)touches withEvent:(UIEvent*)event
{
UITouch* touch = [touches anyObject];
CGPoint positionInScene = [touch locationInNode:self];
CGPathAddLineToPoint(pathToDraw, NULL, positionInScene.x, positionInScene.y);
lineNode.path = pathToDraw;

}

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

// lineNode.physicsBody = [SKPhysicsBody bodyWithPolygonFromPath:pathToDraw];
// lineNode.physicsBody.dynamic = NO;
// lineNode.physicsBody.categoryBitMask = lines;
// lineNode.physicsBody.contactTestBitMask = 0;
// lineNode.physicsBody.collisionBitMask = blueParticles | redParticles| yellowParticles;

CGPathRelease(pathToDraw);
}

编辑------ 删除背景节点后代码正常工作..如何设置我的背景节点以便我可以超越?谢谢

SKSpriteNode *background;

if(screenHeight == 480){
background = [SKSpriteNode spriteNodeWithImageNamed:@"iPhone4BG.png"];
}
if(screenHeight == 568){
background = [SKSpriteNode spriteNodeWithImageNamed:@"iPhone5BG.png"];
}
if(screenHeight == 667){
background = [SKSpriteNode spriteNodeWithImageNamed:@"iPhone6BG.png"];
}
if(screenHeight == 736){
background = [SKSpriteNode spriteNodeWithImageNamed:@"iPhone6PlusBG.png"];
}

background.position = CGPointMake(screenWidth/2, screenHeight/2);
background.size = CGSizeMake(screenWidth, screenHeight);

// [self addChild:background];

最佳答案

注意 核心问题是模拟器没有呈现未闭合的路径。在设备上不存在该问题。还涉及原始海报未提及且未在代码中表示的背景元素。这个答案将解决模拟器上的问题。

要解决您的问题,请按如下方式修改您的代码:

- (void)touchesMoved:(NSSet*)touches withEvent:(UIEvent*)event
{
UITouch* touch = [touches anyObject];
CGPoint positionInScene = [touch locationInNode:self];
CGPathAddLineToPoint(pathToDraw, NULL, positionInScene.x, positionInScene.y);
// add this line to fix your issue
CGPathMoveToPoint(pathToDraw, NULL, positionInScene.x, positionInScene.y);
lineNode.path = pathToDraw;

}

核心问题是去渲染路径的时候,没有完整的路径。您当前的方法是不断修改每个 touchMove 的路径。

关闭子路径的方式是:

CGPathCloseSubpath(pathToDraw);

但是我选择在每次向路径添加段时只使用CGPathMoveToPoint

来自 CGPathMoveToPoint 的 CGPath 引用:

此函数结束已经在进行中的子路径(如果有的话)并开始一个新的子路径,在可选转换之后将起点和当前点初始化为指定位置 (x,y)。

我在渲染之前关闭当前子路径,并设置下一段的起始位置。

但是,如果您要画一条长线或多条线,您将遇到评论中链接中定义的主要性能问题。画一条很长的线,你就会明白我的意思。使用最少的线条绘制,您可能会摆脱当前的方法。

遗憾的是,使用 SKShapeNode 进行这种性质的绘制并没有达到应有的优化程度。

关于ios - 使用 Touch iOS Sprite Kit 画线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26043447/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com