我正在Eclipse上开发一款Android游戏,其中一个精灵在几个平台上跳跃到顶部,但我遇到了困难。这是我的情况:我的角色精灵(在这种情况下我将其命名为Sprite1)移动,当我的应用程序启动时,我在随机位置创建另外3个精灵(平台)。应用程序启动时成功创建平台。但是没有检测到它们与Sprite1之间的冲突。我尝试了很多解决方案,现在我被困了几天。任何帮助或建议将不胜感激。
我尝试在创建平台时创建rects,然后使用rects检测碰撞,但它们仍然不会发生冲突。我使用Java语言。 :)
我用它来创建精灵并检测碰撞:
创建平台精灵(这是我随机生成平台的方式,如果这里有错误,我确定我只是复制了错误,因为创建或平台精灵正常工作。):
public void addRandomPlatform(){
Random rand = new Random();
randPlat = CCSprite.sprite("platform2.png");
randPlat.setPosition(actualX, actualY);
actualY -= (int)(randPlat.getContentSize().height*4);
addChild(randPlat,2);
}
然后我在我的应用程序启动时调用此方法。
检测碰撞:
playerRect = CGRect.make(player.getPosition().x - (player.getContentSize().width / 4.0f),//- (player.getContentSize().width / 2.0f),
player.getPosition().y - (player.getContentSize().height / 2.0f),
player.getContentSize().width/3.0f,
player.getContentSize().height/8.0f);
if(CGRect.intersects(playerRect, randPlat))
{
*my codes for stopping the jump*
}
我希望这很清楚。提前谢谢!
答案 0 :(得分:0)
看起来randRect是CCSprite,而不是CGRect。您应该像创建playerRect一样创建CGRect(随机平台)。
另外,为什么你将玩家的宽度/高度分别分为3和8?我不认为这就是你想要的,它会导致playerRect只是宽度的一个,并且是实际精灵高度的1/8。
答案 1 :(得分:0)
@Override
public boolean ccTouchesEnded(MotionEvent event) {
CGPoint point = ranSprite.getPosition();// THE POSITION MUST BE YOUR RANDOM SPRITES POSITIONS
List<CCNode> childsList = this.getChildren();
for(CCNode childSprite : childsList){
if(childSprite.getTag() == Constants.PLAYER_TAG && childSprite.getBoundingBox().contains(point.x, point.y)){
// Do what ever you want
}
}