接上一節內容: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 ~