问题
截至目前,我刚刚在我的应用程序中意识到了一个相当大的设计缺陷..
所以,问题是:
现在发射了一支步枪射击,基于没有轨迹的陆地射击,我正在玩弄这个想法。然而,子弹落地并且它们的标记被留作节点。
-(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图像,并且背景放大以给出(缩放)效果,然后触摸拖动/反转背景以给出光罩移动效果。
然后我设法让它准确射击十字准线的位置,这很好..然后我开始玩变焦并注意到这一点。
因此,如果不太容易注意到,(子弹命中)是灰色标记,但是,当你放大backgroundImage时,它们并没有被绑定。所以他们保持相同的传播。
解决方案
现在我需要的是,
但我对如何实现这一目标感到很困惑。
其他问题
校准跌落时,无论目前的变焦如何,跌落都将成为负担。因此,如果它在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而感到困惑
答案 0 :(得分:1)
在经历了一些重大的混乱之后
[backgroundImage setScale:rifleZoom];
编程是我最喜欢的,哦,是的..五个小时,哦,是的..对于一行,哦,是的!
我之前没有缩放,我正在创建一个新的cgsize。那是我的问题。
我现在有缩放和尝试渲染新的中心点的问题,因为它仍然记得比例= 1和比例= 2的中心点,噩梦。