我是cocos2d的新手,我想知道如何在java中编写一个代码来检查我是否触及了一个sprite我已经尝试过这样的事情。
@Override
public boolean ccTouchesEnded(MotionEvent event)
{
CGPoint location = CCDirector.sharedDirector().convertToGL(CGPoint.ccp(event.getX(), event.getY()));
if ((location.x == zom.getPosition().x) && (location.y == zom.getPosition().y))
{
CCSprite projectile = CCSprite.sprite("bullet.png");
projectile.setPosition(CGPoint.ccp(player.getPosition().x,player.getPosition().y));
addChild(projectile);
float length = (float)Math.sqrt((100 * 100) + (100 * 100));
float velocity = 100.0f / 1.0f;
float realMoveDuration = length / velocity;
projectile.runAction(CCSequence.actions(
CCMoveTo.action(realMoveDuration, CGPoint.ccp(location.x, location.y)),
CCCallFuncN.action(this, "spriteMoveFinished")));
if ((projectile.getPosition().x == location.x) && ( projectile.getPosition().y == location.y))
{
removeChild(projectile, true);
}
}
答案 0 :(得分:1)
有一个非常好的解决方案。使用:
sprite.getBoundingBox.contains(x,y);
其中x和y是触摸位置的位置。
答案 1 :(得分:1)
我希望这会对你有所帮助。我正在使用这种方式处理特定恶意的触摸事件。
public boolean ccTouchesEnded(MotionEvent event) {
CGPoint location = CCDirector.sharedDirector().convertToGL(
CGPoint.ccp(event.getX(), event.getY()));
if (CGRect.containsPoint((newGame1.getBoundingBox()), location)) {
newGame();
}
return super.ccTouchesEnded(event);
}
请将此添加到构造函数
this.setIsTouchEnabled(true);
答案 2 :(得分:0)
虽然我不是cocos2d的主人,但在查看代码时看起来逻辑有点偏。您想检查触摸点是否在sprite当前区域(即((location.x >= sprite.start.x && location.x <= sprite.width) && ((location.y >= sprite.start.y && location.y <= sprite.height)
。
我认为更好的方法是扩展sprite类并包含一个函数来检查一个点是否在sprite区域(float isInSpriteArea(CGPoint point)
)。这样你就可以将一个点传递给一个精灵,它可以告诉你它是否在这种情况下被触及。