Ciao Sto cercando di risolvere questo bug con la forma fisica di spritekit che appare sottosopra.SpriteKit SKPhysicsBody bodyWithTexture è a testa in giù
[SKPhysicsBody bodyWithTexture:monsterTexture size:monsterTexture.size]
La prima volta che appare il mostro l'orientamento del corpo fisico è corretto. Ma la seconda volta e ogni volta dopo che il mostro appare, il suo corpo fisico è invertito lungo l'asse Y. Guarda l'immagine dove skView.showsPhysics = true;
così vengono visualizzate le forme fisiche. Il fatto che funzioni correttamente la prima volta mi fa pensare che forse qualche proprietà di cui non sono a conoscenza è in fase di modifica o qualcosa del genere.
Ho pensato di mettere insieme 2 blocchi fisici nella forma approssimativa dello stivale ma non è l'ideale in quanto ci sono altre forme più complesse che voglio usare bodyWithTexture su cui si verifica lo stesso bug.
Ho anche provato bodyWithTexture:monsterTexture
, l'oggetto SKTexture originale invece di bodyWithTexture:monster.texture
, la trama dell'oggetto Mostro.
Ecco il mio codice aggiuntivo mostro. Fammi sapere se hai bisogno di più.
- (Monster *)monster:(NSDictionary *)settings
{
NSDictionary * monsterDefaults = [self monsterDefaults];
NSDictionary * monsterConfig = [self monsterConfig:settings[TYPE]];
SKTexture * monsterTexture = monsterConfig[TEXTURE] ? monsterConfig[TEXTURE] : monsterDefaults[TEXTURE];
Monster * monster = [Monster spriteNodeWithTexture:monsterTexture];
// Animation
if (monsterConfig[ANIMATION]) {
[monster runAction:monsterConfig[ANIMATION]];
}
// Moster Stats
monster.name = MONSTER_SPRITE;
monster.type = settings[TYPE];
monster.points = monsterConfig[POINTS] ? [monsterConfig[POINTS] intValue] : [monsterDefaults[POINTS] intValue];
monster.damage = monsterConfig[DAMAGE] ? [monsterConfig[DAMAGE] intValue] : [monsterDefaults[DAMAGE] intValue];
monster.hp = monsterConfig[HP] ? [monsterConfig[HP] intValue] : [monsterDefaults[HP] intValue];
monster.lethal = monsterConfig[LETHAL] ? [monsterConfig[LETHAL] boolValue] : [monsterDefaults[LETHAL] boolValue];
// Monster Physics
float physicsResize = monsterConfig[RESIZE] ? [monsterConfig[RESIZE] floatValue] : [monsterDefaults[RESIZE] floatValue];
switch ([monsterConfig[SHAPE] intValue]) {
case COMPLEX:
NSLog(@"%@", monster.texture);
NSLog(@"rotation: %f", monster.zRotation);
NSLog(@"x scale: %f", monster.xScale);
NSLog(@"y scale: %f", monster.yScale);
monster.physicsBody = [SKPhysicsBody bodyWithTexture:monster.texture size:monster.texture.size];
break;
case RECTANGLE:
monster.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(monster.size.width * physicsResize, monster.size.height * physicsResize)];
break;
default:
monster.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:(monster.size.height * physicsResize)/2];
break;
}
monster.physicsBody.dynamic = false;
monster.physicsBody.affectedByGravity = false;
monster.physicsBody.categoryBitMask = monsterCategory;
monster.physicsBody.contactTestBitMask = weaponCategory | heroCategory;
monster.physicsBody.collisionBitMask = defaultCategory;
// Monster Flight Pattern
SKAction * flightPattern = [self monsterFlightPattern:monster settings:settings];
// Monster Rotation
// Rotation disabled for physics text
// [self monsterRotation:monster rotationConfig:monsterConfig[ROTATION]];
// Move & Remove
SKAction * remove = [Config removeAction:monster];
[monster runAction:[SKAction sequence:@[flightPattern, remove]]];
return monster;
}
sto caching la consistenza quando i carichi di classe
@property (nonatomic) SKTexture * monsterBootTexture;
...
- (id)initWithFrameSize:(CGSize)frameSize
{
...
SKTextureAtlas * atlas = [SKTextureAtlas atlasNamed:monsterAtlas];
self.monsterBootTexture = [atlas textureNamed:MONSTER_BOOT];
...
}
Il NSLog recita come segue:
2015-01-02 12:03:20.619 Gadget Blaster[3301:665394] <SKTexture> 'boot.png' (97 x 100)
2015-01-02 12:03:20.623 Gadget Blaster[3301:665394] <SKTexture> 'boot.png' (97 x 100)
ho aggiunto i seguenti registri per il commento di LearnCocos2D:
2015-01-03 12:00:06.131 Gadget Blaster[3987:772046] rotation: 0.000000
2015-01-03 12:00:06.133 Gadget Blaster[3987:772046] x scale: 1.000000
2015-01-03 12:00:06.134 Gadget Blaster[3987:772046] y scale: 1.000000
2015-01-03 12:00:08.131 Gadget Blaster[3987:772046] rotation: 0.000000
2015-01-03 12:00:08.131 Gadget Blaster[3987:772046] x scale: 1.000000
2015-01-03 12:00:08.132 Gadget Blaster[3987:772046] y scale: 1.000000
2015-01-03 12:00:10.156 Gadget Blaster[3987:772046] rotation: 0.000000
2015-01-03 12:00:10.156 Gadget Blaster[3987:772046] x scale: 1.000000
2015-01-03 12:00:10.159 Gadget Blaster[3987:772046] y scale: 1.000000
Inoltre, sto riscontrando alcuni problemi imprevisti con le collisioni quando si utilizzano corpi fisici complessi. SKPhysicsBody bodyWithCircleOfRadius
sembra funzionare molto meglio e sto considerando di fare in modo che tutti i mostri cerchino le forme della fisica.
controllare se lo sprite o il relativo genitore è ridimensionato a -1 o ruotato – LearnCocos2D
@ LearnCocos2D Sembra corretto. Ho aggiunto 3 NSLogs al metodo sopra e ho aggiunto l'output del registro dei primi 3 mostri sottostanti. –
Ho lo stesso problema, solo quando la scena viene ricaricata. –