当前位置:编程学习 > wap >>

cocos2d-x学习笔记(17)--简单游戏实例1--双枪手

cocos2d-x学习笔记(17)--简单游戏实例--双枪手
从最初的学习笔记到现在,一直在讲的都是一些基础操作,没有实际去做出一个游戏,有些人可能会疑问之前学得实不实用。为了更好地运用和巩固前面的知识,现在开始,我开始开发一个很简单的游戏--双枪手,是游戏总得有个名字的吧,可能起得不怎么样,大家见谅见谅!
这次游戏我会用到cocos2d-x下面一些知识(前面都学过的):
(1)地图
(2)粒子系统
(3)场景的切换
(4)精灵
(5)按钮
(6)回调函数
(7)动作
(8)精灵表单
step1:创建cocos2d-win32工程,并命名为myGame01;(以后还会陆续写一些游戏)
step2:这个游戏主要分成两大部分,第一部分是游戏的菜单部分,第二部分是游戏运行场景部分。我就先说第二部分吧!因为第一部分菜单按钮中的“开始按钮”会调用第二部分场景,所以从第二部分开始讲起,就不会牵涉到第一部分的代码;两者分开来写,思路会更清晰些,也方便日后代码的修改。
示意图:

由于About Game跳转到的场景比较简单这里不算进第二部分场景,可以直接忽略;
在HelloWorldScene.h中添加场景2的类:
[cpp]
class GameLayer:public CCLayerColor 

protected: 
    CCMutableArray<CCSprite*>* m_targets;//用于记录移动的靶子 
    CCMutableArray<CCSprite*>* m_fires;//用于记录发射的子弹 
    CCTMXTiledMap* m_map;//tmx地图 
    CCSprite *m_player;//发射炮弹的主角 
     
public: 
    GameLayer(); 
    ~GameLayer(); 
 
    void addTarget();//添加移动的靶子 
    void spriteMoveFinished(CCNode* pSender);//处理那些移动到屏幕之外的靶子 
    void gameLogic(ccTime dt); 
 
    void ccTouchesEnded(CCSet *pTouches, CCEvent *pEvent);//响应用户在屏幕上的点击事件 
 
    void update(ccTime dt);//处理每一帧画面中的对象 
    void moveMap(ccTime dt);//移动地图  
 
    void menuCloseCallback(CCObject* pSender);//退出游戏 
}; 

在HelloWorldScene.cpp中添加响应成员函数:
[cpp] 
/************************************************************************/ 
/* GameLayer                                                                     */ 
/************************************************************************/ 
GameLayer::GameLayer() 

    setIsTouchEnabled(true); 
    increaseX = 0;//初始化 
 
    m_targets = new CCMutableArray<CCSprite*>(NULL); 
    m_fires = new CCMutableArray<CCSprite*>(NULL); 
 
    CCSize size = CCDirector::sharedDirector()->getWinSize(); 
 
 
    //添加关闭按钮 
    CCMenuItemImage *pCloseItem = CCMenuItemImage::itemFromNormalImage( 
        "CloseNormal.png", 
        "CloseSelected.png", 
        this, 
        menu_selector(GameLayer::menuCloseCallback)); 
    pCloseItem->setPosition(ccp(CCDirector::sharedDirector()->getWinSize().width - 20, 20)); 
    CCMenu* pMenu = CCMenu::menuWithItems(pCloseItem, NULL); 
    pMenu->setPosition(CCPointZero); 
    addChild(pMenu, 10); 
 
    //添加player精灵 
    m_player = CCSprite::spriteWithFile("player.png", CCRectMake(0, 0, 40, 40)); 
    m_player->retain(); 
    //addChild(m_player, 1); 
    //m_player->setPosition(ccp(player->getContentSize().width / 2, size.height / 2)); 
 
    //添加地图 
    m_map = CCTMXTiledMap::tiledMapWithTMXFile("map.tmx"); 
    m_map->retain(); 
    m_map->setPosition(CCPointZero); 
    addChild(m_map, 3); 
    CCTMXObjectGroup* objGroup = m_map->objectGroupNamed("object"); 
    CCStringToStringDictionary* startPoint = objGroup->objectNamed("player"); 
    float posX = startPoint->objectForKey("x")->toFloat();  
    float posY = startPoint->objectForKey("y")->toFloat();  
 
    CCTexture2D* playerTexture = CCTextureCache::sharedTextureCache()->addImage("Player.png"); 
    m_player->setPosition(ccp(posX, posY)); 
    m_map->addChild(m_player); 
 
 
        this->schedule(schedule_selector(GameLayer::gameLogic), 1.0); 
        this->schedule(schedule_selector(GameLayer::update)); 
        this->schedule(schedule_selector(GameLayer::moveMap), 1.0); 
 

 
GameLayer::~GameLayer() 

    if(m_targets) 
    { 
        m_targets->release(); 
        m_targets = NULL; 
 
    } 
 
    if(m_fires) 
    { 
        m_fires->release(); 
        m_fires = NULL; 
    } 

 
void GameLayer::menuCloseCallback(CCObject* pSender) 

    //跳转到游戏开始处 
    CCScene* scene = new CCScene(); 
    CCLayer* layer = new GameMenuLayer(); 
    scene->addChild(layer); 
    CCDirector::sharedDirector()->replaceScene(scene); 
    scene->release(); 
    layer->release(); 

 
 
void GameLayer::moveMap(ccTime dt) 

 
 
    if(increaseX >= 2700)//地图移动到尽头,不能再移动 
        return; 
    increaseX += 50; 
    CCActionInterval* move = CCMoveBy::actionWithDuration(1, ccp(-50,0)); 
    m_map->runAction(move); 
    m_player->runAction(move->reverse()); 

 
void GameLayer::addTarget() 

 
    CCSize size = CCDirector::sharedDirector()->getWinSize(); 
 
  

补充:移动开发 , 其他 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,