Ios 扩大后将节点粘在SkSpriteNode上
问题 到目前为止,我刚刚意识到我的应用程序中存在一个相当严重的设计缺陷 因此,问题是: 一发步枪射击,然后在没有弹道的情况下着陆。现在,我在玩弄这个想法。但是,项目符号落地,其标记保留为节点Ios 扩大后将节点粘在SkSpriteNode上,ios,objective-c,sprite-kit,Ios,Objective C,Sprite Kit,问题 到目前为止,我刚刚意识到我的应用程序中存在一个相当严重的设计缺陷 因此,问题是: 一发步枪射击,然后在没有弹道的情况下着陆。现在,我在玩弄这个想法。但是,项目符号落地,其标记保留为节点 -(void)applyShot:(int) posX with:(int) posY { SKSpriteNode *impact = [[SKSpriteNode alloc] initWithColor:[UIColor grayColor] size:CGSizeMake(2, 2)];
-(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];
});
这似乎很好,直到我开始玩zoom
现在,这个应用程序基本上是一个用于十字线的1080p图像,背景放大以提供(缩放)效果,然后背景被触摸拖动/反转以提供十字线移动效果
然后我设法让它正好在十字准线所在的地方开火,这很好。。然后我开始玩zoom,注意到了这一点
因此,如果不太容易注意到,(子弹命中)是灰色标记,但是,当你放大背景图像时,它们与背景图像无关。因此,它们的分布保持不变
解决方案
现在我需要的是
- 答:将节点绑定到背景图像
- B:把价差扩大到与扩大相同的系数
//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
//重新创建子对象
[背景图像移除所有儿童];
对于(int i=0;i<[shotsHitX计数];i++){
double posX=([shotsHitX[i]doubleValue]/5)*步枪变焦;
双精度=([shotsHitY[i]doubleValue]/5)*步枪缩放;
SKSpriteNode*impact=[[SKSpriteNode alloc]initWithColor:[UIColor grayColor]大小:CGSizeMake(2,2)];
冲击位置=1;
impact.userInteractionEnabled=否;
impact.position=CGPointMake(posX,posY);
[shotsHitX addObject:[NSNumber numberWithDouble:posX]];
[shotsHitY addObject:[NSNumber numberWithDouble:posY]];
[背景图片addChild:impact];
}
//结束重新创建子对象
内存错误导致崩溃
不太擅长这个强>
[backgroundImage removeAllChildren];
对于(int i=0;i<[shotsHitX计数];i++){
double posX=([shotsHitX[i]doubleValue]/5)*步枪变焦;
双精度=([shotsHitY[i]doubleValue]/5)*步枪缩放;
SKSpriteNode*impact=[[SKSpriteNode alloc]initWithColor:[UIColor grayColor]大小:CGSizeMake(2,2)];
冲击位置=1;
impact.userInteractionEnabled=否;
impact.position=CGPointMake(posX,posY);
[背景图片addChild:impact];
}
//结束重新创建子对象
但是,现在它似乎并不完全正确
我认为问题在于,当初始变焦开始工作时,当它恢复时,它会将阵列中的变焦镜头与旧镜头混合。。我们又来了,更多数组
//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
//重新创建子对象
[背景图像移除所有儿童];
对于(int i=0;i<[shotsHitRem计数];i+=2){
double posX=([shotsHitRem[i]doubleValue]/5)*步枪缩放;
双精度=([shotsHitRem[i+1]doubleValue]/5)*步枪缩放;
SKSpriteNode*impact=[[SKSpriteNode alloc]initWithColor:[UIColor grayColor]大小:CGSizeMake(2,2)];
冲击位置=1;
impact.userInteractionEnabled=否;
impact.position=CGPointMake(posX,posY);
[背景图片addChild:impact];
//添加m4
如果([shotsHitM4计数]>0){
posX=([shotsHitM4[i]doubleValue]/2)*步枪变焦;
posY=([shotsHitM4[i+1]doubleValue]/2)*步枪缩放;
impact.position=CGPointMake(posX,posY);
[背景图片addChild:impact];
}
}
//结束重新创建子对象
现在,我尝试添加一个已经有父节点的sknode时崩溃
令人困惑的是,在一些重大的混乱之后,它应该在循环之前移除所有儿童
[backgroundImage setScale:rifleZoom];
编程是我最喜欢的,哦,是的。。五个小时,哦,是的。。一句话,哦,是的
我以前不是在缩放,而是在创建一个新的CG大小。这就是我的问题
现在,我遇到了缩放和尝试渲染新的中心点的问题,因为它仍然记得scale=1和scale=2的中心点,噩梦。计算了校准修复,只是将下降乘以缩放距离。。我想我在这里发现了一些东西。@rakeshbs如果我没弄错的话,他们是作为孩子添加的:O?问题是当它扩展时,它们不会<代码>[backgroundImage addChild:impact]代码>
[backgroundImage setScale:rifleZoom];