xcode – 调用shadowCastBitMask =时屏幕大小调整错误

xcode – 调用shadowCastBitMask =时屏幕大小调整错误,第1张

概述我正在为iOS8制作一个球/桨“突破”风格的游戏,其中块从屏幕顶部掉落. 我决定在sprite-kit中试用Apple的新SKLightNode,它工作得非常好,从屏幕顶部投射出一个光: 在levelScene.h中: #import <SpriteKit/SpriteKit.h> 在levelScene.m中: -(id)initWithSize:(CGSize)size {... SKL 我正在为iOS8制作一个球/桨“突破”风格的游戏,其中块从屏幕顶部掉落.

我决定在sprite-kit中试用Apple的新SKlightNode,它工作得非常好,从屏幕顶部投射出一个光:

在levelScene.h中:

#import <SpriteKit/SpriteKit.h>

在levelScene.m中:

-(ID)initWithSize:(CGSize)size {... SKlightNode* light = [[SKlightNode alloc] init];   // light.enabled = YES; light.categoryBitMask = lightcategory; light.falloff = 1; light.ambIEntcolor = [UIcolor whitecolor]; light.lightcolor = [[UIcolor alloc] initWithRed:0.0 green:1.0 blue:0.5 Alpha:0.5]; light.shadowcolor = [[UIcolor alloc] initWithRed:0.0 green:0.0 blue:0.0 Alpha:0.2]; light.position = CGPointMake(CGRectGetMIDX(self.frame),self.frame.size.height - 20); [self addChild:light];...}

并从靠近屏幕底部的球拍投下阴影:

-(ID)initWithSize:(CGSize)size {... self.paddle.shadowCastBitMask = lightcategory;...}

但是,当我尝试通过定义我的矩形(或块)spriteNodes的shadowCastBitMask来使我的下降块投射阴影时,不同于桨,在整个游戏中以不同的间隔添加,我在整个屏幕中体验到一种奇怪的剪裁并且其所有内容都调整到原始大小的60%-80%左右,略微垂直挤压.它只适用于最短暂的时刻,所以我无法理解它甚至对图像做了什么,更不用说为什么了.我在网上找不到与这个BUG有关的内容.

我可以说,每当一个块从屏幕顶部进入时,它就会被复制,甚至是第一次,这表明它与同时调用的多个实例无关.由于桨(以及测试时的球)似乎没有问题地投下阴影,我只能假设这是在游戏过程中进行呼叫的事实,而不是在它开始之前,就像在情况下一样. paddle,或者我的-addRectangle调用中有一些我缺少的东西.

所以,这里是 – (voID)addRectangle的全部,shadowCastBitMask = …调用接近结尾:

- (voID)addRectangle {// Create spriteself.rectangle = [SKSpriteNode spriteNodeWithImagenamed:@"Rectangle"];// Determine where to spawn the rectangle along the X axisint minX = (CGRectGetMinX(self.frame) + (self.rectangle.size.wIDth/2)) ;int maxX= (( CGRectGetMaxX(self.frame)) - (self.rectangle.size.wIDth)) ;int actualX =  ( arc4random_uniform(maxX) +minX);// Create the rectangle slightly off-screenself.rectangle.position = CGPointMake(actualX,self.frame.size.height + self.rectangle.size.height/1);self.rectangle.zposition = 5;// Determine speed of the rectangle   if(multiplIEr>=29 && multiplIEr<49){    int minDuration = 5.5;    int maxDuration = 7.0;    int rangeDuration = maxDuration - minDuration;    int actualDuration = (arc4random() % rangeDuration) + minDuration;    // Create the actions    SKAction * actionMove = [SKAction moveto:CGPointMake(actualX,-self.rectangle.size.height/1) duration:actualDuration];           [self.rectangle runAction:actionMove];}if(multiplIEr>=49 &&  multiplIEr < 99){int minDuration = 4.0;int maxDuration = 5.0;int rangeDuration = maxDuration - minDuration;int actualDuration = (arc4random() % rangeDuration) + minDuration;// Create the actionsSKAction * actionMove = [SKAction moveto:CGPointMake(actualX,-self.rectangle.size.height/1) duration:actualDuration];      [self.rectangle runAction:actionMove];   }if(multiplIEr>=99){    int minDuration = 3.0;    int maxDuration = 4.0;    int rangeDuration = maxDuration - minDuration;    int actualDuration = (arc4random() % rangeDuration) + minDuration;    // Create the actions    SKAction * actionMove = [SKAction moveto:CGPointMake(actualX,-self.rectangle.size.height/1) duration:actualDuration];    [self.rectangle runAction:actionMove];}else if (multiplIEr<29){    int minDuration = 6.0;    int maxDuration = 10.0;    int rangeDuration = maxDuration - minDuration;    int actualDuration = (arc4random() % rangeDuration) + minDuration;    // Create the actions    SKAction * actionMove = [SKAction moveto:CGPointMake(actualX,-self.rectangle.size.height/1) duration:actualDuration];      [self.rectangle runAction:actionMove];} self.rectangle.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:self.rectangle.size]; self.rectangle.physicsBody.dynamic = YES;self.rectangle.physicsBody.restitution = 0.4f;self.rectangle.physicsBody.density = 1000;self.rectangle.physicsBody.categoryBitMask = blockcategory; self.rectangle.physicsBody.contactTestBitMask =  bottomcategory |  paddlecategory | lasercategory;self.rectangle.physicsBody.collisionBitMask =  0x0 ; self.rectangle.physicsBody.affectedByGravity = NO; //the offending line:  self.rectangle.shadowCastBitMask = lightcategory; [self addChild:self.rectangle]; [_blocks addobject:self.rectangle];_Eyeleft = [SKSpriteNode spriteNodeWithImagenamed:@"Eye"];  _Eyeleft.position = CGPointMake(_Eyeleft.parent.position.x-10,_Eyeleft.parent.position.y) ;//  _Eyeleft.zposition = 7;  _Eyeleft.physicsBody.allowsRotation = YES;_Eyeleft.name = @"Eye";[self.rectangle addChild: _Eyeleft];[_Eyes addobject:_Eyeleft];_EyeRight = [SKSpriteNode spriteNodeWithImagenamed:@"Eye"];_EyeRight.position = CGPointMake(_EyeRight.parent.position.x+10,_EyeRight.parent.position.y) ;  //  _EyeRight.zposition = 7;_EyeRight.physicsBody.allowsRotation = YES;_EyeRight.name = @"Eye";  // _Eyeleft.physicsBody.angulardamPing = 0.2;[self.rectangle addChild: _EyeRight];[_Eyes addobject:_EyeRight];}

如果我只是删除shadowCastBitMask = …调用,则不会重现该错误,但是我没有阴影.

我也不明白为什么整个画面会调整大小,因为我不知道,就我所知,调用任何与音阶或场景相关的命令时,肯定不会被这样的调用触发.

任何帮助都将不胜感激,
提前感谢您的时间和任何帮助.

解决方法 我有这个问题,我注意到它发生在使用tilemap时,所以我只是用bG的静态大图像,似乎已经解决了问题 总结

以上是内存溢出为你收集整理的xcode – 调用shadowCastBitMask =时屏幕大小调整错误全部内容,希望文章能够帮你解决xcode – 调用shadowCastBitMask =时屏幕大小调整错误所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1039082.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存