iOS   发布时间:2022-05-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了xcode – 调用shadowCastBitMask =时屏幕大小调整错误大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

我正在为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>@H_674_26@ 
 

在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];
...
}@H_674_26@ 
 

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

-(id)initWithSize:(CGSizE)size {
...
 self.paddle.shadowCastBitMask = Lightcategory;
...
}@H_674_26@ 
 

但是,当我尝试通过定义我的矩形(或块)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];


}@H_674_26@ 
 

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

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

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

解决方法

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

大佬总结

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

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。