喵星战争(六):子弹的实现

  英雄和敌人都创建后,接着我们就需要创建两者使用的战争的武器了,鱼骨炸弹和药剂炸弹(作者干嘛不搞个肉骨头炸弹啊,这更符合狗的形象嘛,哈哈,我不会作图所以也只能照搬了)。这个创建相对简单一点,上代码先吧。

英雄用的子弹类,在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度旋转操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值