【发布时间】: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);
}
它可以工作,但之后我发现了一个小错误(我不确定它是否与此代码有关):有时,当英雄接触硬币时,英雄就像被推到左边一样。我不知道为什么。
- 如何解决?
- 那是我用来做硬币的方式,对吗?
【问题讨论】:
-
看起来你的英雄刚刚撞到了边缘并弹了回来。您是否使用物理学来检测碰撞?如果是这样,您是否将硬币设置为传感器?
-
我想,当两个精灵碰撞时,默认情况下什么都不应该发生。我使用 CGRectIntersectsRect 来检测碰撞。我还在 SpriteBuilder 中将密度、摩擦、弹性设置为零。我不确定您所说的“传感器”是什么意思,但可能是传感器,因为该代码工作正常,并且有时只会出现 collison 的错误。
-
您至少需要显示用于确定玩家触摸硬币并对其做出反应的代码。看起来唯一显示的是旨在掩盖问题的黑客攻击。
-
你是否在 SpriteBuilder 中检查了英雄和硬币的“启用物理”?我猜你是,否则密度、摩擦力和弹性都无法改变。
-
我创建了一个答案,因为它不适合评论。不,这本书只有英文版 :( 很抱歉没有用俄语回复,但我认为 StackExchange 常见问题解答中有关于此的规则。
标签: ios objective-c cocos2d-iphone game-physics spritebuilder