cocos2dx - 建立地圖及玩家(僞)

接上一節內容:cocos2dx - 環境配置,項目建立html

本節主要描述cocos中精靈的建立及點擊事件的使用post

打開建立好的test項目,看到下圖的目錄結構,真正的遊戲邏輯路徑在src下。this

AppDelegate類主要描述啓動應用的一些設置及回調。url

HelloWorldScene類是當前顯示界面的場景類。spa

圖片精靈code

開始以前,先去掉HelloWorldScene下init方法的內容。而後建立Sprite類並添加到Scene節點中顯示,以下:htm

    // 獲取顯示的遊戲大小
    Size visibleSize = Director::getInstance()->getVisibleSize();
    // 獲取顯示區域的起始點
    Vec2 origin = Director::getInstance()->getVisibleOrigin();
    
    // 加載圖片精靈
    auto sprite = Sprite::create("1.jpg");
    // 設置位置在屏幕中間
    sprite->setPosition(Vec2(visibleSize.width / 2 + origin.x, visibleSize.height / 2 + origin.y));
    auto size = sprite->getContentSize();
    float scaleX = visibleSize.width / size.width;
    float scaleY = visibleSize.height / size.height;
    float scale = scaleX > scaleY ? scaleX : scaleY;
    sprite->setScale(scale);
    // 添加到節點上
    this->addChild(sprite, 0);

運行結果:對象

 

遊戲畫面看起來有點小,在AppDelegate中找到  designResolutionSize ,並設置合適大小。blog

static cocos2d::Size designResolutionSize = cocos2d::Size(960, 640);

看起來有點模糊,這裏是由於我找的原圖比較小,在加載時作了等比放大拉伸致使。(體會到沒美術的痛苦)遊戲

 

屏幕點擊事件

先添加一個玩家對象來表現效果,這裏addChild第2個參數表示層級,設爲1比上面的圖片高,則顯示在上層。

    // 加載圖片精靈
    m_pPlayer = Sprite::create("player.png");
    // 設置位置在屏幕中間
    m_pPlayer->setPosition(Vec2(visibleSize.width / 2 + origin.x, 100 + origin.y));
    // 添加到節點上
    this->addChild(m_pPlayer, 1);

效果以下:

在init添加以下代碼,並實現具體的 onTouchMoved 等方法

表示監聽this這個窗口的Touch事件,並回調到對應的 onTouchMoved等方法。

    // 添加屏幕點擊事件監聽
    auto dispatcher = Director::getInstance()->getEventDispatcher();
    auto myListener = EventListenerTouchOneByOne::create();
    //若是不加入此句消息依舊會向下傳遞  
    myListener->setSwallowTouches(true);
    myListener->onTouchBegan = std::bind(&HelloWorld::onTouchBegan, this, std::placeholders::_1, std::placeholders::_2);
    myListener->onTouchMoved = std::bind(&HelloWorld::onTouchMoved, this, std::placeholders::_1, std::placeholders::_2);
    myListener->onTouchEnded = std::bind(&HelloWorld::onTouchEnded, this, std::placeholders::_1, std::placeholders::_2);
    dispatcher->addEventListenerWithSceneGraphPriority(myListener, this);

在onTouchMoved加入以下代碼用來控制player移動看效果。

void HelloWorld::onTouchMoved(Touch *pTouch, Event *pEvent)
{
    if (m_pPlayer)
    {
        // 計算移動後的位置
        float desX = m_pPlayer->getPositionX() + pTouch->getDelta().x;

        // 防止超出屏幕
        Size visibleSize = Director::getInstance()->getVisibleSize();
        Vec2 origin = Director::getInstance()->getVisibleOrigin();
        if (desX<origin.x)
        {
            desX = origin.x;
        }
        if (desX>origin.x+visibleSize.width)
        {
            desX = origin.x + visibleSize.width;
        }
        m_pPlayer->setPositionX(desX);
    }
}

這樣遊戲中就有了簡單的地圖背景(圖片)及玩家,而且能夠進行左右移動。o(∩_∩)o ~

相關文章
相關標籤/搜索