Cocos2D-X SimpleGame cocos2d-x如何发射子弹(3) ----版本cocos2d-2.0-x-2.0.3 .

Hi,敌人一直向小黑侠进攻,为什么小黑侠不发动攻击呢?

哈哈,当然是我们还没做呢,今天我们就来让小黑侠发射子弹罗,呼呼,开始罗

 

首先我们的 HelloWorld是继承CCLayerColor,而CCLayerColor又继承CCLayer,OK

我们需要的效果的点哪里,子弹就往哪里打,很容易就想到我们要开启CCLayer的触摸,

看代码如下:

再次说明下 cocos2d-x 1.x   this->setIsTouchEnabled(true);

而                   cocos2d-x 2.x   this->setTouchEnabled(true);

	//设置接受触摸
	this->setTouchEnabled(true);

这样我们就能接受到touch event的了。

在HelloWorldScene.h里声明回调函数“void ccTouchesEnded(cocos2d::CCSet* touches, cocos2d::CCEvent* event);”,并在HelloWorldScene.cpp实现这个函数。

接下来看代码:

//*************
//Touch Method
//*************
//触摸结束
void HelloWorld::ccTouchesEnded(CCSet* touches, CCEvent* event)
{
	CCTouch* touch = (CCTouch*)(touches->anyObject());
	CCPoint location = touch->getLocationInView();
	location = CCDirector::sharedDirector()->convertToGL(location);       //转为opengl坐标

	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;

	float realMoveDuration = length/velocity;

	//移动Action
	// Move projectile to actual endpoint
	projectile->runAction(CCSequence::create(
		CCMoveTo::create(realMoveDuration, realDest),
		CCCallFuncN::create(this, callfuncN_selector(HelloWorld::spriteMoveFinished)),NULL));
	
}

好了,编译并运行,哈哈,开始发子弹了啊,希望大家相互学习,有不对可以指出。

Cocos2D-X SimpleGame cocos2d-x如何发射子弹(3) ----版本cocos2d-2.0-x-2.0.3 ._第1张图片

你可能感兴趣的:(Cocos2D-X SimpleGame cocos2d-x如何发射子弹(3) ----版本cocos2d-2.0-x-2.0.3 .)