Cocos2d-x遊戲引擎開發[3]----建立錨點 (重建了一個類)
阿新 • • 發佈:2019-02-06
一般新建專案可以看到他是位於整個圖形介面的中心,原因是他設定了一個錨點,相當於落腳點。
因此我需要重做一個類研究這個影象在介面中的位置擺放,主要是下面這個程式碼
spr->setAnchorPoint(ccp(0.656,0.5))
他是影響錨點的關鍵,再通過這個程式碼你可以自由縮放影象大小,是按比例的縮放的哦。spr->setScale(5.0f)
我做的類(包含CPP,h)這樣更能清晰的觀察程式碼的結構。最終影象應該是這樣的
中間的線是用了draw函式主要是為了方便自己觀察
具體程式碼大致是這樣的.h
下面是.cpp#ifndef __T01LayerAnchorPoint_H__ #define __T01LayerAnchorPoint_H__ #include "cocos2d.h" USING_NS_CC; class T01LayerAnchorPoint :public CCLayer { public: static T01LayerAnchorPoint * create(); bool init(); static CCScene * scene(); void draw(Renderer* renderer, const Mat4 &transform, uint32_t flags); void mySchedule(float dt); CCSprite * spr; }; #endif
#include "T01LayerAnchorPoint.h" CCScene * T01LayerAnchorPoint::scene() { CCScene * scene = CCScene::create(); T01LayerAnchorPoint * layer = T01LayerAnchorPoint::create(); scene->addChild(layer); return scene; } T01LayerAnchorPoint * T01LayerAnchorPoint::create() { T01LayerAnchorPoint * pRet = new T01LayerAnchorPoint(); if (pRet && pRet->init()) { pRet->autorelease(); } else { delete pRet; pRet = NULL; } return pRet; } bool T01LayerAnchorPoint::init() { CCLayer::init(); CCSize winSize = CCDirector::sharedDirector()->getWinSize(); spr = CCSprite::create("anchor1.png"); //spr->setAnchorPoint(ccp(0.656,0.5)); spr->setScale(5.0f); spr->setPosition(ccp(winSize.width / 2, winSize.height / 2)); addChild(spr); schedule(schedule_selector(T01LayerAnchorPoint::mySchedule), 2); return true; } void T01LayerAnchorPoint::draw(Renderer* renderer, const Mat4 &transform, uint32_t flags) { CCSize winSize = CCDirector::sharedDirector()->getWinSize(); ccDrawColor4B(255, 0, 0, 255); ccDrawLine(ccp(0, winSize.height / 2), ccp(winSize.width, winSize.height / 2)); ccDrawLine(ccp(winSize.width / 2, 0), ccp(winSize.width / 2, winSize.height)); } void T01LayerAnchorPoint::mySchedule(float dt) { static float ro = 0; ro += 30; spr->setRotation(ro); }
大部分scene中錨點在中間的,但是大部分Layer是忽略錨點,因為我們要在這裡面新增精靈等多種東西。