#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
共38个文件
dll:9个
png:9个
h:5个
5星 · 超过95%的资源 需积分: 35 1.0k 下载量 169 浏览量
2012-12-07
12:47:37
上传
评论 8
收藏 3.92MB RAR 举报
温馨提示
如何制作一个简单的游戏 Cocos2d-x 2.0.4 本文实践自 Ray Wenderlich 的文章《How To Make A Simple iPhone Game with Cocos2D 2.X Tutorial》,文中使用Cocos2D,我在这里使用Cocos2D-x 2.0.4进行学习和移植 http://blog.csdn.net/akof1314/article/details/8268882
资源推荐
资源详情
资源评论
收起资源包目录
SimpleGamecocos2d-2.0-x-2.0.4.rar (38个子文件)
bin
libcocos2d.dll 1.49MB
SimpleGame.win32.exe 73KB
projectile.png 946B
libtiff.dll 513KB
monster.png 738B
libxml2.dll 963KB
libCocosDenshion.dll 32KB
pthreadVCE2.dll 76KB
pew-pew-lei.wav 48KB
background-music-aac.wav 1.57MB
glew32.dll 324KB
iconv.dll 868KB
zlib1.dll 76KB
libcurl.dll 224KB
player.png 585B
SimpleGame
Resources
projectile.png 946B
CloseSelected.png 5KB
monster.png 738B
CloseNormal.png 6KB
HelloWorld.png 142KB
pew-pew-lei.wav 48KB
background-music-aac.wav 1.57MB
Thumbs.db 12KB
player.png 585B
proj.win32
SimpleGame.rc 2KB
res
SimpleGame.ico 47KB
SimpleGame.win32.vcproj 6KB
Debug.win32
vc90.ib_pdb_index 709B
resource.h 500B
main.cpp 863B
main.h 270B
Release.win32
vc90.ib_pdb_index 825B
Classes
AppDelegate.cpp 1KB
HelloWorldScene.h 952B
AppDelegate.h 960B
HelloWorldScene.cpp 6KB
GameOverLayer.cpp 1KB
GameOverLayer.h 306B
共 38 条
- 1
无幻
- 粉丝: 3537
- 资源: 150
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
- 5
- 6
前往页