【问题标题】:Sometimes sprite is pushed away when touches another sprite有时,当触摸另一个精灵时,精灵会被推开
【发布时间】:2014-07-20 12:24:06
【问题描述】:

我正在使用 cocos2d 和 SpriteBuilder 制作游戏。有一个英雄精灵和硬币,应该由他收集。那是一个横向滚动的游戏,所以每次英雄接触一个硬币,这个硬币的x坐标向右改变2000px,并随机生成新的y坐标。使用更新方法,我将它作为“新”硬币移动到可见区域。但是当英雄飞过并且没有收集它时,硬币必须在它已经离开屏幕时才改变坐标,所以我尝试了这个解决方案:

-(void)update:(CCTime)delta{



_coin.position=ccp(_coin.position.x - delta * scrollSpeed, _coinY);
if (CGRectIntersectsRect(_hero.boundingBox,_coin.boundingBox)) {
    _coinY=arc4random() % 801 + 100;

    _coin.position=ccp(_coin.position.x + 2000.f,_coinY);

}
else if(_hero.position.x >= _coin.position.x + 150){
    _coinY=arc4random() % 801 + 100;

    _coin.position=ccp(_coin.position.x + 2000.f,_coinY);
}

它可以工作,但之后我发现了一个小错误(我不确定它是否与此代码有关):有时,当英雄接触硬币时,英雄就像被推到左边一样。我不知道为什么。

  1. 如何解决?
  2. 那是我用来做硬币的方式,对吗?

【问题讨论】:

  • 看起来你的英雄刚刚撞到了边缘并弹了回来。您是否使用物理学来检测碰撞?如果是这样,您是否将硬币设置为传感器?
  • 我想,当两个精灵碰撞时,默认情况下什么都不应该发生。我使用 CGRectIntersectsRect 来检测碰撞。我还在 SpriteBuilder 中将密度、摩擦、弹性设置为零。我不确定您所说的“传感器”是什么意思,但可能是传感器,因为该代码工作正常,并且有时只会出现 collison 的错误。
  • 您至少需要显示用于确定玩家触摸硬币并对其做出反应的代码。看起来唯一显示的是旨在掩盖问题的黑客攻击。
  • 你是否在 SpriteBuilder 中检查了英雄和硬币的“启用物理”?我猜你是,否则密度、摩擦力和弹性都无法改变。
  • 我创建了一个答案,因为它不适合评论。不,这本书只有英文版 :( 很抱歉没有用俄语回复,但我认为 StackExchange 常见问题解答中有关于此的规则。

标签: ios objective-c cocos2d-iphone game-physics spritebuilder


【解决方案1】:

我发现您的方法存在 2 个问题:

1.英雄反弹硬币。

要解决此问题,您需要将您的硬币设为sensor。这样你仍然会收到关于碰撞的通知,但英雄只会穿过硬币而不实际击中它。

我不确定你是否可以在SpriteBuilder中设置这个,但可能你可以在加载场景后枚举所有硬币并将sensor属性设置为YES

coin.physicsBody.sensor = YES;

这样的事情是我认为您首先需要学习纯 Cocos2D 的原因之一,然后才使用诸如 SpriteBuilder 等使您的生活更轻松的工具。这是一个很棒的工具,但在某些情况下,您仍然需要知道幕后发生了什么。

2。您正在将物理与 CGRectIntersectsRect

之类的东西混合在一起

如果您使用物理引擎,则需要通过collision delegate 检测碰撞,而不是通过在update: 中检查CGRectIntersectsRect

很难用几句话来解释如何做到这一点,所以这里有一个很好的tutorial,它展示了如何在 Cocos2D v3 中检测碰撞,当然在my book 中有一个关于此的章节。

顺便说一句,您在操作物理节点时根本不应该使用update:,而是使用fixedUpdate:

希望这能帮助您解决问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-27
    • 1970-01-01
    相关资源
    最近更新 更多