Hallo Ich versuche, diesen Fehler zu beheben, mit Spritekit Physik Form auf den Kopf gestellt erscheint.SpriteKit SKPhysicsBody bodyWithTexture ist auf den Kopf gestellt
[SKPhysicsBody bodyWithTexture:monsterTexture size:monsterTexture.size]
Wenn das Monster das erste Mal erscheint, ist die Körperausrichtung des Phsyics korrekt. Aber das zweite Mal und jedes Mal danach erscheint das Monster, dessen Physikkörper entlang der Y-Achse invertiert ist. Siehe Bild wo skView.showsPhysics = true;
so die Physik Formen angezeigt werden. Die Tatsache, dass es beim ersten Mal richtig funktioniert, lässt mich denken, dass eine Eigenschaft, die mir nicht bekannt ist, modifiziert wird oder so.
Ich dachte daran, 2 Physikblöcke zusammen in die grobe Form des Bootes zu setzen, aber das ist nicht ideal, da es andere komplexere Formen gibt, die ich mit bodyWithTexture verwenden möchte, die den gleichen Bug haben.
Ich habe auch versucht bodyWithTexture:monsterTexture
, das Original SKTexture Objekt statt bodyWithTexture:monster.texture
, die Monster-Objekt-Textur.
Hier ist mein Add Monster-Code. Lass es mich wissen, wenn du mehr brauchst.
- (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;
}
Ich Caching der Textur, wenn die Klasse Lasten
@property (nonatomic) SKTexture * monsterBootTexture;
...
- (id)initWithFrameSize:(CGSize)frameSize
{
...
SKTextureAtlas * atlas = [SKTextureAtlas atlasNamed:monsterAtlas];
self.monsterBootTexture = [atlas textureNamed:MONSTER_BOOT];
...
}
Die NSLog lautet wie folgt:
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)
ich die folgenden Protokolle pro LearnCocos2D Kommentar hinzugefügt haben:
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
Außerdem treten bei der Verwendung komplexer physikalischer Körper unerwartete Probleme mit Kollisionen auf. SKPhysicsBody bodyWithCircleOfRadius
scheint viel besser zu sein und ich denke darüber nach, alle Monster dazu zu bringen, physikalische Formen zu kreisen.
Überprüfen Sie, ob das Sprite oder sein Elternteil entweder auf -1 oder – LearnCocos2D
skaliert ist. @ LearnCocos2D Sieht korrekt aus. Ich habe der obigen Methode 3 NSLogs hinzugefügt und die logarithmische Ausgabe der ersten 3 Monster hinzugefügt. –
Ich habe das gleiche Problem, nur wenn die Szene neu geladen wird. –