这是我试图让弹丸在点击枪(精灵)时做一些动作 但当触及精灵canon1“射弹”没有出来时,如果有人知道这有帮助我。
@Override
public boolean ccTouchesBegan(MotionEvent event)
{
// Choose one of the touches to work with
// CGPoint location = CCDirector.sharedDirector().convertToGL(CGPoint.ccp(event.getX(), event.getY()));
if(CGRect.containsPoint((canon2.getBoundingBox()), location)){
// Set up initial location of projectile
CGSize winSize = CCDirector.sharedDirector().displaySize();
_nextProjectile = CCSprite.sprite("fireball50.png");
System.out.println("projectile working");
//_nextProjectile.setPosition(20, winSize.height / 2.0f);
_nextProjectile.setPosition(CGPoint.ccp(65, 120));
// Determine offset of location to projectile
int offX = (int)(location.x - _nextProjectile.getPosition().x);
int offY = (int)(location.y - _nextProjectile.getPosition().y);
// Bail out if we are shooting down or backwards
if (offX <= 0)
return true;
_nextProjectile.setTag(3);
// Determine where we wish to shoot the projectile to
int realX = (int)(winSize.width + (_nextProjectile.getContentSize().width / 2.0f));
float ratio = (float)offY / (float)offX;
int realY = (int)((realX * ratio) + _nextProjectile.getPosition().y);
CGPoint realDest = CGPoint.ccp(realX, realY);
float velocity = 480.0f / 1.0f; // 480 pixels / 1 sec
float realMoveDuration = length / velocity;
// Move projectile to actual endpoint
_nextProjectile.runAction(CCSequence.actions(
CCMoveTo.action(realMoveDuration, realDest),
CCCallFuncN.action(this, "spriteMoveFinished")));
}
答案 0 :(得分:1)
首先使用
设置触控功能 this.setIsTouchEnabled(true);
然后将您的功能更改为
public boolean ccTouchesBegan(MotionEvent event)
{
CGPoint location = CCDirector.sharedDirector().convertToGL(CGPoint.ccp(event.getX(), event.getY()));
// Set up initial location of projectile
CGSize winSize = CCDirector.sharedDirector().displaySize();
_nextProjectile = CCSprite.sprite("fireball50.png");
// _nextProjectile.setPosition(20, winSize.height / 2.0f);
_nextProjectile.setPosition(CGPoint.ccp(65, 120));
for (CCSprite target : targets)
{
if (CGRect.containsPoint((target.getBoundingBox()), location))
{
// Determine offset of location to projectile
int offX = (int) (location.x - _nextProjectile.getPosition().x);
int offY = (int) (location.y - _nextProjectile.getPosition().y);
// Bail out if we are shooting down or backwards
_nextProjectile.setTag(3);
// Determine where we wish to shoot the projectile
// to
int realX = (int) (winSize.width + (_nextProjectile.getContentSize().width / 2.0f));
float ratio = (float) offY / (float) offX;
int realY = (int) ((realX * ratio) + _nextProjectile.getPosition().y);
CGPoint realDest = CGPoint.ccp(realX, realY);
// Determine the length of how far we're shooting
int offRealX = (int) (realX - _nextProjectile.getPosition().x);
int offRealY = (int) (realY - _nextProjectile.getPosition().y);
float length = FloatMath.sqrt((offRealX * offRealX) + (offRealY * offRealY));
float velocity = 480.0f / 1.0f; // 480 pixels / 1
// sec
float realMoveDuration = length / velocity;
System.out.println(" - t tag!!!!!!!!!!!!!!!!!!!!! - ");
_nextProjectile.runAction(CCSequence.actions(CCMoveTo.action(realMoveDuration, realDest),
CCCallFuncN.action(this, "spriteMoveFinished")));
double angleRadians = Math.atan((double) offRealY / (double) offRealX);
double angleDegrees = Math.toDegrees(angleRadians);
double cocosAngle = -1 * angleDegrees;
double rotationSpeed = 0.5 / Math.PI;
double rotationDuration = Math.abs(angleRadians * rotationSpeed);
target.runAction(CCSequence.actions(
CCRotateTo.action((float) rotationDuration, (float) cocosAngle),
CCCallFunc.action(this, "finishShoot")));
break;
}
}
return true;
}