为什么SKSpriteNode node.frame.size.width小于node.size.width?
这是示例代码,可能您需要插入自己的图像
- (void)DrawRect:(SKSpriteNode *)node
{
SKShapeNode *rect = [[SKShapeNode alloc] init];
CGMutablePathRef myPath = CGPathCreateMutable();
CGPathAddRect(myPath, nil, node.frame);
rect.path = myPath;
rect.lineWidth = 1;
rect.strokeColor = [SKColor whiteColor];
rect.glowWidth = 0;
[self addChild:rect];
}
//这里绘制精灵
-(void) DrawSpriteNode
{
SKTextureAtlas *atlas = [SKTextureAtlas atlasNamed:@"character"];
SKSpriteNode* node = (SKSpriteNode *)[SKSpriteNode spriteNodeWithTexture:[atlas textureNamed:@"testimage.png"]];
node.position = CGPointMake(self.anchorPoint.x, self.anchorPoint.y);
NSLog(@"node frame width x :%f",node.frame.size.width);
NSLog(@"node frame height y :%f",node.frame.size.height);
NSLog(@"node width y :%f",node.size.width);
NSLog(@"node height y :%f",node.size.height);
node.anchorPoint = CGPointMake(0.5, 0.5);
[self DrawRect: node];
[self addChild:node];
}
答案 0 :(得分:6)
SKSpriteNode对象的size
属性是一个特殊属性,允许您显式设置大小。 frame
属性由SKNode对象使用其中的几个属性计算。以下引用来自Apple的SKNode对象文档,SKSpriteNode继承自:
“frame属性为节点的可视内容提供了边界矩形,由缩放和旋转属性修改。如果节点的类绘制内容,则帧为非空。每个节点子类以不同方式确定此内容的大小。在某些子类中,节点内容的大小是显式声明的,例如在SKSpriteNode类中。在其他子类中,内容大小由类使用其他对象属性隐式计算。例如,SKLabelNode对象使用以下内容确定其内容大小。标签的消息文本和字体特征。“