void HelloWorld::ccTouchesEnded(CCSet *touches,cocos2d::CCEvent *event) { CCTouch *touch = (CCTouch*)(touches->anyObject()); CCPoint location = touch->getLocationInView(); location = CCDirector::sharedDirector()->convertToGL(location); CCSize winSize = CCDirector::sharedDirector()->getWinSize(); CCSprite *projectile = CCSprite::create("Projectile.png",CCRectMake(0, 0, 20, 20)); projectile->setPosition(ccp(20, winSize.height/2)); // Determinie offset of location to projectile int offX = location.x - projectile->getPosition().x; int offY = location.y - projectile->getPosition().y; if (offX <= 0) return; this->addChild(projectile); // Determine where we wish to shoot the projectile to int realX = winSize.width + (projectile->getContentSize().width/2); float ratio = (float)offY/(float)offX; int realY = (realX*ratio) + projectile->getPosition().y; CCPoint realDest = ccp(realX,realY); // Determine the length of how far we're shooting int offRealX = realX - projectile->getPosition().x; int offRealY = realY - projectile->getPosition().y; float length = sqrtf(( offRealX * offRealX )+(offRealY * offRealY)); float velocity = 480/1;// 480pixels/1sec float realMoveDuration = length / velocity; // Move projectile to actual endpoint projectile->runAction(CCSequence::create(CCMoveTo::create(realMoveDuration, realDest),CCCallFuncN::create(this, callfuncN_selector(HelloWorld::spriteMoveFinished)),NULL)); }