Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios SpriteKit物理学不起作用_Ios_Objective C_Sprite Kit - Fatal编程技术网

Ios SpriteKit物理学不起作用

Ios SpriteKit物理学不起作用,ios,objective-c,sprite-kit,Ios,Objective C,Sprite Kit,我根据苹果的编程指南制作了一个精灵,但是当游戏开始时,精灵应该会掉下来(根据指南),但它不会 我是这样做的: - (void) createContents { self.backgroundColor = [SKColor colorWithRed:0.1 green:0.6 blue:0.8 alpha:1]; self.scaleMode = SKSceneScaleModeAspectFill; SKSpriteNode *player = [self newP

我根据苹果的编程指南制作了一个精灵,但是当游戏开始时,精灵应该会掉下来(根据指南),但它不会

我是这样做的:

- (void) createContents {
    self.backgroundColor = [SKColor colorWithRed:0.1 green:0.6 blue:0.8 alpha:1];
    self.scaleMode = SKSceneScaleModeAspectFill;

    SKSpriteNode *player = [self newPlayer];
    player.name = @"player";
    player.position = CGPointMake(CGRectGetMidX(self.frame), player.size.width/1.5);

    [self addChild:player];
}
- (SKSpriteNode *) newPlayer {
    SKSpriteNode *aPlayer = [[SKSpriteNode alloc]initWithColor:[SKColor whiteColor] size:CGSizeMake(40,40)];
    aPlayer.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:aPlayer.size];


    return aPlayer;
}
createContent方法由didMoveToView调用


为什么它不像苹果在指南中所说的那样,从屏幕底部跌落下来呢?

我相信播放器确实掉到了屏幕底部,但是你错过它的速度太快了。因为,在屏幕的底部没有物理实体来阻止它,而你的播放器是在屏幕上显示场景后直接创建的

有两种简单的方法可以证明这一点:

  • 如果设置
    aPlayer.physicsBody.affectedByGravity=NO
    您将看到
    aPlayer
    节点四处浮动

  • 如果您更改
    [self addChild:player]
    [自执行选择器:@selector(addChild:)with object:player afterDelay:4.0]
    ,您肯定会在4秒钟后观察到,
    一个图层
    突然出现并下降到屏幕底部


您应该将
aLayer
的Y位置设置为更高的值,以查看更多的下降过程。在SpriteKit坐标系中,(0,0)坐标可能位于左下角,因为您没有设置场景的重力属性

在您的场景中:

self.physicsWorld.gravity = CGVectorMake(0,x) // replace x with your desired gravity magnitude and direction (I suggest -9.8)

使用Cmd+Shift+F find搜索一些内容

  • 确保没有意外设置。dynamic=NO
  • 确保没有意外地将物理世界重力设置为不需要的值。(像0,0)
  • 非常重要的一个。。。确保您正在初始化self.physicsBody,例如
  • self.physicsBody=[SKPhysicsBody-withedgeloopfromrect:self.frame]


    玩家的位置不会改变,它会保持在第一个位置需要更多信息如何初始化
    SKView
    以及
    SKScene
    中是否还有其他内容?仅供参考,当您选择游戏模板时,我正在Xcode上的模板项目上测试这段代码。也许你也可以从这里开始。重力默认为(0,-9.81)。这应该不是问题。你能再详细一点吗?你看到玩家精灵没有移动,或者玩家精灵没有出现?好吧,这可能是个小故障,或者我可能错过了什么,但它现在工作了