gpt4 book ai didi

ios - 有时 Sprite 在接触另一个 Sprite 时会被推开

转载 作者:行者123 更新时间:2023-11-29 02:48:09 24 4
gpt4 key购买 nike

我正在使用 cocos2d 和 SpriteBuilder 制作游戏。有一个英雄 Sprite 和硬币,应该由他收集。这是一款水平卷轴游戏,因此每次英雄触摸一枚硬币时,这枚硬币都会将其 x 坐标向右移动 2000px,并随机生成新的 y 坐标。使用更新方法,我将它作为"new"硬币移动到可见区域。但是当英雄飞过并且没有收集它时,硬币只有在它已经离开屏幕时才必须改变坐标,所以我尝试了这个解决方案:

-(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. 是那种方式,我正在使用硬币,对吗?

最佳答案

我发现您的方法有两个问题:

<强>1。硬币英雄弹跳。

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

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

coin.physicsBody.sensor = YES;

这样的事情是我相信你首先需要学习纯Cocos2D然后才使用让你的生活更轻松的工具(例如SpriteBuilder)的原因之一。这是一个很棒的工具,但在某些情况下,您仍然需要了解幕后发生的事情。

<强>2。您将物理与 CGRectIntersectsRect

之类的东西混合在一起

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

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

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

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

关于ios - 有时 Sprite 在接触另一个 Sprite 时会被推开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24850464/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com