xcode – 调用shadowCastBitMask =时屏幕大小调整错误
我正在为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 sprite self.rectangle = [SKSpriteNode spriteNodeWithImageNamed:@"Rectangle"]; // Determine where to spawn the rectangle along the X axis int 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-screen self.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 actions SKAction * 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的静态大图像,似乎已经解决了问题
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ruby-on-rails – 将视频上传,编码和流媒体功能添加到我的R
- postgresql – 找不到Heroku上的pgbackups
- access转sqlite——利用DBManager professional软件
- 依赖关系
- c# – EF4.1 POCO:我为什么要使用ICollection
- Cocos2dx------2048游戏
- c# – 如何在保持浏览器处于后台的同时从WinForms应用程序打
- SQLite区分大小写搜索与collat??e nocase字段
- swift – 对Codable的Explit一致性消除了结构上的成员初始化
- React/React Native 的ES5 ES6写法对照表