#include "HelloWorldScene.h"
#include "GameOverLayer.h"
using namespace cocos2d;
CCScene* HelloWorld::scene()
{
CCScene * scene = NULL;
do
{
// 'scene' is an autorelease object
scene = CCScene::create();
CC_BREAK_IF(! scene);
// 'layer' is an autorelease object
HelloWorld *layer = HelloWorld::create();
CC_BREAK_IF(! layer);
// add layer as a child to scene
scene->addChild(layer);
} while (0);
// return the scene
return scene;
}
// on "init" you need to initialize your instance
bool HelloWorld::init()
{
bool bRet = false;
do
{
CC_BREAK_IF(! CCLayerColor::initWithColor(ccc4(255, 255, 255, 255)));
CCSize winSize = CCDirector::sharedDirector()->getWinSize();
CCSprite *player = CCSprite::create("player.png", CCRectMake(0, 0, 27, 40));
player->setPosition(ccp(player->getContentSize().width / 2, winSize.height / 2));
this->addChild(player);
this->_monsters = CCArray::create();
this->_monsters->retain();
this->_projectiles = CCArray::create();
this->_projectiles->retain();
this->schedule(schedule_selector(HelloWorld::gameLogic), 1.0);
this->setTouchEnabled(true);
this->schedule(schedule_selector(HelloWorld::update));
CocosDenshion::SimpleAudioEngine::sharedEngine()->playBackgroundMusic("background-music-aac.wav");
bRet = true;
} while (0);
return bRet;
}
void HelloWorld::menuCloseCallback(CCObject* pSender)
{
// "close" menu item clicked
CCDirector::sharedDirector()->end();
}
void HelloWorld::addMonster()
{
CCSprite *monster = CCSprite::create("monster.png");
CCSize winSize = CCDirector::sharedDirector()->getWinSize();
int minY = monster->getContentSize().height / 2;
int maxY = winSize.height - monster->getContentSize().height / 2;
int rangeY = maxY - minY;
int actualY = (rand() % rangeY) + minY;
monster->setPosition(ccp(winSize.width + monster->getContentSize().width / 2, actualY));
this->addChild(monster);
int minDuration = 2.0;
int maxDuration = 4.0;
int rangeDuration = maxDuration - minDuration;
int actualDuration = (rand() % rangeDuration) + minDuration;
CCMoveTo *actionMove = CCMoveTo::create(actualDuration, ccp(-monster->getContentSize().width / 2, actualY));
CCCallFuncN *actionMoveDone = CCCallFuncN::create(this, callfuncN_selector(HelloWorld::spriteMoveFinished));
monster->runAction(CCSequence::create(actionMove, actionMoveDone, NULL));
monster->setTag(1);
_monsters->addObject(monster);
}
void HelloWorld::spriteMoveFinished(CCNode *sender)
{
CCSprite *sprite = (CCSprite*)sender;
this->removeChild(sprite, true);
if (sprite->getTag() == 1)
{
_monsters->removeObject(sprite);
CCScene *gameOverScene = GameOverLayer::sceneWithWon(false);
CCDirector::sharedDirector()->replaceScene(gameOverScene);
}
else if (sprite->getTag() == 2)
{
_projectiles->removeObject(sprite);
}
}
void HelloWorld::gameLogic( float dt )
{
this->addMonster();
}
void HelloWorld::ccTouchesEnded(CCSet *pTouches, CCEvent *pEvent)
{
CCTouch *touch = (CCTouch*)pTouches->anyObject();
CCPoint location = this->convertTouchToNodeSpace(touch);
CCSize winSize = CCDirector::sharedDirector()->getWinSize();
CCSprite *projectile = CCSprite::create("projectile.png");
projectile->setPosition(ccp(20, winSize.height / 2));
CCPoint offset = ccpSub(location, projectile->getPosition());
if (offset.x <= 0)
{
return;
}
this->addChild(projectile);
int realX = winSize.width + projectile->getContentSize().width / 2;
float ratio = (float)offset.y / (float)offset.x;
int realY = realX * ratio + projectile->getPosition().y;
CCPoint realDest = ccp(realX, realY);
int offRealX = realX - projectile->getPosition().x;
int offRealY = realY - projectile->getPosition().y;
float length = sqrtf(offRealX * offRealX + offRealY * offRealY);
float velocity = 480 / 1;
float realMoveDuration = length / velocity;
projectile->runAction(CCSequence::create(CCMoveTo::create(realMoveDuration, realDest),
CCCallFuncN::create(this, callfuncN_selector(HelloWorld::spriteMoveFinished)), NULL));
projectile->setTag(2);
_projectiles->addObject(projectile);
CocosDenshion::SimpleAudioEngine::sharedEngine()->playEffect("pew-pew-lei.wav");
}
HelloWorld::HelloWorld()
{
_monsters = NULL;
_projectiles = NULL;
_monstersDestroyed = 0;
}
HelloWorld::~HelloWorld()
{
if (_monsters)
{
_monsters->release();
_monsters = NULL;
}
if (_projectiles)
{
_projectiles->release();
_projectiles = NULL;
}
}
void HelloWorld::update(float dt)
{
CCArray *projectilesToDelete = CCArray::create();
CCObject *pObject = NULL;
CCObject *pObject2 = NULL;
CCARRAY_FOREACH(_projectiles, pObject)
{
CCSprite *projectile = (CCSprite*)pObject;
CCArray *monstersToDelete = CCArray::create();
CCARRAY_FOREACH(_monsters, pObject2)
{
CCSprite *monster = (CCSprite*)pObject2;
if (CCRect::CCRectIntersectsRect(projectile->boundingBox(), monster->boundingBox()))
{
monstersToDelete->addObject(monster);
}
}
CCARRAY_FOREACH(monstersToDelete, pObject2)
{
CCSprite *monster = (CCSprite*)pObject2;
_monsters->removeObject(monster);
this->removeChild(monster, true);
_monstersDestroyed++;
if (_monstersDestroyed > 30)
{
CCScene *gameOverScene = GameOverLayer::sceneWithWon(true);
CCDirector::sharedDirector()->replaceScene(gameOverScene);
}
}
if (monstersToDelete->count() > 0)
{
projectilesToDelete->addObject(projectile);
}
monstersToDelete->release();
}
CCARRAY_FOREACH(projectilesToDelete, pObject)
{
CCSprite *projectile = (CCSprite*)pObject;
_projectiles->removeObject(projectile);
this->removeChild(projectile, true);
}
projectilesToDelete->release();
}
SimpleGame cocos2d-x
5星 · 超过95%的资源 需积分: 35 43 浏览量
2012-12-07
12:47:37
上传
评论 8
收藏 3.92MB RAR 举报
无幻
- 粉丝: 3535
- 资源: 150
最新资源
- 魔兽地图格式转换工具.zip
- STM32单片机FPGA毕设电路原理论文报告零地址单片机仿真器的设计
- Grok:深入解析日志与数据的强大工具.zip
- STM32单片机FPGA毕设电路原理论文报告凌阳单片机在交通调度系统中的应用
- python办公:利用Pillow库实现图像的无损压缩
- STM32单片机FPGA毕设电路原理论文报告凌阳单片机在电子导游器中的应用
- STM32单片机FPGA毕设电路原理论文报告临界装置反应性加入速度测量系统设计
- STM32单片机FPGA毕设电路原理论文报告列车安全无线预警系统分站设备研制
- maven引用阿里镜像和jdk1.8版本设置
- STM32单片机FPGA毕设电路原理论文报告连续物料输送机单片机称重装置设计
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
- 1
- 2
- 3
- 4
- 5
- 6
前往页