gpt4 book ai didi

xcode - 调用 shadowCastBitMask= 时出现奇怪的屏幕大小调整错误

转载 作者:行者123 更新时间:2023-12-03 17:48:50 25 4
gpt4 key购买 nike

我正在为 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;
...
}

然而,当我尝试通过定义我的矩形(或块) Sprite 节点的 shadowCastBitMask 来使我的掉落块转换阴影时,与桨不同,它们在整个游戏过程中以不同的间隔添加,我遇到了一种奇怪的剪裁,整个屏幕并且其所有内容都调整为原始大小的 60%-80% 左右,并略微垂直压缩。这只是最短暂的时刻,所以我无法很好地了解它对图像的影响,更不用说为什么了。我在网上没有发现与此错误相关的任何内容。

可以说是转载的 每次一个块从屏幕顶部进入,即使是第一次,表明它与同时调用多个实例无关。由于桨(和测试时的球)似乎没有问题地转换阴影,我只能假设这要么与在游戏过程中进行调用有关,而不是在它开始之前,就像桨,或者在我的 -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 使用了静态大图像,似乎已经解决了问题

关于xcode - 调用 shadowCastBitMask= 时出现奇怪的屏幕大小调整错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26053704/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com