Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.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
Objective c SpriteKit在检测触点开始后检测触点结束_Objective C_Xcode_Sprite Kit - Fatal编程技术网

Objective c SpriteKit在检测触点开始后检测触点结束

Objective c SpriteKit在检测触点开始后检测触点结束,objective-c,xcode,sprite-kit,Objective C,Xcode,Sprite Kit,这就是我试图实现的目标: 场景中有两个精灵节点,self是一个边循环 如果nodeA碰到nobeB,请停止。>>赢 如果nodeA碰到self.>>失去 如果nodeA触摸nobeB但没有停下来触摸self.>>失去 因此,我需要这样的东西: typedef NS_OPTIONS(aero, SpriteNodeCategory) { SpriteNodeCategoryA = 1 << 0, SpriteNodeCategoryB = 1 <<

这就是我试图实现的目标:

场景中有两个精灵节点,self是一个边循环

如果nodeA碰到nobeB,请停止。>>赢

如果nodeA碰到self.>>失去

如果nodeA触摸nobeB但没有停下来触摸self.>>失去

因此,我需要这样的东西:

typedef NS_OPTIONS(aero, SpriteNodeCategory)
{
    SpriteNodeCategoryA    = 1 << 0,
    SpriteNodeCategoryB    = 1 << 1,
};

-(void)didBeginContact:(SKPhysicsContact *)contact
{
    aero collision = (contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask);
    if (collision == (SpriteNodeCategoryA|SpriteNodeCategoryB)) {
        //something here I don't know...
    }
    if (collision == (SpriteNodeCategoryA|SpriteNodeCategoryB)) {
        NSLog(@"FAIL");
    }
}
typedef NS_选项(aero、SpriteNodeCategory)
{

SpriteNodeCategoryA=1您有另一个方法委托(SKPhysicContactDelegate),它执行您询问的任务:

- (void)didEndContact:(SKPhysicsContact *)contact

您还有另一个方法委托(SKPhysicContactDelegate),它执行您询问的任务:

- (void)didEndContact:(SKPhysicsContact *)contact

您还有另一个方法委托(SKPhysicContactDelegate),它执行您询问的任务:

- (void)didEndContact:(SKPhysicsContact *)contact

您还有另一个方法委托(SKPhysicContactDelegate),它执行您询问的任务:

- (void)didEndContact:(SKPhysicsContact *)contact

好吧,这会有点困难

首先,您可以使用“didSimulatePhysics”获取模拟的更新

-(void)didSimulatePhysics
{
    if (_yourNode.physicsBody.angularVelocity == 0 && newGame) {
        if (_yourNode.userData[@"winningCondition"]) {
            [self win];
        };
    }
}
这是因为它会更新并查看您是否有一个获胜的条件-这是从碰撞中获得的(想想:逆向工程)

p.S._yourNode.physicsBody.angularVelocity==0表示节点完全静止

-(void)didBeginContact:(SKPhysicsContact *)contact
{
    uint32_t collision = (contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask);
    if (collision == (CNPhysicsCategoryNodeA|CNPhysicsCategoryNodeB)) {
        _yourNode.userData = [@{@"winningCondition":@(YES)} mutableCopy];
    }
    if (collision == (CNPhysicsCategoryNodeA|CNPhysicsCategoryEdge)) {
        [self lose];
    }
}

-(void)didEndContact:(SKPhysicsContact *)contact
{
    uint32_t collision = (contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask);
    if (collision == (CNPhysicsCategoryNodeA|CNPhysicsCategoryNodeB)) {
        _yourNode.userData = [@{@"winningCondition":@(NO)} mutableCopy];
    }
}
因此,基本上,当A触碰B时,它会通过向节点添加“userData”为您提供一个获胜的条件


剩下的很简单。我想你明白了。

好的,所以这会有点困难

首先,您可以使用“didSimulatePhysics”获取模拟的更新

-(void)didSimulatePhysics
{
    if (_yourNode.physicsBody.angularVelocity == 0 && newGame) {
        if (_yourNode.userData[@"winningCondition"]) {
            [self win];
        };
    }
}
这是因为它会更新并查看您是否有一个获胜的条件-这是从碰撞中获得的(想想:逆向工程)

p.S._yourNode.physicsBody.angularVelocity==0表示节点完全静止

-(void)didBeginContact:(SKPhysicsContact *)contact
{
    uint32_t collision = (contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask);
    if (collision == (CNPhysicsCategoryNodeA|CNPhysicsCategoryNodeB)) {
        _yourNode.userData = [@{@"winningCondition":@(YES)} mutableCopy];
    }
    if (collision == (CNPhysicsCategoryNodeA|CNPhysicsCategoryEdge)) {
        [self lose];
    }
}

-(void)didEndContact:(SKPhysicsContact *)contact
{
    uint32_t collision = (contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask);
    if (collision == (CNPhysicsCategoryNodeA|CNPhysicsCategoryNodeB)) {
        _yourNode.userData = [@{@"winningCondition":@(NO)} mutableCopy];
    }
}
因此,基本上,当A触碰B时,它会通过向节点添加“userData”为您提供一个获胜的条件


剩下的很简单。我想你明白了。

好的,所以这会有点困难

首先,您可以使用“didSimulatePhysics”获取模拟的更新

-(void)didSimulatePhysics
{
    if (_yourNode.physicsBody.angularVelocity == 0 && newGame) {
        if (_yourNode.userData[@"winningCondition"]) {
            [self win];
        };
    }
}
这是因为它会更新并查看您是否有一个获胜的条件-这是从碰撞中获得的(想想:逆向工程)

p.S._yourNode.physicsBody.angularVelocity==0表示节点完全静止

-(void)didBeginContact:(SKPhysicsContact *)contact
{
    uint32_t collision = (contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask);
    if (collision == (CNPhysicsCategoryNodeA|CNPhysicsCategoryNodeB)) {
        _yourNode.userData = [@{@"winningCondition":@(YES)} mutableCopy];
    }
    if (collision == (CNPhysicsCategoryNodeA|CNPhysicsCategoryEdge)) {
        [self lose];
    }
}

-(void)didEndContact:(SKPhysicsContact *)contact
{
    uint32_t collision = (contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask);
    if (collision == (CNPhysicsCategoryNodeA|CNPhysicsCategoryNodeB)) {
        _yourNode.userData = [@{@"winningCondition":@(NO)} mutableCopy];
    }
}
因此,基本上,当A触碰B时,它会通过向节点添加“userData”为您提供一个获胜的条件


剩下的很简单。我想你明白了。

好的,所以这会有点困难

首先,您可以使用“didSimulatePhysics”获取模拟的更新

-(void)didSimulatePhysics
{
    if (_yourNode.physicsBody.angularVelocity == 0 && newGame) {
        if (_yourNode.userData[@"winningCondition"]) {
            [self win];
        };
    }
}
这是因为它会更新并查看您是否有一个获胜的条件-这是从碰撞中获得的(想想:逆向工程)

p.S._yourNode.physicsBody.angularVelocity==0表示节点完全静止

-(void)didBeginContact:(SKPhysicsContact *)contact
{
    uint32_t collision = (contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask);
    if (collision == (CNPhysicsCategoryNodeA|CNPhysicsCategoryNodeB)) {
        _yourNode.userData = [@{@"winningCondition":@(YES)} mutableCopy];
    }
    if (collision == (CNPhysicsCategoryNodeA|CNPhysicsCategoryEdge)) {
        [self lose];
    }
}

-(void)didEndContact:(SKPhysicsContact *)contact
{
    uint32_t collision = (contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask);
    if (collision == (CNPhysicsCategoryNodeA|CNPhysicsCategoryNodeB)) {
        _yourNode.userData = [@{@"winningCondition":@(NO)} mutableCopy];
    }
}
因此,基本上,当A触碰B时,它会通过向节点添加“userData”为您提供一个获胜的条件


其余的都很简单。我想你明白了。

你是如何把它放到-(void)中的didBeginContact:method?您不需要将其放入didBeginContact:,您需要添加两种方法:didBeginContact:在联系人开始时处理操作和didEndContact:在联系人结束时处理操作。对,我如何将if语句传递给didEndContact?我不知道您想做什么,但是,是的,您可以传递if和您可以像使用didBeginContact一样使用它:区别在于之后调用该方法。如何在两个方法之间传递if语句?能否给出一个代码示例?如何将其放入-(void)didBeginContact:method?您不需要将其放入didBeginContact:,您需要添加两种方法:didBeginContact:在联系人开始时处理操作和didEndContact:在联系人结束时处理操作。对,我如何将if语句传递给didEndContact?我不知道您想做什么,但是,是的,您可以传递if和您可以像使用didBeginContact一样使用它:区别在于之后调用该方法。如何在两个方法之间传递if语句?能否给出一个代码示例?如何将其放入-(void)didBeginContact:method?您不需要将其放入didBeginContact:,您需要添加两种方法:didBeginContact:在联系人开始时处理操作和didEndContact:在联系人结束时处理操作。对,我如何将if语句传递给didEndContact?我不知道您想做什么,但是,是的,您可以传递if和您可以像使用didBeginContact一样使用它:区别在于之后调用该方法。如何在两个方法之间传递if语句?能否给出一个代码示例?如何将其放入-(void)didBeginContact:method?您不需要将其放入didBeginContact:,您需要添加两种方法:didBeginContact:在联系人开始时处理操作和didEndContact:在联系人结束时处理操作。对,我如何将if语句传递给didEndContact?我不知道您想做什么,但是,是的,您可以传递if和您可以像使用didBeginContact一样使用它:区别在于之后调用该方法。如何在两个方法之间传递if语句?能否给出一个代码示例?