英雄和敌人都创建后,接着我们就需要创建两者使用的战争的武器了,鱼骨炸弹和药剂炸弹(作者干嘛不搞个肉骨头炸弹啊,这更符合狗的形象嘛,哈哈,我不会作图所以也只能照搬了)。这个创建相对简单一点,上代码先吧。
英雄用的子弹类,在GameHeroBullet.h文件中代码如下:
#ifndef _GAME_HERO_BULLET_H__
#define _GAME_HERO_BULLET_H__
#include "cocos2d.h"
using namespace cocos2d;
class GameHeroBullet:public CCNode
{
public:
bool isvisable; //子弹是否在使用
GameHeroBullet(void);
virtual ~GameHeroBullet(void);
void setIsVisable(); //设置子弹在使用
void setIsNotVisable(); //设置子弹不在使用
bool getIsvisable(); //获得子弹是否在使用
virtual void onEnter();
virtual void onExit();
};
#endif
GameHeroBullet.cpp文件代码(暂时还不完全)如下:
#include "GameHeroBullet.h"
GameHeroBullet::GameHeroBullet(void)
{
isvisable = false;
}
GameHeroBullet::~GameHeroBullet(void)
{
}
void GameHeroBullet::setIsVisable()
{
//子弹移动,运行动作
this->setVisible(true);
isvisable = true;
this->runAction(CCSequence::create(CCMoveTo::create((this->getPosition().y + 550)/150,ccp(this->getPosition().x,550)),CCCallFuncN::create(this, callfuncN_selector(GameHeroBullet::setIsNotVisable)),NULL));;
}
void GameHeroBullet::setIsNotVisable()
{
this->setVisible(false);
isvisable = false;
this->stopAllActions();
}
bool GameHeroBullet::getIsvisable()
{
return isvisable;
}
void GameHeroBullet::onEnter()
{
CCNode::onEnter();
//初始化主体
this->setContentSize(CCSizeMake(21,52));
CCSprite *mainbody = CCSprite::create("YuGuZD.png");
addChild(mainbody);
}
void GameHeroBullet::onExit()
{
CCNode::onExit();
}
同样的敌人子弹实现的分别再GameEnemyBullet.h和GameEnemyBullet.cpp中:
#include "cocos2d.h"
using namespace cocos2d;
class GameObjEnemy : public CCNode
{
public:
CCSprite *boom;
CCSprite *mainbody;
GameObjEnemy(void);
virtual ~GameObjEnemy(void);
void releasebullet();
virtual void onEnter();
virtual void onExit();
void movestart();
void restart();
void setdie();
short type;
bool islife;
void setType(short var);
};
#endif
#include "GameEnemyBullet.h"
GameEnemyBullet::GameEnemyBullet(void)
{
isvisable = false;
}
GameEnemyBullet::~GameEnemyBullet(void)
{
}
void GameEnemyBullet::onEnter()
{
CCNode::onEnter();
//初始化主体
this->setContentSize(CCSizeMake(21 , 52));
CCSprite *mainbody = CCSprite::create("DrDogZD.png");
mainbody->runAction(CCRepeatForever::create(CCRotateBy::create(1 ,360)));
addChild(mainbody);
}
bool GameEnemyBullet::getIsvisble(){
return isvisable;
}
void GameEnemyBullet::onExit()
{
CCNode::onExit();
}
void GameEnemyBullet::setIsVisable()
{
//运行动作
this->setVisible(true);
isvisable = true;
this->runAction(CCRepeatForever::create(CCRotateBy::create(1,360)));
this->runAction(CCSequence::create(CCMoveTo::create((this->getPosition().y + 50)/150,ccp(this->getPosition().x,-50)),CCCallFuncN::create(this, callfuncN_selector(GameEnemyBullet::setIsNotVisable)),NULL));;
}
void GameEnemyBullet::setIsNotVisable()
{
this->setVisible(false);
isvisable = false;
this->stopAllActions();
}
在这里说一句,如果你想编译的成功的话,最好把定义在头文件中的函数在.cpp先写好,特别是虚函数,否则在编译的时候会出现错误。
好了下面说下这里面的知识点吧。
知识点:
1.setContentSize():设置层的大小
原来自己还以为这个是用来设置精灵的大小,今天在看了《知意游戏Cocos2d-x》教程中的基本概念后,才明白这个是设置层的大小,之所以层的大小和这个精灵图片大小一致,是因为我们这个层上只有一个精灵,所以大小足够。下面放 一张场景,层,精灵等的关系图,有兴趣的也可以去看下那本书上的详细内容,我觉得还不错。
2.CCRotateBy():旋转动作,第一个参数为渐变时间,第二个参数为x方向歪斜,第三个参数为y方向歪斜。在这里就代表做360度旋转操作。