Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.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 physicsBody在另一个类中初始化时不工作?_Ios_Iphone_Objective C_Sprite Kit_Skphysicsbody - Fatal编程技术网

Ios physicsBody在另一个类中初始化时不工作?

Ios physicsBody在另一个类中初始化时不工作?,ios,iphone,objective-c,sprite-kit,skphysicsbody,Ios,Iphone,Objective C,Sprite Kit,Skphysicsbody,出于某种原因,我的主要玩家的身体在场景中没有实际工作。 在场景中,我初始化了我的播放器 -(id)initWithSize:(CGSize)size { if (self = [super initWithSize:size]) { Eskimo *runner = [[Eskimo alloc]init]; runner.position = CGPointMake(100, 300); [self addChild:runner]; self.ph

出于某种原因,我的主要玩家的身体在场景中没有实际工作。 在场景中,我初始化了我的播放器

-(id)initWithSize:(CGSize)size {
    if (self = [super initWithSize:size]) {
    Eskimo *runner = [[Eskimo alloc]init];
    runner.position = CGPointMake(100, 300);
    [self addChild:runner];


    self.physicsWorld.gravity = CGVectorMake(0, -3); // 0, -2

    self.physicsWorld.contactDelegate = self;

    [runner performRun];
    }
return self;
}
这是我的爱斯基摩人课程的初始版本:

-(id)init {
if (self = [super init]) {

    self.name = @"runner";

    self.physicsBody = ((Eskimo*)[[Physics alloc]initPhys:self.name :CGSizeMake(60, 60)]).physicsBody;

}

return self;
}
这是我的物理课的初始化部分:

-(instancetype)initPhys:(NSString*)string :(CGSize)size{
if (self = [super init]) {
    self.type = string;

    if ([self.type isEqualToString:@"runner"]) {
        self.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:size];
        self.physicsBody.restitution = 0.3;
        self.physicsBody.mass = 1;
        self.physicsBody.categoryBitMask = runnerCategory;
        self.physicsBody.contactTestBitMask = monsterCategory;
        self.physicsBody.collisionBitMask = groundCategory|monsterCategory;

    }
}

return self;


}

我在scene类中输出了跑步者的恢复结果,只是想看看身体是否在那里,它是否正常。然而,即使我设置了一个重力向量,跑步者也不受它的影响,也不受我施加给它的任何力的影响。我不知道为什么,因为我以前在爱斯基摩人的课堂上有物理身体的东西,而没有物理课,它就起作用了。这里有我遗漏的东西吗?你能不能像我在爱斯基摩人班上做的那样,把身体等同起来?

有些东西不符合逻辑。首先,将physicsBody同时指定给物理类和爱斯基摩类。如果爱斯基摩人和物理学都是SK*Node的子类,那就有问题了。此外,您将物理强制转换为爱斯基摩-在本例中并不重要,但将基类强制转换为子类(?)是非法的。爱斯基摩和物理都是SKNode的子类。这怎么会是个问题呢?我只是将两个节点的物理体相等在一起。物理类初始化了游戏中其他对象的物理,我只是忽略了这些部分,因为结果与此相同。问题是同一个物理体不能分配给两个或多个节点。爱斯基摩人和物理课都使用同一个身体,这是行不通的。您甚至不应该创建物理类,您只需要一个返回skphysicsbody的方法。