分享一个《打地鼠》的小游戏,cocos2dx版本,《打地鼠》cocos2dx
先上效果图:
主要的类:
#include "Hole.h"
#include <stdlib.h>
#include "ccMacros.h"
Hole::Hole(void)
{
this->image = NULL;
this->animation = NULL;
this->hit = NULL;
this->state = 0;
}
Hole::~Hole(void)
{
}
void Hole::onEnter()
{//监听触摸事件
CCDirector* pDirector = CCDirector::sharedDirector();
pDirector->getTouchDispatcher()->addTargetedDelegate(this, -128, false);
CCNode::onEnter();
}
void Hole::onExit()
{
CCDirector* pDirector = CCDirector::sharedDirector();
pDirector->getTouchDispatcher()->removeDelegate(this);
CCNode::onExit();
}
CCRect Hole::rect()
{
CCSize size = this->image->getContentSize();
return CCRectMake(-size.width / 2, -size.height / 2, size.width, size.height);
}
bool Hole::init()
{//初始化图片
CCSprite::init();
this->image = CCSprite::create("emptyhole.JPG");
CCSize size = this->image->getContentSize();
this->setContentSize(size);
this->image->setPosition(CCSize(size.width/2,size.height/2));
this->addChild(this->image);
return true;
}
void Hole::update(float tick)
{
if( rand()%100 > 60)
{//地鼠随机出洞,
this->out();
}
}
void Hole::out()
{
this->animation = CCAnimation::create();
this->animation->addSpriteFrameWithFileName("show1.JPG");
this->animation->addSpriteFrameWithFileName("show2.JPG");
this->animation->addSpriteFrameWithFileName("show3.JPG");
this->animation->addSpriteFrameWithFileName("show4.JPG");
this->animation->addSpriteFrameWithFileName("show5.JPG");
this->animation->addSpriteFrameWithFileName("show6.JPG");
this->animation->addSpriteFrameWithFileName("show5.JPG");
this->animation->addSpriteFrameWithFileName("show4.JPG");
this->animation->addSpriteFrameWithFileName("show3.JPG");
this->animation->addSpriteFrameWithFileName("show2.JPG");
this->animation->addSpriteFrameWithFileName("show1.JPG");
this->animation->setDelayPerUnit(0.1f);
this->animation->setRestoreOriginalFrame(true);
//CCAction* action = CCRepeat::create(CCAnimate::create(animation),1);
//设置 地鼠的出洞动画,和动画完成之后的回调函数
CCFiniteTimeAction * action = CCSequence::create(CCAnimate::create(animation),CCCallFuncND::create(this,callfuncND_selector(Hole::call_back),NULL),NULL);
this->image->runAction(action);
this->state = 1;
}
void Hole::call_back(CCNode* sender,void* ref)
{
this->state = 0;
}
bool Hole::isInSprite(CCTouch* touch)
{
CCPoint touchPoint = touch->getLocation();
CCPoint reallyPoint = this->convertToNodeSpace(touchPoint);
CCRect rect = this->boundingBox();
if(rect.containsPoint(touchPoint))
{
return true;
}
return false;
}
bool Hole::ccTouchBegan(CCTouch* touch, CCEvent* event)
{
if(this->isInSprite(touch) && this->state == 1)
{
//this->image->stopAllActions();
CCSprite* sp = CCSprite::create("hit.JPG");
CCTexture2D* hit = sp->getTexture();
this->image->setTexture(hit);
this->state = 0;
return true;
}
return false;
}
void Hole::ccTouchMoved(CCTouch* touch, CCEvent* event)
{
}
void Hole::ccTouchEnded(CCTouch* touch, CCEvent* event)
{
this->image->stopAllActions();
CCSprite* sp = CCSprite::create("emptyhole.JPG");
CCTexture2D* hit = sp->getTexture();
this->image->setTexture(hit);
}for(int i=0;i<3;i++){for(int j=0;j<3;j++){//初始化九宫格的精灵Hole* hole = new Hole();hole->init();hole->setPosition(CCSize(i*hole->getContentSize().width +hole->getContentSize().width/2, j*hole->getContentSize().height + hole->getContentSize().height/2));this->vect.push_back(hole);this->addChild(hole);}}//设置回调函数this->schedule(schedule_selector(HelloWorld::update),3.0);return true;}void HelloWorld::update(float tick){for(vector<Hole*>::iterator iter = this->vect.begin();iter != this->vect.end();iter++){//定时触发每个精灵的触发函数(*iter)->update(tick);}}
http://www.bkjia.com/Androidjc/981680.htmlwww.bkjia.comtruehttp://www.bkjia.com/Androidjc/981680.htmlTechArticle分享一个《打地鼠》的小游戏,cocos2dx版本,《打地鼠》cocos2dx 先上效果图: 主要的类: #include " Hole.h " #include stdlib.h #include " ccMacros.h "...