飞机大战开发05按角度发射的子d和拖尾子d的实现

飞机大战开发05按角度发射的子d和拖尾子d的实现,第1张

概述多角度的子d: 这个的实现可以仍然用MoveBy动作来完成,设定一个子d偏移的角度,计算出到出屏幕,子d在x轴和y轴上移动的距离,移动就OK了。 上代码:   void GameLayer::createBulletByAngle(float angle){ Size screenSize = Director::getInstance()->getWinSize() ; Vec2 creP

多角度的子d:

这个的实现可以仍然用MoveBy动作来完成,设定一个子d偏移的角度,计算出到出屏幕,子d在x轴和y轴上移动的距离,移动就OK了。

上代码:

voID GameLayer::createBulletByAngle(float angle){	Size screenSize = Director::getInstance()->getWinSize() ;	Vec2 crePos = m_pPlayerPlane->getposition() ;//子d的初始位置	float flyTime = 1.0f ;	Sprite * pBullet = Sprite::create("bullet3.png") ;	pBullet->setposition(crePos) ;	addChild(pBullet,ZORDER_BulLET_PLAYER) ;	pBullet->setRotation(angle) ;	float varX = Director::getInstance()->getWinSize().wIDth - crePos.x ;	if (angle < 0)	{		varX = crePos.x ;	}	float vary = varX * atan(angle) ;	float movedis = sqrt(varX * varX + vary * vary) ;	flyTime = movedis / Director::getInstance()->getWinSize().height ;//以屏幕高为标准	if (angle < 0)	{		vary = -vary ;		varX = -varX ;	}	pBullet->runAction(		Sequence::create(		MoveBy::create(flyTime,Vec2(varX,vary)),CallFuncN::create(CC_CALLBACK_1(GameLayer::playerBulletMoveEndCallback,this)),RemoveSelf::create(true),nullptr)		) ;	m_pPlayerBullet.pushBack(pBullet) ;}


追尾子d特效:

类似流星,子d飞出去有一条长长的尾巴。好像在暴龙战机上见过这种特效,很绚丽,模仿实现了个,传入终点,就OK。起始点是飞机的位置。没有精确的控制弧度。

上代码:

voID GameLayer::createBulletByBezIEr(Vec2 endPos){	//两个控制点应该在起始点和重点连线的同一侧,这样会形成只有一个弧的路径	Size screenSize = Director::getInstance()->getWinSize() ;	Vec2 crePos = m_pPlayerPlane->getposition() ;//子d的初始位置	Vec2 cp_1 = crePos ;//接近出发点的控制点	Vec2 cp_2 = endPos ;//接近结束点的控制点	float var_x = 100.0f ;	float a = 0 ;	float b = 0 ;	if (crePos.x <= endPos.x)//1,4象限	{		cp_1.x += var_x ;		cp_2.x += var_x ;	}	else//2,3象限	{		cp_1.x -= var_x ;		cp_2.x -= var_x ;	}		a = -(crePos.x - endPos.x) / (crePos.y - endPos.y) ;	b = crePos.y - crePos.x * a ;	cp_1.y =  a * cp_1.x + b  ;	b = endPos.y - endPos.x * a  ;	cp_2.y = a * cp_2.x + b ;	ccBezIErConfig bezIEr;	bezIEr.controlPoint_1 = cp_1;	bezIEr.controlPoint_2 = cp_2;	bezIEr.endposition = endPos;	float flyTime = 0.2f ;	auto bezIErForward = BezIErTo::create(flyTime,bezIEr);	MotionStreak * pBullet = MotionStreak::create(0.5f,1.0f,10.0f,color3B(255,255,0),"bullet1.png") ;	addChild(pBullet,ZORDER_BulLET_PLAYER) ;	pBullet->setposition(crePos) ;	pBullet->runAction(		Sequence::create(		bezIErForward,DelayTime::create(0.5f),nullptr)		) ;}
总结

以上是内存溢出为你收集整理的飞机大战开发05按角度发射的子d和拖尾子d的实现全部内容,希望文章能够帮你解决飞机大战开发05按角度发射的子d和拖尾子d的实现所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1054144.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存