2015-02-11 75 views
1

問題放大後堅持節點SkSpriteNode

至於現在,我剛剛意識到一個非常重大的設計缺陷在我的應用程序..

所以,問題是:

步槍射擊被擊發,並且基於目前沒有軌跡的土地,我正在玩弄這個想法。然而,子彈地和他們的痕跡留下作爲節點。

-(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的分劃板圖像,並且背景放大以產生(變焦)效果,然後背景被觸摸拖動/倒轉以給出分劃板移動效果。

然後,我設法讓它發生在十字準線的位置,這很好。然後我開始玩弄zoom並注意到了這一點。

enter image description hereenter 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 

現在我崩潰試圖添加已經有一個父

混淆,因爲它要經過好周圍

[backgroundImage setScale:rifleZoom]; 

編程的一些主要搞亂循環

+0

想象校準修復,只是乘以下降的縮放距離..我想我在這裏的東西.. – user2415313 2015-02-11 00:50:22

+0

@rakeshbs他們被添加爲兒童,如果我沒有錯:O?問題是當它擴展時,它們不會。 ''[backgroundImage addChild:impact];' – user2415313 2015-02-11 01:54:40

回答

1

之前removeAllChildren一個sknode是我最喜歡的,哦,是的。五個小時,哦,是的。對於一行,哦,是啊!

我之前沒有縮放,我正在創建一個新的cgsize。那是我的問題。

我現在有縮放的問題,並試圖呈現一個新的中心點,因爲它仍然記得scale = 1和scale = 2的中心點,噩夢。