Ios 精灵套件-世界不在正确的位置绘制精灵,尽管skview具有正确的尺寸

Ios 精灵套件-世界不在正确的位置绘制精灵,尽管skview具有正确的尺寸,ios,swift,sprite-kit,Ios,Swift,Sprite Kit,我正试图为我的精灵的游戏打下基础。 但是,地面似乎太短了,尽管它应该占据屏幕高度的1/3 My GameSecene.sks已更改为568x320(横向,iPhone 5/5S) 这是我当前的代码 func initMainGround() { let gSize = CGSizeMake(self.size.width/4*3*2, 120); let ground = SKSpriteNode(color: SKColor.brownColor(), size: gSize)

我正试图为我的精灵的游戏打下基础。 但是,地面似乎太短了,尽管它应该占据屏幕高度的1/3

My GameSecene.sks已更改为568x320(横向,iPhone 5/5S)

这是我当前的代码

func initMainGround() {
    let gSize = CGSizeMake(self.size.width/4*3*2, 120);
    let ground = SKSpriteNode(color: SKColor.brownColor(), size: gSize);
    ground.name = gName; //Ground
    ground.position = CGPointMake(0, 0);

    ground.physicsBody = SKPhysicsBody(rectangleOfSize: gSize);
    ground.physicsBody.restitution = 0.0;
    ground.physicsBody.friction = 0.0;
    ground.physicsBody.angularDamping = 0.0;
    ground.physicsBody.linearDamping = 0.0;
    ground.physicsBody.allowsRotation = false;
    ground.physicsBody.usesPreciseCollisionDetection = true; //accurate collision
    ground.physicsBody.affectedByGravity = false;
    ground.physicsBody.dynamic = false;
    ground.physicsBody.categoryBitMask = gBitmask; // 0x1 << 0
    ground.physicsBody.collisionBitMask = pBitmask; //0x1 << 1        playerCategoryBitmask

    self.addChild(ground);
}
func initMainGround(){
让gSize=CGSizeMake(self.size.width/4*3*2120);
让地面=SKSpriteNode(颜色:SKColor.brownColor(),大小:gSize);
ground.name=gName;//ground
ground.position=CGPointMake(0,0);
ground.physicsBody=SKPhysicsBody(矩形尺寸:gSize);
ground.physicsBody.restoration=0.0;
ground.physicsBody.摩擦力=0.0;
ground.physicsBody.angularDamping=0.0;
ground.physicsBody.linearDamping=0.0;
ground.physicsBody.allowsRotation=false;
ground.physicsBody.usesPreciseCollisionDetection=true;//精确碰撞
ground.physicsBody.affectedByGravity=false;
ground.physicsBody.dynamic=false;

ground.physicsBody.categoryBitMask=gBitmask;//0x1正如Jon所说,这是一个放置问题,而不是大小问题。任何给定节点的默认定位点都位于其中心,因此这里有两个选项:

1) 将ground.position设置为
CGPointMake(CGRectGetMidX(self.frame)、CGRectGetMidY(self.frame))
(或者更好的是,将其作为ivar捕获,因为在屏幕上添加内容时,您会大量引用它,并且没有真正的理由进行几十次计算)


2) 更改地面节点的定位点。这是作为CGPoint完成的,但会被解释为相关节点大小的百分比,默认(中心)为(0.5,0.5)。
ground.ancorpoint=CGPointZero
(这只是
CGPointMake(0,0)
的快捷方式)将节点的定位点设置为其左下角,此时将其位置设置为(0,0)将正确地将其从场景的左下角(或其父节点,在任何情况下)开始放置。

CGPointMake(0,0)是场景的左下角。CGPointMake(CGRectGetMidX(self.frame)、CGRectGetMidY(self.frame))这个函数只是在开始时为玩家添加一个接地,然后玩家可以跳下去。更多的理由出现在玩家的中间,而不是用你的第二个答案,我的精灵似乎只是跳进了地里,站在地上,在地面散落后掉落。屏幕上的梨。我猜身体的实际大小与屏幕上显示的实际大小不匹配?你可以使用“showsPhysics”查看实际的physicsBody。您在哪里设置锚定点?需要在实例化physicsBody之前完成此操作,否则physicsBody可能位于错误的位置。在这种情况下,我猜physicsBody仍然位于(0.5,0.5)锚(地面节点的中心)的中心,这将有一半在屏幕外,并解释你的玩家节点“站在”里面。这是在实例化ground@Jon使用showsPhysics后,物理实体位于错误的位置,绘制的框现在已正确绘制