Cocos2d-x   发布时间:2022-05-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了cocos2dx学习之路(二)大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

过了将近一个月了,终于之前说的主机与敌机,子弹与敌机,子弹与主机的碰撞问题解决,太开心了,写出自己的东西就是开心,等下把那块代码贴上来,顺带上一些我写的游戏的图片。

我定义了个子弹类,用来主机发射子弹用的,因为敌机与主机的方向不同,所以,敌机的子弹写到敌机类中,由于子弹类中需要用到主机的位置并且主机只有一个,所以我将主机定义成了一个单列变量,以便读取其位置。说到子弹,由于子弹有很多,会无数的发射,所以我首先用CCSpriteBatchNode,CCSpriteBatchNode是cocos2d-x为了降低渲染批次而建立的一个专门管理精灵的类。所以用他管理子弹,然后定义数组,将CCSpriteBatchNode中图片保存在CCArray中,循环10次,重复用这10张图片,敌机也是同样的理。(由于刚学,所以可能会有很多不够优化,或是方法有问题,还请大家海涵)

子弹类,主机类,敌机类,都是层,最终加入GameSence场景中,在该场景中实现所谓的碰撞检测逻辑。实现这一步,大概整个游戏差不多了。另外背景层的话,我是单独定义一个背景层用来实现背景的移动。好吧,下面给出一些代码~~

子弹的创建:

void BulletSprite::Create()
{
batch=CCSpriteBatchNode::create("bullet2.png");
batch->getTexture()->setAliasTexParameters();
addChild(batch);
bulletArr=CCArray::create();
bulletArr->retain();
num=0;
for(int i=0;i<10;i++)
{
bSprite=CCSprite::createWithTexture(batch->getTexture());
bulletArr->addObject(bSpritE);
}
}
void BulletSprite::moving(float dt)
{
auto PlanePos =FlySprite::sharedPlane->getChildByTag(AIRFLY)->getPosition();
bulletX=PlanePos.x;
bulletY=PlanePos.y+40;
Sprite=(CCSprite* )bulletArr->objectATindex(num);
//根据索引获得对象,所以这里是根据Num得到数组中的元素
Sprite->setPosition(ccp(bulletX,bulletY));
this->addChild(Sprite,1);
//当前对象要移动的位置
@H_821_12@move=CCMoveTo::create(0.5f,ccp(bulletX,visibleSize.height));
CCActionInstant *funcN=CCCallFuncN::create(this,callfuncN_SELEctor(BulletSprite::removeBullet));
Sprite->runAction(CCSequence::create(move,funcN,NULL));
num++;
if(num>=10)
num=0;
}
void BulletSprite::removeBullet(CCNode *p)
{
CCSprite *sp=(CCSprite*)p;
this->removeChild(sp);
}

//敌军和主机的碰撞,主机减分,敌机死亡
void GameScene::update(float dt)
{
sp1=(CCSprite*)eSprite->enemyArr->objectATindex(eynum);
sp1->setVisible(true);
if(fSprite->getBoundingBox().intersectsRect(sp1->boundingBox()))
{
//爆炸效果
kill(sp1);
this->removeChild(sp1);
sp1->setVisible(false);
@H_821_12@move=CCMoveTo::create(0.001f,ccp(-1,-1));
sp1->runAction(movE);
fSprite->life--;
if(fSprite->life==0)
{
//this->removeChild(fSpritE);
CCScene *s=EndScene::scene();
CCDirector::sharedDirector()->replaceScene(s);
}
}
eynum++;
if(eynum>=10)
eynum=0;
}

//碰撞爆炸效果,图片资源来自cocos2d-x中的samples\Javascript\Shared\games\MoonWarriors

void GameScene::kill(CCSprite *sp)
{
CCSpriteFrameCache *cache=CCSpriteFrameCache::sharedSpriteFrameCache();
cache->addSpriteFramesWithFile("explosion.plist");
CCSprite *ex=CCSprite::createWithSpriteFramename("explosion_01.png");
ex->setPosition(ccp(sp->getPositionX(),sp->getPositionY()));
this->addChild(eX);
CCArray *arr=CCArray::createWithCapacity(14);
char str[50]={0};
for(int i=1;i<15;i++)
{
sprintf(str,"explosion_%02d.png",i);
CCSpriteFrame *frame=cache->spriteFrameByName(str);
arr->addObject(framE);
}
CCAnimation *animation=CCAnimation::createWithSpriteFrames(arr,0.02f);
CCActionInstant *funcN=CCCallFuncN::create(this,callfuncN_SELEctor(GameScene::removE));

ex->runAction(CCSequence::create(CCAnimate::create(animation),NULL));


}
void GameScene::remove(CCNode *p)
{
CCSprite *sp=(CCSprite*)p;
this->removeChild(sp);
}


主要代码大概是这样,路漫漫~~~继续学习吧~~~

大佬总结

以上是大佬教程为你收集整理的cocos2dx学习之路(二)全部内容,希望文章能够帮你解决cocos2dx学习之路(二)所遇到的程序开发问题。

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。