【问题标题】:add new child in didBeginContact, but position change to zero?在 didBeginContact 中添加新孩子,但位置更改为零?
【发布时间】:2014-05-13 04:06:10
【问题描述】:

我有这样的代码:

    eggSprite *egg = [[eggSprite alloc]init];
    egg.position = CGPointMake(100, 100);
    [self addChild:egg];

如果我把它放在我的更新逻辑中,一切都很好,但是如果我把它放在didBeginContact:方法中,那就很奇怪了,它会添加这个孩子,但位置会设置为(0,0),是我不能在 didBeginContact: 方法中添加节点吗?还是我做错了什么?

- (void)didBeginContact:(SKPhysicsContact *)contact
{

eggSprite *egg = [[eggSprite alloc]init];
egg.position = CGPointMake(100, 100);

[self addChild:egg];                // <---- after this , the egg's position is change to (0,0) outside this block
}

【问题讨论】:

  • 在两个SKPhysicsBody实例发生碰撞时调用didBeginContact方法,用于实现碰撞检测。我认为您正在寻找的是 -touchesBegan: 方法。
  • 是的,我知道。但我的逻辑是,当碰撞时,然后做一些创建节点并添加到场景中,而不仅仅是触摸添加。
  • 所以问题是 -didBeginContact 方法没有被调用?
  • 不,didBeginContac 调用了。问题是,当我添加子鸡蛋时,鸡蛋的位置设置不正确。它转到 (0,0) ,而实际上我将它设置为 (100,100) 。抱歉我的笨拙描述。

标签: sprite-kit


【解决方案1】:

didBeginContact: 中添加新节点是错误的。而是在 didBeginContact: 期间将任何新节点添加到 MutableArray 中,并在循环的 update: 部分将它们添加到您的世界中。

【讨论】:

    猜你喜欢
    • 2021-07-21
    • 1970-01-01
    • 2021-08-10
    • 1970-01-01
    • 1970-01-01
    • 2022-08-17
    • 1970-01-01
    • 2018-01-25
    • 1970-01-01
    相关资源
    最近更新 更多