放大后将节点粘贴到SkSpriteNode

时间:2015-02-11 00:44:47

标签: ios objective-c sprite-kit

问题

截至目前,我刚刚在我的应用程序中意识到了一个相当大的设计缺陷..

所以,问题是:

现在发射了一支步枪射击,基于没有轨迹的陆地射击,我正在玩弄这个想法。然而,子弹落地并且它们的标记被留作节点。

-(void)applyShot:(int) posX with:(int) posY {
    SKSpriteNode *impact = [[SKSpriteNode alloc] initWithColor:[UIColor grayColor] size:CGSizeMake(2, 2)];
    impact.zPosition = 1;
    impact.userInteractionEnabled = NO;
    impact.position = CGPointMake(posX , posY);
    [backgroundImage addChild:impact];
}

posX / posY以这种方式发送。

//Find difference between centre and background moved distance.
CGPoint positionNow = CGPointMake(backgroundImage.position.x, backgroundImage.position.y);
CGPoint positionPrev = CGPointMake(0.5, 0.5);

float xdiff = positionNow.x - positionPrev.x;
float ydiff = positionNow.y - positionPrev.y;

//Calculate ydrop
int newYDrop = yDrop * 10;
//

CGPoint newPositionOne = CGPointMake(0.5 - xdiff, 0.5 - ydiff);
newPositionOne = CGPointMake((newPositionOne.x + [self myRandom:15 withFieldLower:-15]), (newPositionOne.y - newYDrop));

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(secondsDelay * NSEC_PER_SEC)), dispatch_get_main_queue(), ^(void){
    [self applyShot:newPositionOne.x with:newPositionOne.y];
});

这似乎工作正常,直到我开始玩变焦。

现在,这个应用程序基本上是用于光罩的1080p图像,并且背景放大以给出(缩放)效果,然后触摸拖动/反转背景以给出光罩移动效果。

然后我设法让它准确射击十字准线的位置,这很好..然后我开始玩变焦并注意到这一点。

enter image description here enter image description here

因此,如果不太容易注意到,(子弹命中)是灰色标记,但是,当你放大backgroundImage时,它们并没有被绑定。所以他们保持相同的传播。

解决方案

现在我需要的是,

  • 答:将节点绑定到backgroundImage
  • B:将扩散扩大到与扩大相同的因素。

但我对如何实现这一目标感到很困惑。

其他问题

校准跌落时,无论目前的变焦如何,跌落都将成为负担。因此,如果它在6倍变焦时下降1密码,那么在10倍变焦或1倍变焦时也会出现1密耳点的下降(当我的意思是放大时,我会继续说缩放)

无论背景图像的放大程度如何,我如何实现墨滴强度校准?

感谢您阅读并将自己与我的可怕问题混为一谈,感谢您!

我尝试过的事情

将子项保存到可变数组,然后在缩放更改后重新创建它们;

//recreate children
[backgroundImage removeAllChildren];
for (int i=0; i < [shotsHitX count]; i++) {

    double posX = ([shotsHitX[i] doubleValue] / 5) * rifleZoom;
    double posY = ([shotsHitY[i] doubleValue] / 5) * rifleZoom;

    SKSpriteNode *impact = [[SKSpriteNode alloc] initWithColor:[UIColor grayColor] size:CGSizeMake(2, 2)];
    impact.zPosition = 1;
    impact.userInteractionEnabled = NO;
    impact.position = CGPointMake(posX , posY);

    [shotsHitX addObject:[NSNumber numberWithDouble:posX]];
    [shotsHitY addObject:[NSNumber numberWithDouble:posY]];

    [backgroundImage addChild:impact];
}
//end recreate children

因内存错误而崩溃。

不太擅长这个!

[backgroundImage removeAllChildren];
for (int i=0; i < [shotsHitX count]; i++) {

    double posX = ([shotsHitX[i] doubleValue] / 5) * rifleZoom;
    double posY = ([shotsHitY[i] doubleValue] / 5) * rifleZoom;

    SKSpriteNode *impact = [[SKSpriteNode alloc] initWithColor:[UIColor grayColor] size:CGSizeMake(2, 2)];
    impact.zPosition = 1;
    impact.userInteractionEnabled = NO;
    impact.position = CGPointMake(posX , posY);

    [backgroundImage addChild:impact];
}
//end recreate children

然而,现在,它看起来并不恰当......

我认为问题是当初始变焦进入时它会起作用,然后当它恢复它时,它会在阵列中混合变焦镜头和旧镜头。我们再来一次,更多阵列

    //recreate children
    [backgroundImage removeAllChildren];
    for (int i=0; i < [shotsHitRem count]; i+= 2) {

        double posX = ([shotsHitRem[i] doubleValue] / 5) * rifleZoom;
        double posY = ([shotsHitRem[i+1] doubleValue] / 5) * rifleZoom;

        SKSpriteNode *impact = [[SKSpriteNode alloc] initWithColor:[UIColor grayColor] size:CGSizeMake(2, 2)];
        impact.zPosition = 1;
        impact.userInteractionEnabled = NO;
        impact.position = CGPointMake(posX , posY);
        [backgroundImage addChild:impact];

        //add olds m4
        if ([shotsHitM4 count] > 0) {
            posX = ([shotsHitM4[i] doubleValue] / 2) * rifleZoom;
            posY = ([shotsHitM4[i+1] doubleValue] / 2) * rifleZoom;
            impact.position = CGPointMake(posX, posY);
            [backgroundImage addChild:impact];
        }
    }
    //end recreate children

现在我崩溃了,试图添加一个已经拥有父

的sknode

因为它应该在循环之前删除AllChildren而感到困惑

1 个答案:

答案 0 :(得分:1)

在经历了一些重大的混乱之后

[backgroundImage setScale:rifleZoom];

编程是我最喜欢的,哦,是的..五个小时,哦,是的..对于一行,哦,是的!

我之前没有缩放,我正在创建一个新的cgsize。那是我的问题。

我现在有缩放和尝试渲染新的中心点的问题,因为它仍然记得比例= 1和比例= 2的中心点,噩梦。